请求对象:
如前几篇博客所述,请求绑定servlet并作出相应的响应。web容器在接收到浏览器请求后,会将相应的请求封装成对象(HttpServletRequest)传递给相应的servlet做进一步处理。
对象分析:
HeepServletRequest类提供了大量对请求信息进行操作的方法,具体内容可参考Java API。这里仅浅析几个方法,从而进一步理解servlet处理流程。
请求参数:
先看下几个HttpServletRequest提供的几个方法
名称 | 解释 | 返回参数 |
---|---|---|
getParameter(“name”) | 返回指定name的对应值 | String |
getParameterValues(“name”) | name存在多个对应值,返回多个值 | String[] |
getParameterNames() | 获取全部请求参数 | Enumration |
getParameterMap() | 键值对方式获取参数 | Map< String, String[]> |
name=指定参数名称
实践一下:
尝试HttpServletRequest提供的不同方法,响应输出相应的参数。以下按上述表格顺序依次实践!
5.
代码示例:
@WebServlet("/change")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter p = response.getWriter();
//获取指定属性的请求参数值
//String t = request.getParameter("submit");
// String t = request.getParameter("input");//多个值只输出第一个
// p.println(t);
//获取相同请求属性下的所有参数值
// String[] values = request.getParameterValues("input");
// for(String x: values)
// p.println(x + " ");
//获取所有请求参数
// Enumeration<String> e = request.getParameterNames();
// int count = 0;
// while(e.hasMoreElements()) {
// String te = e.nextElement();
// p.println(te);
// count++;
// }
// System.out.println(count);
//键值对方式获取
Map<String, String[]> m = request.getParameterMap();
String[] valueM = m.get("input");
for(String x: valueM)
p.println(x + " ");
}
}
前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="random" method="post">
<input type="submit" name="submit" value="submit">
<input name="output">
<input name="input">
<input name="input">
</form>
</body>
</html>
以下代码设置请求方式,项目默认设置GET。
<form action="random" method="post">
若项目未显示设置post请求方式,或者后端代码无doGet()方法,则会出现以下错误。
标头请求参数:
HttpServletRequest类提供了类似获取请求参数的方式获取标头参数,具体可参考API文献。
@WebServlet("/Demo")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter p = response.getWriter();
Collections.list(request.getHeaderNames()).forEach(name -> {
p.printf("%s: %s<br>", name, request.getHeader(name));
});
}
}
结果打印: