在本教程中,我将向您展示如何从 Servlet Request对象检索各种数据,例如标头,参数,路径和会话数据

当客户端(浏览器)向 Servlet 发出 GET,POST,PUT 等请求时,HttpServletRequest对象将保存有关客户端和请求本身的有价值的信息。 在下面的示例中,我将列出请求对象的一些最有趣的方法以及如何提取信息。

  1. package net.javatutorial.tutorials;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Enumeration;
  5. import java.util.Map;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.Cookie;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. public class ServletInfo extends HttpServlet {
  12. private static final long serialVersionUID = -2383814320847175129L;
  13. @Override
  14. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. PrintWriter pr = response.getWriter();
  17. pr.println("=== Paths ===\n");
  18. pr.println("Request URL : " + request.getRequestURL());
  19. pr.println("Request URI : " + request.getRequestURI());
  20. pr.println("Servlet path : " + request.getServletPath());
  21. pr.println("\n=== Headers ===\n");
  22. Enumeration<String> e = request.getHeaderNames();
  23. while(e.hasMoreElements()){
  24. String param = (String) e.nextElement();
  25. pr.println(param + " : " + request.getHeader(param));
  26. }
  27. pr.println("\n=== Parameters ===\n");
  28. Map<String, String[]> paramsMap = request.getParameterMap();
  29. for (String key : paramsMap.keySet()) {
  30. pr.println(key + " : " + request.getParameter(key));
  31. }
  32. pr.println("\n=== Session ===\n");
  33. // returns 0:0:0:0:0:0:0:1 if executed from localhost
  34. pr.println("Client IP address : " + request.getRemoteAddr());
  35. pr.println("Session ID : " + request.getRequestedSessionId());
  36. // Cookie objects the client sent with this request
  37. Cookie[] cookies = request.getCookies();
  38. if (cookies != null) {
  39. for (Cookie cookie : cookies) {
  40. pr.print(cookie.getName() + ";");
  41. }
  42. }
  43. }
  44. }

从我的 Google Chrome 版本 51.0.2704.103 请求http://localhost:8080/ServletInfo/nfo?section=tutorials&lang=javalocalhost Tomcat 服务器上的 servlet 显示以下输出:

Servlet 请求信息示例 - 图1

请求信息输出

HttpServletRequest方法

getRequestURL() – 返回客户端用于发出请求的整个 URL,包括协议(http 或 https),服务器名称,端口号和服务器路径,但不包括查询参数

getRequestURI() – 仅返回 URL 的服务器路径部分

getServletPath() – 返回在 Tomcat 中部署的应用程序路径(在上面的示例中为/info

getHeaderNames() – 返回与请求一起传递的所有标头中的名称的枚举

getHeader(headerName) – 返回具有给定名称的标头的值

getParameterMap() – 返回带有所有参数及其值的HashMap

getParameter(key) – 返回具有给定键(名称)的参数的值

getRemoteAddr() – 返回客户端的 IP 地址。 如果请求是在本地主机上执行的,则返回值为0:0:0:0:0:0:0:1127.0.0.1的 IPv6 等效值

getRequestedSessionId() – 返回远程会话 ID(如果提供)

getCookies() – 返回与此请求一起发送的客户端的Cookie对象数组

您可以在 GitHub 中找到整个项目: https://github.com/JavaTutorialNetwork/Tutorials/tree/master/ServletInfo