Java中的请求域(Request)《笔记》
Request
关于一个web站点的欢迎页面
什么是一个web站点的欢迎页面?
对于一个webapp来说,我们可以设置它的欢迎页面
设置了之后,当访问这个webapp的时候,或者访问这个web站点的时候,没有指定任何资源路径,这时候会默认访问欢迎页面
怎么设置欢迎页面?
在web目录下新建一个文件login.html
在web.xml文件中进行以下的配置
<welcome-file-list><welcome-file>login.html</welcome-file> </welcome-file-list>
注意:设置欢迎页面的时候,这个路径不需要以“/”开始,并且这个路径默认是从webapp的下根查找
启动服务器,输入地址
- http://localhost:8080/servlet
一个webapp可以有多个欢迎页
Tomcat服务器的全局欢迎页面时:index.html index.htm index.jsp.如果你一个web站点没有这是局部的欢迎页面,Tomcat服务器就会以index.html。。。作为一个web站点的欢迎页面
HttpServletRequest接口
是Servlet规范中的一员,父接口是ServletRequest
HttpServletRequest对象中都有什么信息?都包装了什么信息?
- 封装了HTTP的请求协议
javaweb程序员面向HttpServletRequest接口编程,调用方法就可以获取到请求的信息了
HttpServletRequest和HttpServletResponse对象的生命周期?
- 一个是请求对象,一个是响应对象。这两个对象只在当前请求中有效
HttpServletRequest都有哪些常用方法?
怎么获取前端浏览器用户提交的数据?
Map<String,String[]> getParameterMap()//获取Map Enumeration<String> getParameterNames()//获取集合Map集合中所有的key String[] getParameterValues(java.lang.String name)//根据key获取Map集合的value String getParameter(String name)//获取value这个一维数组当中的第一个元素。这个方法最常用!!!!!!//以上四个方法,和获取用户提交的数据有关系。
思考:如果是你,前端的form表单提交了数据之后,你准备怎么存储这些数据,你准备采用怎么样的数据结构去存储这些数据?
前端提交的数据格式:username=abc&userpwd=111&aihao=s&aihao=d&aihao=tt
我会采用Map集合来存储:
Map<String,String>key存储Stringvalue存储String这种想法不对!!!!如果采取以上的想法,当key重复的时候value会被覆盖(Map集合的存储形式)我们需要采用 Map<String,String[]>key存储Stringvalue存储String[]
前端永远提交的是字符串,后端获得的也都是字符串
request对象实际上又称为“请求域”对象
- 应用域对象是什么?ServletContext(Servlet上下文对象)
- 实际上向应用域当中绑定数据,就相当于把数据放到了缓存(Cache)当中,然后用户访问的时候直接从缓存中取,减少IO操作,大大提升系统的性能,所以缓存技术是提高系统性能的重要手段
- 你见过哪些缓存技术?
- 字符串常量池
- 整数型常量池(-128~127)
- 数据库连接池(提前创建好N个连接对象,将连接对象放到集合当中,使用连接对象的时候,直接从缓存中拿。省去了连接对象的创建过程。效率提升)
- 线程池(Tomcat服务器就是支持多线程的,所谓的线程池就是提前创建好N个线程对象,将线程对象存储到集合中,然后用户请求过来之后,直接从线程池中获取线程对象,直接拿来用,提升系统性能)
- 应用域对象是什么?ServletContext(Servlet上下文对象)
请求域对象
要比应用域对象范围小很多,生命周期短很多,请求域只在一次请求内有效
请求域对象也有三个方法:
//存(怎么向ServletContext请求域中存数据) public void setAttribute(String name,Object value); //取(怎么从ServletContext请求域中取数据) public Object getAttribute(String name); //删(怎么删除ServletContext请求域中的数据) public void removeAttribute(String name);
请求域和应用域的选用原则?
- 尽量使用小的域对象,因为小的域对象占用的资源较少
如何把一个请求域中创建的对象,让另一个servlet读取?
这样做可以吗?在AServlet当中new一个BServlet对象,然后调用BServlet对象的doGet方法,把request对象传过去,不可以!!!,Servelt对象不能由程序员来new,自己new的Servlet对象生命周期不受Tomcat服务器的管理。
使用Servlet当中的转发机制,执行了AServlet之后,跳转到BServlet。(这个资源跳转可以使用转发机制完成)
//第一步:获取请求转发器对象 //相当于把"/b"这个路径包装到请求转发器当中,实际上是把下一个跳转的资源的路径告知给Tomcat服务器了RequestDispatcher dispatcher = request.getRequestDispatcher("/b");//第二步:调用请求转发器的forward方法,进行转发 dispatcher.forward(request,response);//也可以合成一步 request.getRequestDispatcher("/b").forward(request,response);
两个Servlet怎么共享数据?
- 将数据放到ServletContext应用域,太占用资源,不建议使用
- 可以将数据放到request域当中,然后利用转发机制,这样就能做到两个或者多个Servlet共享同一份数据
转发的下一个资源一定是Servlet吗?
- 不一定,只要是Tomcat服务器的合法资源,都是可以转发的。例如:html…
- 路径不要加项目名
关于request对象中非常容易混淆的方法:
//uri?username=zhangsan&userpwd=123&sex=1 String username = request.getParameter("username");//之前一定执行过:request.setAttribute("name",name Object()) Object obj = request.getAttribute("name");//区别: //第一个方法:获取的是用户在浏览器提交的数据 //第二个方法:获取的是请求域当中绑定的数据
request对象中其他方法
设置请求体的字符集(是处理POST请求的乱码问题,这种方式并不能解决get请求的乱码问题),Tomcat10以后,默认字符集就是UTF-8,不需要设置字符集,不会出现乱码问题
request.setCharacterEncoding("UTF-8");
获取客户端的IP地址
String remoteAddr = request.getRemoteAddr();
get请求乱码解决问题
- 没有乱码问题,除非瞎改(Tomcat8之后默认就是UTF-8)
response响应中文乱码问题(Tomcat10之后不会乱码)
response.setContentType("text/html;charset=UTF-8");
动态获取应用的根路径
String contextPath = request.getContextPath();
获取请求方式
String method = request.getMethod();
获取请求的URI
String requestURI = request.getRequestURI();// /aaa/testRequest
获取servlet path
String servletPath = request.getServletPath();// /testRequest
Java中的请求域(Request)《笔记》相关推荐
- java作用域范围_比较java中四个域的作用域范围大小
四个域的作用域范围大小:PageContext (page域) < request < session < servletContext(application域) 一.Servle ...
- Java中 操作Servlet域中的值以及会话技术 cookie
XML文件<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...
- 浅析java中的死锁_Java学习笔记五十五(死锁问题)
多线程死锁问题. 我们知道,多线程可以改善系统的资源利用率,并且可以提高程序的运行效率.但是,多线程也带来了新的问题,即:死锁问题. 1.死锁的概念 死锁可以理解为多个线程为了争夺同一个资源,而出现互 ...
- java 中常用的类(笔记 十六)
目录 一. 字符串相关的类 1.创建字符串 2.String常用方法 3.StringBuffer StringBuffer类的常用方法 4.StringBuilder 二.JDK 8之前的日期时间A ...
- java 中的 Annotation 注解学习笔记
java 中的 Annotation 注解 什么是注解 元注解 @Target @Retention @Document @Inherited 自定义注解 什么是注解 Annotation 是从JDK ...
- java中的 请求体_在spring mvc test中访问请求体和请求头
我创建了一个spring boot应用程序,这就是我的控制器的样子 . 我使用postman在请求体中发送json,在请求头中发送一个字符串,然后进一步散列json并将其与请求头获取的字符串进行比较 ...
- java中scort意思_java入门—笔记
一.初始java 1.计算机程序:色i了让计算机执行某些操作或解决某个问题而编写的一系列有序的指令集合. 2.编写程序的工具就是计算机语言,java就是其中的一种. 3.printin 打印完引号中的 ...
- java中ajax跨域请求
最近在项目中要使用到跨域请求验证码然后再提交的问题.由于验证码是存在session里的,而跨域请求在后台获得的session每次都不一样,导致验证码无法比对.网上查找的方法都比较含糊,最后解决了决定写 ...
- java中的printnb_javaI/O系统笔记
1.File类 File类的名字有一定的误导性:我们可能认为它指代的是文件,实际上却并非如此.它既能代表一个 特定文件的名称,又能代表一个目录下的 一组文件的名称. 1.1.目录列表器 如果需要查看目 ...
最新文章
- PCL深度图像(1)
- 2022年清华大学大数据研究中心 | 招募夏季学期《大数据实践课》合作企业
- Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四)...
- python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
- sharepoint配置问题解决方案
- 你愿意隐姓埋名一辈子吗?
- skills --札记
- python微信集成_python+微信+腾讯智能闲聊
- Redis 主从复制的实现及配置
- Java实现word转HTML
- java输入法中手写文字的识别_在线手写识别
- 【2018滴滴】寻找丑数
- 自定义敏感词检测器_使用转移学习创建自己的自定义对象检测器
- linux下容器find函数,你知道Linux系统中find命令的使用方法吗?
- 可以这样理解 TIM_INIT(arr,psc)重装载值和分频值
- 中奖率的三种常用算法
- 典故:一文钱难倒英雄汉
- 《白帽子讲Web安全》memo0
- opecv BGR转NV21
- 窗口非客户区绘制位图与设计