一、Request继承体系
1.ServletRequest
Java提供的请求对象根接口。
2.HttpServletRequest(★)
ServletRequest的子接口,是Java提供的对Http协议封装的请求对象接口。
【tips】要使用Request对象,只需要查阅API文档中的HttpServletRequest接口。
3.RequestFacade
由Tomcat定义的HttpServletRequest的实现类。
二、Request获取请求数据(★)
1.获取请求行数据
String getMethod() |
获取请求方式 |
String getContextPath() |
获取虚拟目录(即项目访问路径) |
StringBuffer getRequestURL() |
获取URL(统一资源定位符) |
String getRequestURI() |
获取URI(统一资源标识符) |
String getQueryString() |
获取GET请求方式的请求参数 |
2.获取请求头数据
String getHeader(String headerName) |
根据请求头名称获取值 |
3.获取请求体数据
使用IO流的方式获取POST方式中请求体的数据。
ServletInputStream getInputStream() |
获取字节输入流,用于文件、图片、音频、视频等。 |
BufferedReader getReader() | 获取字符输入流,用于纯文本。 |
4.Request通用方式获取请求体的数据(★)
在doPost中使用"this.doGet(req,resp);"代替与doGet相同部分的代码,只需要在doGet中写代码即可。
Map<String,String[]> getParameterMap() | 获取所有参数的Map集合 |
String[] getParameterValues(String name) | 根据名称获取参数值数组(多个参数) |
String getParameter(String name) |
根据名称获取单个参数值 |
5.解决请求参数时的中文乱码问题
(1)POST的解决方式:
获取POST请求数据使用的是IO流的方式,将IO流的编码设置为UTF-8即可,可以使用Request对象的setCharacterEncoding(String 编码名)方法设置输入流的编码。
request.setCharacterEncoding("UTF-8");
(2)GET的解决方式:
先编码,再解码:先将得到的请求数据按照"ISO-8859-1"编码成字节数组,再将该字节数组按照"UTF-8"解码成中文字符串。
String username = request.getParameter("username"); //对得到的请求数据进行编码(转为字节数组) byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1); //字节数字解码 username = new String(bytes,StandardCharsets.UTF_8);【tips】①GET的解决方式也适用于解决POST请求方式中的乱码问题;
②ISO-8859-1:是Tomcat中默认的编码方式;
③Tomcat 8.0以后已解决GET请求乱码问题,默认解码方式为UTF-8。
三、请求转发(forward)
1.概念
请求转发是一种在服务器内部的资源跳转方式。
2.实现
从资源A跳转到资源B:
request.getRequestDispatcher("资源B路径").forward(req,resp);
3.请求转发资源间的数据共享
使用Request对象中的方法来实现:
void setAttribute(String name,Object o) | 存储键值对数据到request域 |
Object getAttribute(String name) | 根据键,获取值 |
void removeAttribute(String name) | 根据键,删除该键值对 |
4.请求转发的特点
(1)浏览器地址栏路径不变化;
(2)请求转发只能转发到当前服务器内部的资源;
(3)一次请求,可以在转发的资源间使用request共享数据。