服务器的两大跳转方式.docVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档