Servlet相关Request
前面了解了一些Servlet的运行原理和继承体系,但是要进行业务操作还要了解一些其他知识点
未完结 先定个锚点
一,Request原理

上图是我对它的理解。
二,继承体系
ServletRequest 接口
|
HttpServletRequest 接口
|
RequsetFacade (tomcat实现的类)
三,Request的功能
1. 获取请求的消息数据
1.获取请求行
- GET /test/demo01?name=zhangsan HTTP/1.1
- 方法:
后面加***代表比较重要常用到其余混个脸熟即可。
1. String getMethod() 获取访问方式 get
2. String getContextPath() 获取虚拟目录 /test ***
3. String getServletPath() 获取Servlet路径 /demo01
4. String getQueryPath() 获得参数 name=zhangsan 一般不用此方法
5. String getRquestURI() 获得请求URI /test/demo01 ***
6. String getRquestProtocol() 获得请求协议 http/1.1
7. String getRemoteAddress() 获得客户机的ip地址
2. 获取请求头
String getHeader() 通过请求头名字获取值;***经常用
Enumeration<String> getHeaderNames() 获取所有请求头,返回的是一个特殊的Enum 了解即可。不咋用
3. 获取请求体 careful:只有post请求才有请求体,也就是说下方这些只能是post的才能用!!!
1,先获取流对象
BufferedReader getReader() 获取字符输入流用来读取请求体内容,只能读取字符文本
ServletInputStream getInputStream() 获取字节输入流 用于文件的传输
2,从流中取得数据
例如 字符流的 String readLine() 读取一行数据
2. 其他功能
1. 获取请求参数的通用方式
1. String getParameter(String name) 通过参数名称获取参数值
2. String[] getParameterValues(String name) 通过参数名获取一组参数值,比如一组复选框
3.Enumeration<String> getParameterNames() 获取所有参数名称 相同名称只能存一个
例如同组复选框参数名相同,根据参数名只能获得一个值
4.map<String,String[]> getParameterMap() 获取所有参数封装在map集合中
能够解决getParameterNames作用复选框时产生的漏参数值问题
**中文乱码问题**
get请求:在tomcat8之后 tomcat内部已经自动实现解决乱码问题了
post请求:需要我们手动设置编码方式
因为获取参数的方法内部也是封装了流,所以加上 request.setCharacterEncoding("utf-8")
2. 请求转发:服务器内部资源跳转方式 本质上仍是一次请求
首先获得一个RequestDispatcher对象 req.getRequestDispatcher()
然后调用此对象的方法forward(Request req,Response resp)
careful:还有一种重定向转发调度,可以转发到服务器外部资源与这有很大区别。
3. 共享数据
* 域对象:一个有作用范围的对象,可在一定范围内共享数据
* request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
*方法:
void setAttribute(String name,Object obj) 通过键值对存储数据
Object getAttribute(String name) 通过key值取 value
void removeAttribute(String name) 通过key移除 数据
4. ServletContext 有单独随笔
既生为人,当有所为~
请留下自己的痕迹

浙公网安备 33010602011771号