目录
-
ServletRequest对象包含了请求信息(请求行、请求头、请求体),通过Servlet的services方法传递的;
-
HttpServletRequest提供了额外的针对HTTP协议相关的功能。
请求对象获取请求行
@WebServlet("/demo13")
public class Demo13Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//getMethod : 获取请求方式
System.out.println("请求方式 = " + request.getMethod());
//getContextPath : 获取项目访问路径
System.out.println("项目访问路径 = " + request.getContextPath());
//getServletPath : 获取Servlet访问路径
System.out.println("Servlet访问路径 = " + request.getServletPath());
//getRemoteAddr : 获取客户端地址
System.out.println("客户端地址 : " + request.getRemoteAddr());
//getLocalAddr : 获取服务器地址
System.out.println("服务器地址 : " + request.getLocalAddr());
//getRequestURL : 找设备 -> 找tomcat -> 找项目 -> 找资源
System.out.println("统一资源定位符 : " + request.getRequestURL());
//getRequestURI : 找项目 -> 找资源
System.out.println("统一资源标识符 : " + request.getRequestURI());
//getQueryString(了解) : 获取URL后的参数
System.out.println("QueryString : " + request.getQueryString());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
请求对象获取请求头
@WebServlet("/demo14")
public class Demo14Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//getHeader : 根据指定请求头名称获取值
String userAgent = request.getHeader("User-Agent");
System.out.println("userAgent = " + userAgent);
//getHeaders : 根据指定请求头名称获取一组值
Enumeration<String> headerValues = request.getHeaders("User-Agent");
while (headerValues.hasMoreElements()) {
String headerValue = headerValues.nextElement();
System.out.println("userAgent = " + headerValue);
}
//getHeaderNames: 获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println("headerName = " + headerName + " , headerValue = " + headerValue);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
请求对象获取请求参数
@WebServlet("/demo15")
public class Demo15Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//getParameter : 根据指定请求参数名称获取值
String username = request.getParameter("username");
System.out.println("username = " + username);
String password = request.getParameter("password");
System.out.println("password = " + password);
//getParameterValues : 根据指定请求参数名称获取一组值(多选)
String username2 = request.getParameterValues("username")[0];
System.out.println("username2 = " + username2);
String password2 = request.getParameterValues("password")[0];
System.out.println("password2 = " + password2);
//getParameterNames : 获取所有请求参数名称
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement();
String parameterValue = request.getParameter(parameterName);
System.out.println("parameterName = " + parameterName + " , parameterValue = " + parameterValue);
}
//getParameterMap : 获取请求参数,并将其封装成map(键=参数名,值=一组参数值)
Map<String, String[]> parameterMap = request.getParameterMap();
Set<Map.Entry<String, String[]>> entrySet = parameterMap.entrySet();
for (Map.Entry<String, String[]> entry : entrySet) {
String parameterName = entry.getKey();
String[] parameterValues = entry.getValue();
System.out.println("parameterName = " + parameterName + " , parameterValues = " + Arrays.toString(parameterValues));
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
请求参数的封装
一般都是使用工具类自动封装即可。
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
System.out.println("user = " + user);
} catch (Exception e) {
e.printStackTrace();
}
注意事项
-
①ClassNotFoundException: org.apache.commons.beanutils.BeanUtils,一般都是jar包导入有问题;javaweb项目,jar包的lib目录应该在WEB-INF目录中。
-
②使用BeanUtils工具类时,表单中的name属性值和setXxx方法名一致,和javabean中的属性名无关。
请求参数中文乱码问题 重点!
-
GET请求
-
没有请求参数中文乱码问题
-
-
POST请求
-
有请求参数中文乱码问题
-
-
解决方案
-
①先编码(iso8859-1),再解码(utf-8)
-
②告诉服务器,以utf-8解码请求正文
-
方案1:
@WebServlet("/demo18")
public class Demo18Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
//先编码(iso8859-1)
byte[] bys = username.getBytes("iso8859-1");
//再解码(utf-8)
username = new String(bys,"utf-8");
System.out.println("username = " + username);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
解决方案2:
@WebServlet("/demo19")
public class Demo19Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉服务器,以utf-8解码请求正文
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
System.out.println("username = " + username);
String password = request.getParameter("password");
System.out.println("password = " + password);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
-
tomcat7.0(了解)
-
GET请求
-
有请求参数中文乱码问题
-
①先编码(iso8859-1),再解码(utf-8)
-
②告诉服务器,以utf-8解码路径后参数 ( URIEncoding="UTF-8")
-
-
POST请求
-
有请求参数中文乱码问题
-
①先编码(iso8859-1),再解码(utf-8)
-
②告诉服务器,以utf-8解码请求正文
-
-
-
注意事项
-
request.setCharacterEncoding("utf-8");必须放在所有获取请求参数之前,否则无效!
-