java如何得到GET和POST请求URL和参数列表

时间:2023-03-10 06:20:09
java如何得到GET和POST请求URL和参数列表

转载:http://blog.csdn.net/yaerfeng/article/details/18942739

在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完整的请求路径和请求所有参数列表,POST的需要getParameterMap()方法遍历得到,不论GET或POST都可以通过getRequestURL+getParameterMap()来得到请求完整路径

  1. package com.zuidaima
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Map;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class GetParams extends HttpServlet {
  10. private static final long serialVersionUID = 1L;
  11. public GetParams() {
  12. super();
  13. }
  14. protected void doGet(HttpServletRequest request,
  15. HttpServletResponse response) throws ServletException, IOException {
  16. PrintWriter writer = response.getWriter();
  17. writer.println("GET " + request.getRequestURL() + " "
  18. + request.getQueryString());
  19. Map<String, String[]> params = request.getParameterMap();
  20. String queryString = "";
  21. for (String key : params.keySet()) {
  22. String[] values = params.get(key);
  23. for (int i = 0; i < values.length; i++) {
  24. String value = values[i];
  25. queryString += key + "=" + value + "&";
  26. }
  27. }
  28. // 去掉最后一个空格
  29. queryString = queryString.substring(0, queryString.length() - 1);
  30. writer.println("GET " + request.getRequestURL() + " " + queryString);
  31. }
  32. protected void doPost(HttpServletRequest request,
  33. HttpServletResponse response) throws ServletException, IOException {
  34. PrintWriter writer = response.getWriter();
  35. Map<String, String[]> params = request.getParameterMap();
  36. String queryString = "";
  37. for (String key : params.keySet()) {
  38. String[] values = params.get(key);
  39. for (int i = 0; i < values.length; i++) {
  40. String value = values[i];
  41. queryString += key + "=" + value + "&";
  42. }
  43. }
  44. // 去掉最后一个空格
  45. queryString = queryString.substring(0, queryString.length() - 1);
  46. writer.println("POST " + request.getRequestURL() + " " + queryString);
  47. }
  48. }

PUT 请求获取不到参数,是因为 PUT 请求的参数不是存放在 HTTP Header 中的,而是在 HTTP Body 中,所以无法通过 request.getParameter() 方法来获取参数。

如果想要获取 PUT 请求的参数,可以参考如下这段代码:

1
2
3
4
5
6
String queryString = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    queryString += line;
}

拿到了 queryString,它是一个“a=1&b=2”格式的字符串,然后可以轻松的转换成一个 Map,最后通过 map.get() 方法获取指定的参数。