写在前面:
request请求原理:tomcat创建request、response对象
请求行 | getRequestURI (短) |
getContextPath() 虚拟路径 | |
请求头 | getHeader(头名称) |
请求体 | getReader / getInputStream |
setCharacterEncoding |
getParameter(名) |
getParameterMap() |
getParameterValues(名) |
getParameterNames() |
转发 | getRequestDispatcher(资源路径) |
dispatcher.forward(request,response) | |
共享数据 | setAttribute |
getAttribute | |
removeAttribute |
BeanUtils.populate(对象, map) |
setProperty |
getProperty |
1. 原理
request请求原理
tomcat首先根据url,利用反射创建servlet类对象
tomcat创建request、response对象(request中封装了请求消息的数据)
我们可以获取request中的数据,设置response中的数据
tomcat服务器会将response中的内容设置成响应消息数据,给浏览器发出响应消息
request集成体系结构
ServletRequest(接口)-----HttpServletRequest(子接口)-----RequestFacade(tomcat下的实现类)
2. request功能---获取请求消息数据
请求行
getMethod() 请求方式
getProtocol() 协议及版本
getRemoteAddr() ip
getQueryString() 请求参数(xx=xx&xx=xx)
* getContextPath() 虚拟目录(一般为项目名,ip:port/虚拟目录/资源路径)
getServletPath() 资源路径
* getRequestURI() (短:/虚拟目录/资源路径)
getRequestURL() (长:协议://ip:port/虚拟目录/资源路径)
请求头
* getHeader(头名称) 不区分大小写
getHeaderNames() 返回值:Enumeration<String>,看作迭代器,获取所有的头名称
请求体
获取流对象,再从流中拿数据
getReader()
getInputStream()
获取请求参数的通用方法(get/post)
getParameter(参数名)
getParameterValues(参数名) 参数值的数组,多用于复选框
getParameterMap() <参数名, 参数值>
getParameterNames() 参数名的枚举(看作迭代)
中文乱码问题
设置流的编码:request.setCharacterEncoding("utf-8");
tomcat8已经将get方式的乱码问题解决了,但是post的还没有解决
3. 请求转发
一种服务器内部的资源跳转方式
特点:
地址栏不变
只能访问当前服务器内部的资源
只发送一份请求,多个资源使用同一份请求
代码:
获取请求转发器对象:getRequestDispatcher(资源路径)
转发:forward(request,response)
4. request的数据共享
request的域(作用范围):一次请求
一般用于在转发中共享数据
方法:
setAttribute(名, 值) 存数据(到request域中)
getAttribute(名) 取数据
removeAttribute(名) 删除数据
5. BeanUtils工具类
用到工具包:commons-beanutils-1.8.0.jar
方法:
setProperty(对象, 属性名, 属性值)
getProperty(对象, 属性名)
populate(对象, map) 将map封装到对象中(k属性名,v属性值)
JavaBean
标准Java类,一般放在domain包下
要求:类被public修饰,提供空参构造起,成员变量用private修饰,提供public的setter、getter方法
功能:封装数据
属性:getter、setter截取后的产物(getName---Name---name属性)