Servlet的请求处理,请求转发和重定向的区别

一、Servlet的请求处理

servlet代码可以对浏览器的请求进行处理,也可对服务器的响应进行处理,下面主要介绍这两个的特点。
1、浏览器的请求(Request)
浏览器请求大致分为三大块:请求行、请求头、请求实体
(1)请求行
(1.1)获取请求方式:可以获取是get方法请求还是post方法请求
在这里插入图片描述
(1.2)获取地址栏路径
URL(统一资源定位符) 能够获取项目中完整的目录
例:http://localhost:8080/abc/test
在这里插入图片描述
URI(统一资源标识符) 获取项目目录的一部分
例:abc/test
在这里插入图片描述
(1.3)获取协议及版本  getScheme()协议   getProtocol()协议和版本
在这里插入图片描述

=============================
(2)请求头
(2.1)根据请求头的key获取其value
在这里插入图片描述
(2.2)获取请求头中的所有key
在这里插入图片描述

=============================
GET方式的额外数据(数据位于URL上)
在这里插入图片描述
该方只是介绍get方式获取用户表单的数据,并不算在请求实体中。

(3)请求实体         post方式的额外数据会放在请求实体中

(用户表单的方式提交的才能生效)

(3.1)getParameter()方法可以获取get方式或post方式的额外数据,但该方法只能获取一key一value的值
在这里插入图片描述
(3.2)getParameterValues()方法用户获取一Key多value的数据
在这里插入图片描述
(3.3)获取访问自己服务器地址的ip(少用)
在这里插入图片描述
2、服务器的响应(Response)
服务器的响应分为状态行,应答头和响应实体

注意:应答头和响应实体需要一起使用
服务器的响应即表示服务器返回给浏览器端的一次响应消息

(1)状态行(由服务器来设置)
这里只是说了几个常用的,还有具体的可以自行去搜索使用
                     协议版本       http状态码          http状态描述
http状态码         200         404(路径错误)   500(服务器代码出错)
http状态描述       ok          notfound     Internal Server Error

(2)应答头(服务器提供给浏览器该如何显示数据的一些相关信息)
         响应实体(服务器返回给客户端的数据)

(2.1)通过getWriter()返回的打印流给浏览器返回字符数据
在这里插入图片描述
(2.2)通过getOutputStream()返回字节输出流用于返回二进制数据
(这里输出了一张图片)
在这里插入图片描述

额外的说明:
1.先设置字符集,再打开流。
2.比较常用,出现乱码也可以使用该代码 response.setContentType(“content-type”, “text/html;charset=utf-8”);

以上就是servlet中浏览器请求与服务器响应的特点,以及该如何使用获取。
下面介绍请求转发与重定向的区别

请求转发和重定向都是服务器中一个资源跳转到另一个资源的行为,在代码使用过程中,根据需要,从二者选其一。

二、请求转发

1、过程:浏览器请求一次,服务器响应一次,响应并创建一个request对象。
第一个响应的对象把数据转发给第二个servlet对象,由第二个对象返回给浏览器

2、跳转:

url地址可以设置本服务器中的webServlet注解,或html

request.getRequestDispatcher("url地址").forward(request, response);

例:在这里插入图片描述
3、数据设置

key是String类型,value可以是任意类型

request.setAttribute("key", "value");

例:
在这里插入图片描述

三、重定向

1、过程:浏览器每次请求,服务器都会创建一个request对象,第一个对象不把请求数据传给第二个,直接响应并告诉自己的请求路径,如果不匹配,浏览器为了获取需要的数据,修改地址栏,重新请求,请求完毕对象消失,两个对象不同,所以数据无法传递

2、跳转:url地址设置同上

response.sendRedirect("url地址"); 

3、重定向无法设置数据,因为请求次数的问题,两次请求request对象不同,数据无法进行传递。

二者的区别

一、请求转发不会改变地址栏
 重定向会将地址栏改变 (浏览器向服务器发了两次请求,第二次请求改变地址)

二、请求转发可以通过request中的Attribute属性传递数据
  重定向不可使用request传数据
  
三、请求转发的请求资源不可以是本服务器以外的资源
  重定向可以请求本服务器以外的资源

注意:无论是请求转发还是重定向后,都不要在其代码下面加其他代码。如执意要加也不会报错,但代码不会进行处理,等同无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值