在 Serlvet 中获取请求信息:ServletRequest封装请求信息和ServletResponse封装响应信息
- 如何在 Serlvet 中获取请求信息:
- 1.Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法
- 2.ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
- ①. 获取请求参数:
- ②. 获取请求的 URI:
- ③. 获取请求方式:
- ④. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
- ⑤. 获取请求的 Serlvet 的映射路径
- ⑥. 和 attribute 相关的几个方法:
- 3.HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
- 4.ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
如何在 Serlvet 中获取请求信息:
1.Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
//ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
//ServletResponse: 封装了响应信息, 如果想给用户什么响应, 均可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
2.ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
①. 获取请求参数:
1. 只能获取参数的第一个值。
>String getParameter(String name): 根据请求参数的名字, 返回参数值.
若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.
例如在login.html页面中设计参数的多个值
interesting:
<input type="checkbox" name="interesting" value="reading"/>Reading
<input type="checkbox" name="interesting" value="game"/>Game
<input type="checkbox" name="interesting" value="party"/>Party
<input type="submit" value="Submit"/>
在LoginServlet.java文件中来获取参数的值,那么在服务器上运行login.html文件后参数的值只能获取到第一个提交的值。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
String interesting = request.getParameter("insteresting");
System.out.println("insteresting");
}
控制台输出结果为:interesting
2. 能获取到参数对应的字符串数组
>String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.
同样在login.html文件中设置参数的多个值,在LoginServlet.java文件中来获取参数的值,那么在服务器上运行login.html文件后参数的值能获取到参数对应的字符串数组。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
String[] interestings = request.getParameterValues("interesting");
for(String interest:interestings) {
System.out.println("---> "+interest);
}
}
控制台输出结果如下:
3.获取参数名对应的 Enumeration 对象
> Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
具体实现代码如下:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
Enumeration<String> names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = names.nextElement();
String val = request.getParameter(name);
System.out.println(name + ": "+val);
}
}
控制台输出结果如下:
4.获取参数的键值对
> Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
具体实现代码如下:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
Map<String, String[]> map = request.getParameterMap();
for(Map.Entry<String, String[]> entry: map.entrySet()){
System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));
}
}
控制台输出结果如下:
②. 获取请求的 URI:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);
}
}
控制台输出结果如下:
③. 获取请求方式:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String method = httpServletRequest.getMethod();
System.out.println(method);
}
}
控制台输出结果为:GET
④. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String queryString = httpServletRequest.getQueryString();
System.out.println(queryString);
}
}
控制台输出结果如下:
⑤. 获取请求的 Serlvet 的映射路径
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath);
}
}
控制台输出结果如下:
⑥. 和 attribute 相关的几个方法:
- HttpServletRequest:是ServletRequest的子接口,针对于http请求所定义,里面包含了大量获取http请求的相关方法;
- ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现;
①getWriter():返回PrintWriter对象,调用该对象的print方法,将会把print()方法的参数直接打印到客户的浏览器上;
②设置响应的内容类型,response.setContentType(“application/msword”);
③httpServletResponse.sendRedirect("") 请求的重定向,(此方法为HttpServletResponse中定义的)
3.HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
4.ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
①. *getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("helloword..."); //将会打印到客户的浏览器上
}
}
②. 设置响应的内容类型: response.setContentType(“application/msword”);
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
response.setContentType("application/msword");
PrintWriter out = response.getWriter();
out.println("helloword..."); //将会打印到客户的浏览器上
}
}
当在客户的浏览器上提交时,服务器会做出响应从而可以下载word文档。
③. void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)