请求转发(重要)!!

简介: 请求转发(重要)!!

讲完了重定向,不得不说到一个概念就是我们的请求转发:在面试中也经常会将重定向与请求转发进行对比考察:


下面还是先来介绍下我们的请求转发:


1.工作原理

此处我们还是以用户OneServlet和TwoServlet为例子:只不过我们访问TwoServet的方式由原来的重定向变为了请求抓发,下面来看访问的过程与重定向有什么不同。


用户第一次通过手动方式要求浏览器访问OneServlet。OneServlet工作完毕后,通过当前的请求对象代替浏览器向http服务器Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用TwoServlet来完成剩余任务


来看我们的示例图:


2.png


2.实现方式

请求对象代替浏览器向Tomcat发送请求(注意与重定向的不同之处)


具体实现:

(1)通过当前请求对象request调用getRequestDispatcher方法生成资源文件申请报告对象


 RequestDispatcher  report = request.getRequestDispatcher("/资源文件名");

1:注意资源文件名一定要以"/"为开头。


2:此处的资源文件名只能是当前发布的项目的内部资源文件名,不能是其他外部资源文件名,例如可以放入TwoServlet的请求别名/two,注意此处不需要加入我们发布时的项目名,也就是说在重定向中的写法为/myweb/two,而在我们的请求转发中的写法为/two.


3:此处的资源文件名不能像之前重定向那样放入我们的百度链接,也就是此处不能放入外部的资源文件,否则会报404错误。


(2)将报告对象发送给Tomcat


report.forward(当前请求对象,当前响应对象)

   一般可以直接整合这样写:request.getRequestDispatcher("/资源文件名").forward(当前请求对象,当前响应对象)


3.请求转发的优点

(1)无论本次请求涉及到多少个Servlet,用户只需要手动通过浏览器发送一次请求


(2) Servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数,增加处理服务速度


4.请求转发的特征

1)请求次数

   在请求转发过程中,浏览器只发送一次请求。


2)请求地址

只能向Tomcat服务器申请调用当前网站下资源文件地址,request.getRequestDispathcer("/资源文件名")


注意括号中不要写网站名,只能写我们发布的项目的内部资源文件。


3)请求方法(method:get和post)

在请求转发过程中,浏览器只发送一个了个Http请求协议包。

所以参与本次请求的所有Servlet共享同一个请求协议包,因此这些Servlet接收的请求方法与最开始浏览器发送的请求方法保持一致。  

讲请求方法的目的举个比方来说的话就是看将来后台servlet实现类的代码是写在doGeT方法里面还是写在doPost方法里面。


相关文章
|
7月前
|
存储
Ruquest请求转发
Ruquest请求转发
59 0
|
编解码 运维 负载均衡
envoy代理转发与L5 Cluster 负载均衡
envoy代理转发与L5 Cluster 负载均衡
169 0
envoy代理转发与L5 Cluster 负载均衡
|
7月前
|
前端开发
请求转发和重定向的区别
请求转发和重定向的区别
96 0
|
存储 应用服务中间件 数据库
Servlet请求转发和重定向
Servlet请求转发和重定向
192 0
重定向和请求转发的区别
重定向和请求转发的区别
105 0
|
Java 数据库
Servlet的请求转发和重定向的区别
Servlet的请求转发和重定向的区别
142 0
Servlet的请求转发和重定向的区别
SpringMVC 请求转发和重定向
SpringMVC 实现请求转发和重定向也很方便: 实现请求转发: 🙌
76 0
SpringMVC 请求转发和重定向
|
XML 数据格式
Javaweb 请求转发和请求重定向
1.请求转发和请求重定向区别 请求转发和请求重定向主要区别,包含以下 5 点: 定义不同 请求方不同 数据共享不同 最终 URL 地址不同 代码实现不同 定义不同:🙌
135 0
Javaweb 请求转发和请求重定向
|
前端开发
请求转发与请求重定向
请求转发与请求重定向
290 0
请求转发与请求重定向
privoxy自动请求转发到多个网络
有些时候我们需要通过不同的代理访问不同资源,比如某些ip或域名走本地网络,某些ip或域名走不可描述的代理等。当然这只是举个栗子! 我要解决的问题是:我的内网机器没有internet访问权限,但是我的应用程序有部分请求是要访问intranet网络,而部分请求要访问internet网络。
1907 0