Servlet页面跳转方法总结_第1页
Servlet页面跳转方法总结_第2页
Servlet页面跳转方法总结_第3页
Servlet页面跳转方法总结_第4页
Servlet页面跳转方法总结_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Servlet页面跳转方法简介JSP页面中,实现页面跳转发生在两种情况下。一种是发生在servlet中,这是一种比较常见的跳转页面的方式,它的优点是可以在servlet中做大量业务逻辑处理,通过处理最终返回到相应的显示介面,这种方法隐藏业务逻辑,符合架构设计;另一种方式是在JSP页面中,因为JSP也就是特殊的servlet,不过还是有点差异滴,这里可以请读者自行查阅其相异之处。 通过JSP进行页面的跳转一般情况是传递参数比较小,不需要过多的逻辑处理,对安全性要求较低,能够进行简单的数据显示可以了;这种方式操作更加灵活;在简单页面跳转过程中使用较多。下面介绍两种方式的一些常见方法:Servlet

2、: 在servlet中,一般在doGet(), doPost()等方法里,实现页面的跳转。sendRedirect方式 :格式: response.sendRedirect(“index.jsp”); 注释:当前页面跳转到index.jsp页页面(可以跳转的相应路径);sendRedirect可以将页面跳转到任何页面,不只局限于当前的web应用中,还可以跳转到其他的网站页面。如: response.sendRedirect(.); 这种方式跳转后浏览器地址栏发生变化,如果这种方式要传值出去的话,只能在使用QueryString这种方式,在url中带parameter或者放在session中,而

3、无法使用request.setAttribute来传递。forward方式 :格式:request.getSession().setAttribute(user,jake );request.getRequestDispatcher(index.jsp).forward(request, response);Servlet中forward方式只能跳转到本web应用中的页面上。 在页面跳转后,浏览器地址栏不会发生变化。开发人员在使用这种方式跳转,进行参数传值可以使用三种方法:url querystring,Session,request.setAttribute();JSP页面跳转方式:send

4、Redirect();response.sendRedirect(); 这种方式和servlet的response.sendRedirect()方式用户一样。但是在使用此语句前不允许有out.flush();如果有,系统会有异常: java.lang.IllegalStateException: Cant sendRedirect() after data has committed to the client. aucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) 这种

5、方式页面跳转后浏览器地址栏变化;如果要跳转到其他主机下,页面跳转后, session等相呼应操作均已经失效;别人的应用不会知道你的应用的Session和其他属相。 response.setHeader(); 格式:response.setHeader(index.jsp,user.jsp); 这条语句前不允许有out.flush(),如果有,页面不会跳转。跳转后浏览器地栏变化此语句后面的语句执行完成后才会跳转。 格式: 此语句前不允许有out.flush(),如果有,会有异常:java.lang.IllegalStateException: forward() not allowed afte

6、r buffer has committed. aucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134) at ucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101) aucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)跳转后浏览器地址栏不变,但是只能跳下此语句后面的语句执行完成后才会跳转。跳转效率比较:A、:效率高,速

7、度快1.地址栏不改变跳转-服务器端跳转,服务器之间内部转,相同的request,可传参;2.执行到跳转语句后无条件立刻跳转,之后的代码不再被执行; 注意:如果使用forward跳转,则一定要在跳转之前释放掉全部的资源;3.使用forward时,request设置的属性依然能保留在下一个页面(setAttribute),;4.通过传递参数。5.地址中的”/” 代表是:B、response.sendRedirect(“index.jsp”):效率低,速度慢 1.地址栏改变跳转,客户端跳转(地址可以是任意的) 2.所有代码执行完毕之后再跳转,跳转语句后面的代码还是会执行,除非在其后面加上return

8、(return)需复杂一些。 3.不能保存request属性,地址发生变化了,客户端发生跳转,针对不同的request,无法处理; 4.通过对URL地址的重写传递参数:response.sendRedirect(“index.jsp?id=1235”); 5.地址中的”/”代表是:网上搜罗到的一些资料,值得参考:转发方式: request.getRequestDispatcher().forward(); 重定向方式:response.sendRedirect(); 区别:重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。转发:以前的request中存放的变

9、量不会失效,就像把两个页面拼到了一起。下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较: (1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方

10、法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。 (2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。 (3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就

11、是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方 法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有

12、钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。 (4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳

13、转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论