Request(请求)
- Request:获取请求数据
- Response:设置响应数据
Request 继承体系
1.Tomcat 需要解析请求数据,封装为 request 对象,并且创建 request 对象传递到 service 方法中。
2.使用 request 对象,查阅 javaEE API 文档的 HttpServletRequest 接口。
Request 获取请求数据
- 请求数据分为3部分:
-
1.请求行:
- String getMethod(): 获取请求方式:GET
- String getContextPath(): 获取虚拟目录(项目访问路径):/request-demo
- StringBuffer getRequestURL(): 获取 URL(统一资源定位符): http://localhost:8080/request-demo/req1
- String getRequestURI(): 获取 URI(统一资源标识符):/request-demo/req1
- String getQueryString(): 获取请求参数(GET方式):username = zhangsan&password = 123
-
2.请求头:
- String getHeader(String name): 根据请求头名称获取值。
-
请求体:
- ServletInputStream getInputStream(): 获取字节输入流
- BufferedReader getReader(): 获取字符输入流
-
通过方式获取请求参数
-
请求参数获取方式:
-
GET 方式:
-
POST 方式
思考:GET 请求方式 和 POST 请求方式区别主要在于获取请求参数的方式不一样是否可以提供一种统一获取请求参数的方式,从而统一 doGet和 doPost 方法内的代码?
Request 通过方式获取请求参数
-
-
Map< String,String[] > getParameterMap(): 获取所有参数 Map 集合
-
String[] getParameterValues(String name): 根据名称获取参数值(数组)
-
String getParameter(String name): 根据名称获取参数值(单个值)
-
使用通用方式获取请求参数后,屏蔽了 GET 和 POST 的请求方式代码的不同,则代码可以定义为如下格式:
-
可以使用 Servlet 模板创建 Servlet 更高效
请求参数中文乱码处理
-
请求参数如果存在中文数据,则会乱码
-
乱码原因:
-
解决方案:
-
POST : 设置输入流的编码
-
通用方式(GET/POST): 先编码,再解码
-
-
URL编码
- 1.将字符串按照编码的方式转为二进制
- 2.每个字节转为2个16进制数并在前边加上 %
总结
1.中文乱码解决方案:
-
POST : 设置输入流的编码
-
通用方式:(GET/POST) : 先解码,再编码
2.URL 编码实现方式: -
编码:
-
解码:
Request请求转发
-
请求转发(forword):一种在服务器内部的资源跳转方式
实现方式:
-
请求转发资源间共享数据:使用 Request 对象
- void setAttribute(String name,Object o): 存储数据到 request域中
- Object getAttribute (String name): 根据 key,获取值
- void removeAttribute(String name): 根据key,删除该键值对
-
请求转发特点:
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器的内部资源
- 一次请求,可以在转发的资源间使用 request 共享数据