讲完了重定向,不得不说到一个概念就是我们的请求转发:在面试中也经常会将重定向与请求转发进行对比考察:
下面还是先来介绍下我们的请求转发:
1.工作原理
此处我们还是以用户OneServlet和TwoServlet为例子:只不过我们访问TwoServet的方式由原来的重定向变为了请求抓发,下面来看访问的过程与重定向有什么不同。
用户第一次通过手动方式要求浏览器访问OneServlet。OneServlet工作完毕后,通过当前的请求对象代替浏览器向http服务器Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用TwoServlet来完成剩余任务
来看我们的示例图:
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方法里面。