request 和 response

一.概述

  • Request:获取请求数据的

    • 请求头,请求行,请求体

    • tomcat 会把请求数据解析,并且存储在 request 对象中,然后我们直接从 servlet 对象中取就可以用了

  • Response:响应数据的

    • 响应头,响应行,响应体

    • 业务的封装数据设置到响应数据包中来

    • 封装数据进 response 对象中,tomcat 会把封装数据解析成特定格式返回给浏览器

二、Request

1.Request继承体系

  • ServletRequest 规范接口

  • HttpServletRequest 封装 http 协议内容

  • HttpServletRequestWrapper 这个是提供具体的实现

2.Request 获取请求数据

2.1获取请求头数据

String getHeader(String name)
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/**
         /* *
         *  获取请求头
         */
        String accept = req.getHeader("Accept");
        System.out.println(accept);
    }

2.2获取请求行数据 

String method = req.getMethod();//获取请求方法
System.out.println(method);

String contextPath = req.getContextPath();//获取请求路径(项目的访问路径)
System.out.println(contextPath);

StringBuffer requestURL = req.getRequestURL();//获取URL(统一资源定位符)
System.out.println(requestURL);

String requestURI = req.getRequestURI();//获取URI(统一资源标识符)
System.out.println(requestURI);

String queryString = req.getQueryString();//获取get 的请求参数
System.out.println(queryString);

2.3获取请求体数据

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


@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求体
        System.out.println("==================请求体==================");
        BufferedReader reader = req.getReader();
        String s = reader.readLine();
        System.out.println(s);
    }
  • 获取字节输入流
ServletInputStream getInputStream() throws IOException

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletInputStream inputStream = req.getInputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(buffer)) != -1 ){
            System.out.println(new String(buffer, 0, len));
        }
        inputStream.close();
    }

2.4获取请求参数

  • 如果是Get请求,那么请求参数就在请求行中

  • 如果是Post 请求,请求参数一般就在请求体中

  • Get 请求参数获取

String	getQueryString()
  • Post 请求获取参数

    BufferedReader getReader()throws IOException
    ServletInputStream getInputStream() throws IOException
    •  获取所有参数的 map 集合

      Map<String,String[]> getParameterMap()
    • 获取单个参数

      String getParameter(String name)

2.5请求参数乱码问题

解决办法:获取之前修改一下字符编码

  • tomcat 默认编码 iso-8859-1

  • 浏览器以 utf-8 编码,所以解码需要以 utf-8解码

    req.setCharacterEncoding("UTF-8");

3.请求转发

请求转发(forward):在服务器内部做资源跳转

请求转发的实现方式

RequestDispatcher getRequestDispatcher(String path)

void forward(ServletRequest request,ServletResponse response)
      throws ServletException,IOException

数据共享问题:使用 request

void setAttribute(String name, Object o)

Object getAttribute(String name)
    
void removeAttribute(String name)

请求转发特点

  • 浏览器地址不会改变

  • 只能内部服务之间转发

  • 只发起一次请求

三、Response

1.Response 继承体系

  • ServletResponse 规范接口

  • HttpServletResponse 封装 http 协议内容

  • HttpServletResponseWrapper 这个是提供具体的实现

2.Response 响应数据

2.1设置响应头数据

void 	addHeader(String name, String value)

@WebServlet("/resp")
public class RespServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应头
        resp.addHeader("userdiv","123654");
    }
}

2.2设置响应行数据

void 	setStatus(int sc)

@WebServlet("/resp")
public class RespServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应行
        resp.setStatus(520);
    }
}

2.3设置响应体数据

ServletOutputStream getOutputStream()
    
PrintWriter getWriter()

@WebServlet("/resp")
public class RespServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应体
        resp.getOutputStream().write(12123);
    }
}

3.重定向

资源能够实现跳转访问

void 	sendRedirect(String location)
  • 重定向的特点

    • 浏览器地址栏发生了变化

    • 可以重定向任何位置

    • 两次请求

4.重定向和请求转发的区别

重定向请求转发
浏览器地址变化不变
可以重定向任何位置只能是当前服务器内部
两次请求一次请求
不可以资源共享资源可以共享

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值