zoukankan      html  css  js  c++  java
  • RequestAndResponse

    请求与响应

    1. Request

    代表请求的对象

    1.1 继承结构

    ServletRequest(顶级接口):提供了一个request对象的基本功能。
     其下子接口:HTTPServletRequest,在原基础上添加了一些和http相关的方法。

    1.2 功能

    1. 获取客户端相关信息的功能
      getContextPath():动态获取当前web应用的访问名称,在写路径时,不能将web应用的路径写死,
      而是需要通过getContextPath方法获取。

    2. 获取请求头信息
      getHeader(String name): 可以根据请求头的key获取value。

    3. 获取请求参数
      getParameter(String name):根据参数的key获取value。
      getParameterValues(String name):根据参数的key返回多个value,返回值为数组。
      getparameterMap():将所有的请求参数放入map中,返回Map<String,String[]>

    【中文乱码问题】
    浏览器提交的数据是utf-8的编码,服务器默认使用的编码为iso8859-1,这个编码不支持中文。

    如果是post提交,请求参数通过请求实体提交,可以设置请求实体内容的编码格式解决:
    request.setCharacterEncoding("utf-8");

    如果是get请求,可以通过手动编码解决,如:

    byte[] bytes=username.getBytes("iso8859-1");
    username=new String(bytes,"utf-8");
    

    1.3 实现请求转发

    请求转发可以实现资源的跳转,其特点有:

    • 一次请求,一次响应。
    • 地址栏不会发生变化。
    • 请求转发只能在同一个服务器中进行跳转。

    代码如下:
    request.getRequestDispatcher("request01").forward(request,response);

    1.4 作为域对象

    域对象:如果一个对象具有一个可以被看见的范围,利用该对象的map可以在整个范围内共享数据。

    • 生命周期:当一次请求开始时创建,一次请求结束时销毁。
    • 作用范围:整个请求链。
    • 功能: 在作用范围内共享数据。

    域对象的API:

    //想request对象中的map存入一对key-value
    setAttribute(String name,Object value)
    
    //根据key获取value
    getAttribute(String name)
    
    //根据key删除这个属性
    removeAttribute(String name)
    

    2. Response

    代表响应的对象

    2.1 继承结构

    ServletResponse(顶级接口):提供了一个response对象的基本功能。
     其下子接口:HttPServletResponse,在原基础上添加了一些和http相关的方法。

    2.2 功能

    设置响应内容
    - 设置状态码:setStatus(int statusCode);
    - 设置响应头:setHeader(String name,String value);
    - 设置响应实体内容:getWriter()//字符流 getOutputStream()//字节流

    【响应乱码问题】
    由于服务器发送的编码和浏览器的解码不一致,字符流服务器默认使用的是iso8859-1,
    字节流发送数据时可以指定为utf-8,浏览器读取数据时,默认使用的是平台码,即gbk。
    可以指定浏览器读取数据时,使用utf-8读取,同时使用utf-8发送数据即可:

    //两者等价
    response.setHeader("Content-Type","text/html;charset=utf-8");
    response.setContentType("text/html;charset=utf-8");
    

    2.3 请求重定向

    请求重定向可以实现资源的跳转,其特点是:

    • 两次请求,两次响应。
    • 地址栏会发生变化。
    • 可以跳转到当前web应用之外的地方。
    • 重定向不能通过request对象共享数据。

    代码:response.sendRedirect(request.getContextPath()+"/response01");

    2.4 定时刷新

    与重定向类似,不同之处是可以指定等待一段时间后跳转。
    代码:response.setHeader("refresh","3;url="+request.getContextPath()+"/response01");

    3. 资源跳转总结

    1. 请求转发

      • 一次请求,一次响应。
      • 地址栏不变。
      • 只能在web应用内跳转。
      • 可以共享request对象
    2. 请求重定向

      • 两次请求,两次响应。
      • 地址栏会改变。
      • 可以跳转到任意地方。
      • 不能共享request对象。
    3. 定时刷新

      • 两次请求,两次响应。
      • 地址栏会改变。
      • 可以跳转到任意地方。
      • 不能共享request对象。
      • 跳转前会维系一段时间

    【一般而言】

    • 在同一个web应用内跳转,需要通过request对象携带数据到目的地-->请求转发。
    • 在同一个web应用内部跳转,地址栏不能发生变化 --> 请求转发。
    • 需要跳转到其他web应用 --> 重定向或者定时刷新,根据是否需要指定多长时间跳转决定。
    • 如果在同一个web应用跳转,没有其他需求,可以选用任意方式跳转。
  • 相关阅读:
    LeetCode(65):有效数字
    LeetCode(64):最小路径和
    物理Data Guard的日常维护
    Oracle Data Guard的配置
    SQL基础--完整性约束
    使用rman迁移数据库到异机
    Oracle的表空间和数据文件
    Oracle的控制文件
    Oracle重做日志文件
    RMAN的恢复篇
  • 原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/12766759.html
Copyright © 2011-2022 走看看