JavaWEB Request&&Response讲解

目录

Request获取请求数据:

请求数据分为三部分:

Request通用方式获取请求参数

Request请求方式中文乱码处理

请求转发:

Response 设置响应数据功能介绍 

响应数据分为三部分:

Response完成重定向

路径问题:

Response响应字符数据

Response 响应字节数据


Request获取请求数据:

  • 请求数据分为三部分:

    1. 请求行:
      • String getMethod():获取请求方式:GET
      • String getContextPath():获取虚拟目录(项目访问路径):/request-demo
      • StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
      • String getRequstURI():获取URI(统一资源标识符):/request-demo/req1
      • String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
    2. 请求头:User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)
      • String getHeader(String name):根据请求头名称,获取值
    3. 请求体:username=superbaby&password=123
      • ServletInputStream getInputStream():获取字节输入流
      • BufferedReader getReader():获取字符输入流

Request通用方式获取请求参数

  • 请求参数获取方式:

    GET方式:String getQueryString()

    POST方式: BufferedReader getReader()

  • 通用方式:

    Map<String, String[]> getParameterMap(): 获取所有参数Map集合

    String[] getParameterValues(String name): 根据名称获取参数值(数组)

    String getParameter(String name):根据名称获取参数值(个体值)

Request请求方式中文乱码处理

  • POST请求:设置输入流编码

    req.setCharacterEncoding("UTF-8");

  • GET请求:

    //先对乱码数据进行编码

    byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);

    //字节数组解码

    username = new String(bytes, StandardCharsets.UTF_8);

    同:username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); # 通于POST请求

  • URL编码实现方式

    编码:URLEncoder.encode(str, "utf-8");

    解码:URLDecoder.decode(str, "Iso-8859-1");

请求转发:

  • 请求转发(forward):一种在服务器内部的资源跳转

  • 实现方式:req.getRequestDispatcher("资源B路径").forward(req,resp);

    req:资源A请求

    resp:资源A响应

  • 请求转发资源间共享数据:使用Request对象

    1. void setAttribute(String name, Object o): 储存数据到request域中
    2. Object getAttribute(String name):根据key, 获取值
    3. void removeAttribute(String name):根据key,删除该键值对
  • 请求转发特点:

    1. 浏览器地址栏路径不发生变化
    2. 只能转发当前服务器的内部资源
    3. 一次请求,可以在转发资源间使用request共享数据

Response 设置响应数据功能介绍 

  • 响应数据分为三部分:

    1. 响应行:
      • void setStatus(int sc):设置响应状态编码
    2. 响应头:
      • void setHeader(String name, String value):设置响应头键值对
    3. 响应体:
      • PrintWriter getWriter(): 获取字符输出流
      • ServletOutputStream getOutputStream(): 获取字节输出流

Response完成重定向

  • 重定向(Redirect):一种资源跳转方式

    1. 设置响应状态码:302
    2. 定位跳转位置:响应头 location:xxx
  • 实现方式:

    resp.setStatus(302); //设置响应状态码

    resp.setHeader("location","资源B的路径");

    简化方式:resp.sendRedirect("资源B的路径");

  • 重定向特点:(与转发刚好相反)

    1. 浏览器地址栏路径发生变化
    2. 可以重定向到任意位置的资源(服务器内部、外部均可)
    3. 两次请求,不能在多个资源使用request共享数据

路径问题:

  • 明确路径使用对象:

    浏览器使用:需要加虚拟目录(项目访问路径)

    服务端使用:不需要加虚拟目录

Response响应字符数据

- 使用:
    1. 通过response对象获取字符输出流
        - PrintWriter writer= resp.getWriter();
    1. 写数据
        - writer.writer("aaa");
    - 注意:
        1. 该流不需要关闭,随着响应结束,response对象销毁,有服务器自动关闭
        2. 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

              resp.setContentType("text/html;charset=utf-8");

Response 响应字节数据

- 使用:
    1. 通过Response对象获取字符输出流

        - FileInputStream fileInputStream = new FileInputStream("D:\\~\\1657032438949.jpg");
        - ServletOutputStream outputStream = resp.getOutputStream();

    2. 写数据
        - outputStream.write(bytes, 0,len);
        - IOUtils工具类使用(简化copy)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值