Request 继承体系


image-20240114211438003

Request 获取请求数据


  • 请求数据分为3 部分

  • 请求行: image-20240114211446504

    • String getMethod(): 获取请求方式: GET

    • String getContextPath(): 获取虚拟目录(项目访问路径)

    • String Buffer getRequestURL):获取URL(统一资源定位符):http://localhost::808O/request-demo/req1

    • String getRequestURI():获取URI(统一资源标识符):/request-demo/req1

    • String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123

  • 请求头:image-20240114211512818

    • String getHeader(String name):根据请求头名称,获取值
  • 请求体:image-20240114211528800

    • ServletInputStream getlnputStream():获取字节输入流

    • BufferedReader getReader(():获取字符输入流

Request 通用方式获取请求参数


  • 请求参数获取方式:

  • GET 方式

    String getQueryString()
    
  • POST 方式

    BufferdReader getReader()
    
  • 通用方式获取

    image-20240114211548792

image-20240114211559094

请求转发


请求转发(forward):一种在服务区内部的资源跳转方式

image-20240114211607659

实现方式:

req.getRequestDispatcher("资源B路径").forward(req, resp);

转发的特点:

image-20240114211618499

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

  • void setAttribute(String name,Object o):存储数据到request域中

  • Object getAttribute(String name):根据key,获取值

  • void removeAttribute(String name):根据key,删除该键值对

Respone 设置响应数据功能介绍


响应数据分为3部分:

  1. 响应行

    image-20240114211627612

  2. void setStatus(int sc): 设置响应状态码

  3. 响应头

    image-20240114211635516

  4. void setHeader(String name,String value):设置响应头键值对

  5. 3.

    响应体

    image-20240114211648090

  6. PrintWriter getWriter():获取字符输出流

  7. ServletOutputStream getOutPutStream(): 获取字符输出流

Respone 重定向


重定向(Redirect):一种资源跳转方式image-20240114211700098

实现方式(第二个是简化):

image-20240114211709301

重定向特点:

  • 浏览器地址栏路径发生变化

  • 可以重定向到任意位置的资源(服务器内部、外部均可)

  • 两次请求,不能在多个资源使用request共享数据

Response 响应字符数据


使用:

  1. 通过Response对象获取字符输出流

    PrintWriter writer = resp.getWriter();
    
  2. 写数据

    writer.write("aaa");
    

注意:

  • 该流不需要关闭,随着响应结束,response对象销毁,由服务区关闭

  • 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

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

Response 响应字节数据


使用

  1. 通过Response 对象获取字符输出流

    ServletOutputStream outputStream = resp.getOutputStream();
    
  2. 写数据

    outputStream.write(字节数据)