- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
服务器的两大跳转方式
服务器的两大跳转方式:
1.1浏览器跳转(重定向跳转)
Servlet中使用的最多的跳转就是浏览器跳转,也就是重定向跳转,而浏览器跳转也是最常用的跳转方法之一。
图1:浏览器跳转的基本流程示意图
浏览器跳转,在跳转的过程中会通知浏览器,也就是说,每一次发生跳转,浏览器都是可以知道的,并且浏览器上的URL路径会随着页面的跳转而发生改变。我们从上节课的知识中知道了请求头和响应头的存在,浏览器会将请求的信息封装在请求头中,并发送给Servlet,而响应头则会在第一时间将信息响应给浏览器,因为响应头中并不包含网页代码,它只包含了是否发生跳转、网页访问是否超时等诸如此类的信息,浏览器在解析了响应头中的信息后,如果发现需要进行跳转,那么浏览器就会再次访问跳转后的目标页面,然后再将新的页面信息呈现给用户。
浏览器跳转,会对Tomcat服务器产生两次访问,因为浏览器除了访问最初的页面外还访问了跳转后的新的页面,所以同理,由于它对Tomcat服务器发生了两次访问,所以它具有两副Request和Response对象(第一次访问Tomcat服务器和第二次访问Tomcat服务器都分别产生了一副Request和Response对象)。
1.2服务器转发(服务器内部跳转)
服务器转发和浏览器转发最大的不同就是,在服务器转发的过程中浏览器是全然不知的,也就是说,在使用服务器转发的方式进行跳转页面时,浏览器是根本不知道服务器发生了跳转的,所以这种跳转方式也叫做服务器内部跳转。
图2:服务器转发的基本流程示意图
而使用服务器转发,浏览器上的URL路径也是不会发生改变的,就如,用户看到的URL路径是对A页面进行访问的路径,但实际上用户已经访问到了B页面(这里可以是对静态页面进行访问,也可以是对Servlet进行访问),只是浏览器并不知道在服务器内部发生了转发而已,在整个服务器转发的过程中只会产生一副Request和Response对象。
1.3浏览器跳转和服务器转发的实际举例
1.3.1浏览器跳转:
我们书写一个简单的浏览器跳转:当我们访问ServletAAA页面时,它会跳转到ServletBBB页面上:
代码部分:
public class AAA extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletR esponse response)throws ServletException, IOException {
//跳转到ServletBBB,当然也可以跳转到Html页面
response.sendRedirect(BBB);
}
}
//带值给浏览器,也就是将信息显示在浏览器而不是控制台上
PrintWriter out = response.getWriter();
out.println(我是ServletBBB~BBB~BBB~);
out.flush();
out.close();
}
}
代码执行结果:
由图上,我们可以看到,我们明明输入的路径是http://localhost/201411 14/AAA,但在我们点击回车请求访问后它的路径就变为了http://localhost BBB,这就是浏览器跳转,它的URL路径地址是随着页面的变化而发生变化的。
那么,我们怎么才能知道,浏览器跳转中使用的是两副Request和Response对象呢?我们可以分别将它们的Request和Response对象的内存地址打印出来,并让AAA中的Request对象带上一个值,看在BBB中的Request对象是否可以得到这个值(如果是同一个Request对象就一定可以取到这个值):
代码部分:
public class AAA extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//为Request对象设置一个键值对(存入值)
request.setAttribute(user, yezi);
//跳转到ServletBBB,当然也可以跳转到Html页面
System.out.println(AAA_request:+request);
System.out.println(AAA_response+response);
response.sendRedirect(BBB);
}
}
public class BBB extends HttpServlet {
public void
您可能关注的文档
最近下载
- 长期卧床患者的体位护理技巧.pptx VIP
- JBT14159.3-2022 空气分离设备能效限额第3部分:液化设备.pdf VIP
- 《民用建筑设计通则》图示.docx VIP
- 灭火应急疏散预案.doc VIP
- 铁路内燃、电力司机考试题库.doc VIP
- 新概念英语第一册 Lesson 55-56 课件.ppt VIP
- 2025AI+BI峰会:DeepInsight Copilot 演进史以及未来探索.pdf VIP
- 《临床药学文献阅读汇报抗感染粘菌素在治疗鲍曼不动杆菌感染vap中的应用》课件模板.ppt VIP
- 2025年福建公需课答案.pdf VIP
- 2020四川园林绿化工程说明及计算规则.pdf VIP
文档评论(0)