重定向解决方案
1.工作原理
假设此时OneServlet是用户第一次访问的内部资源地址,TwoServlet是重定向访问的地址,下面来介绍一下过程:
用户第一次通过【手动方式】通知浏览器访问OneServlet。OneServlet工作完毕后,将TwoServlet地址写入到http响应协议包中的响应头中的location属性中,同时Tomcat也将302状态码写入到状态行(状态行在http响应协议包中),302代表通知浏览器本次返回的不是一个资源文件内容,而是一个资源文件地址,需要浏览器根据这个请求来索要这个资源文件。
在浏览器接收到响应包之后,会读取到302状态。此时浏览器自动根据响应头中location属性地址发起第二次请求,访问TwoServlet去完成请求中剩余任务
2.实现方式
response.sendRedirect("请求地址")
3.特征
(1)请求地址
既可以把当前网站内部的资源文件地址发送给浏览器 (格式:/网站名/资源文件名),也可以把其他网站资源文件地址发送给浏览器(格式:http://ip地址:端口号/网站名/资源文件名)
下面来看下代码示例:
情况一:我们想将当前网站内部的资源文件地址发送给浏览器:此时运用重定向方法可以实现,注意myweb是我们发布项目时的名称,two为访问TwoServlet时我们所设置的请求别名。
public class OneServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("/myweb/two"); } }
此时我们是想告诉浏览器第二次自动访问我们的TwoServlet,因为是通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【GET】
流程图:
情况二:
访问某个其他网站资源文件地址,例如此时我们访问的是百度,下面请看代码示例:
public class OneServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("http://www.baidu.com"); } }
当浏览器从http响应协议包中的响应头中的location属性获取到我们的百度地址后,便自动向我们的百度发起二次请求。
(2)请求次数
浏览器至少发送两次请求,但是只有第一次请求是用户手动发送。后续请求都是浏览器自动发送的。
(3) 请求方式
重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【GET】,因为如果没有指明请求方式的话,浏览器默认的请求方式都为【GET】.
(4)缺点
重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间