一、request概述

  request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据

  通过抓包工具抓取Http请求

  因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体。

二、request的功能

2.1 获取请求行信息

  • request.getMethod():获取请求方式

  • request.getRemoteAddr():获取客户端IP

  • String getContextPath():获取项目名

  • String getQueryString():获取参数部分(username=xxx&password=yyy),post请求获得的是null

  • String getRequestURL():获取请求URL,等于不包含参数的整个请求路径(http://localhost:8080/day10_2/AServlet)

  • String getRequestURI():获取请求URI,等于项目名+Servlet路径(/day10_2/AServlet)

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获得请求方式
    String method = request.getMethod();
    System.out.println("method:" + method);
    // 获得请求的资源相关的内容
    String requestURI = request.getRequestURI();
    StringBuffer requestURL = request.getRequestURL();
    System.out.println("uri:" + requestURI); //uri:/Day04/line
    System.out.println("url:" + requestURL); //url:http://localhost:8080/Day04/line
    // 获得web应用的名称
    String contextPath = request.getContextPath(); //web应用:/Day04
    System.out.println("web应用:" + contextPath);
    // 地址后的参数的字符串
    String queryString = request.getQueryString(); //username=zhangsan&password=123
    System.out.println(queryString);
    // 获得客户机的信息——获得访问者IP地址
    String remoteAddr = request.getRemoteAddr();
    System.out.println("IP:" + remoteAddr); //IP:0:0:0:0:0:0:0:1
    }

2.2 获取请求头信息

  • String getHeader(String name):获取指定名称的请求头

    request.getHeader("referer") -->可用于防盗链

  • Enumeration getHeaderNames():获取所有请求头名称

2.3 获取请求体信息

【客户端传递参数的方式】

  • 浏览器地址栏直接输入:一定是GET请求;
  • 超链接:一定是GET请求;
  • 表单:可以是GET,也可以是POST,这取决与<form>的method属性值;

【GET请求和POST请求的区别】

  GET请求:

    • 请求参数会在浏览器的地址栏中显示,所以不安全;
    • 请求参数长度限制长度在1K之内;
    • GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

  POST请求:

    • 请求参数不会显示浏览器的地址栏,相对安全;
    • 请求参数长度没有限制;

【常用API】

  • String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数

  • String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数

  • Enumeration<String> getParameterNames():获取所有请求参数名称

  • Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值

【解决中文乱码】

  • post请求:

    request.setCharacterEncoding(“UTF-8”);
  • get请求:

    String name = request.getParameter(“name”)
    name = new String(name.getBytes(“iso-8859-1”), “utf-8”)

2.4 其他功能

【request是一个域对象】(作用范围:一次请求中)

  • void setAttribute(String name, Object value):用来存储一个对象
  • Object getAttribute(String name):用来获取request中的数据
  • void removeAttribute(String name):用来移除request中的域属性
  • Enumeration getAttributeNames():获取所有域属性的名称

【request完成请求转发】

  • 获得请求转发器:RequestDispatcher rd = request.getRequestDispatcher(String path);——path是转发的地址
  • 通过转发器对象转发:rd.forward(request,response)

    请求转发和重定向的区别:

       *请求转发是一个请求一次响应,而重定向是两次请求两次响应

       *转发地址栏不变化,而重定向显示后一个请求的地址

       *转发只能转发到本项目其它servlet,而重定向不只能重定向到本项目的其它servlet,还能定向到其它项目

       *转发是服务器端行为,只需给出转发的servlet路径,而重定向要给出request URI,即包含项目名

       *转发的效率高,因为是一个请求

最新文章

  1. JAVA基础研究
  2. iBATIS代码生成分析
  3. 遗传算法的C语言实现(二)-----以求解TSP问题为例
  4. T-SQL中的一些小陷阱
  5. C# RGB和HSB相互转换
  6. Node.js 常用工具 util
  7. **PHP随机数算法
  8. Basic Example of JMX Technology--转载
  9. Linux文件权限管理
  10. Error while registering Oracle JDBC Diagnosabilityh
  11. English - 被动语态的翻译原则
  12. Nginx配置特定二级域名
  13. Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离
  14. Visual Studio进行Web性能测试- Part III
  15. 洗礼灵魂,修炼python(26)--编程核心之“递归”
  16. GO入门——3. 控制语句
  17. Javascript 及 CSS3 实现进度条效果
  18. html js点击按钮滚动跳转定位到页面指定位置(DIV)的方法代码
  19. Rust hello world !
  20. Oracle性能优化之普通用户使用dbms_xplan包需要有的权限

热门文章

  1. ref &amp; out - C#中的参数传递
  2. Oracle与SQL Server实现表数据同步
  3. Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换
  4. 面试题:TCP协议三次握手
  5. NanoPi2
  6. Solidity 没名字的function(){...}作用
  7. selenium+phantomjs解析JS
  8. The user specified as a definer (”@sa’%&#39;) does not exist 解决方法
  9. App测试从入门到精通之功能测试
  10. Convert HTML to PDF with New Plugin