Request和Response

Request

Request继承体系

image-20230405144834436

Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中

所以才用到Tomcat定义的实现类

Request获取请求数据

请求数据分为三部分

请求行

image-20230405145755212

image-20230405145805101

请求头

浏览器的版本信息

image-20230405150352421

image-20230405150406476

请求体

Post请求才有请求体

通过流的方式获取

image-20230405150446228

image-20230405150458607

		//  1.获取字符输入流        
        BufferedReader reader = req.getReader();
        //  2.读取数据
        String line = reader.readLine();
        //  3.操作
        System.out.println(line);

Request通用方式获取请求参数

使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同

所以在doGet()和doPost()方法中就可以只写一个相同的逻辑处理了

image-20230405163023781

image-20230405161714298

Request事实上是把参数放入了一个map集合中

其中map集合的泛型为 <String,String[]>

Request请求参数中文乱码问题

  • 浏览器发出去的请求(request),采用了一套编码格式;
  • Tomcat 处理 request,采用了另一套编码格式。

Post请求

因为Post请求采用的是输入流的方式获取 getReader()

当向服务器发送Post请求时,同时携带参数信息username=张三时,与Get请求不同的是,参数不会拼接在请求行中【URL】,而是将参数信息设置在请求体中进行传输。

req.setCharacterEncoding("UTF-8");

Get请求

Get请求中的请求参数会拼接在请求URL中,当URL中存在中文时,浏览器会对请求URL进行编码,其中编码的时候使用的是UTF-8字符集。Tomcat服务器解析请求发送的过来的报文时【参数信息主要是解析请求行的信息】采用的是ISO-8859-1字符集。由于编码时和解码时采用的字符集不一致,所以导致了乱码。

image-20230405165735850

image-20230405170051351

Request请求转发

image-20230405172144342

req.getRequestDispatcher("资源B路径").forward(req,resp);    //参数是要转发的资源  例如  /demo3

其中,在资源A和资源B中的请求数据可以被共享

转发的资源路径不需要加虚拟目录

image-20230405172923873

image-20230405173409605

Response

Response继承体系

image-20230405191151148

Response设置响应数据

响应数据分为三部分

响应行

image-20230405191455237

响应头

image-20230405191503472

响应体

image-20230405191532948

Response完成重定向

一种资源跳转方式

image-20230405191759697

简化实现方式

需要加上虚拟目录

 resp.sendRedirect("资源B的路径加上虚拟目录");

image-20230405192234559

路径问题

虚拟目录(项目访问路径)

image-20230405192552974

明确路径给谁使用

在服务器内部使用

不需要加虚拟目录

例如请求转发 它是服务器内部把这个请求从一个资源交给另一个资源,所以另一个资源的路径不需要加上虚拟目录

浏览器使用

需要加虚拟目录

例如重定向 它是两次请求,所以需要加上虚拟目录 给浏览器说明向谁请求

image-20230405193033875

动态获取虚拟目录

//获取虚拟目录
String contextPath = req.getContextPath();
//可以在重定向时候用字符串拼接的时候加上
resp.sendRedirect(contextPath+"资源路径");

Response设置响应体数据

响应字符数据

image-20230405193605114

设置响应的数据格式可以解析html文本

resp.setHeader("contene-type","text/html");

设置响应数据不会乱码

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

响应字节数据

image-20230405194856410

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值