一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。
跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。
Servlet:
当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。
1) redirect 方式
response.sendRedirect("/a.jsp");
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
response.sendRedirect("http://www.ycul.com");
跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
2) forward方式
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher .forward(request, response);
页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
JSP:
1) response.sendRedirect();
和servlet的response.sendRedirect()方式一样。
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
...
跳转后浏览器地址栏变化
如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
2) response.setHeader("Location","");
此语句前不允许有out.flush(),如果有,页面不会跳转。
跳转后浏览器地址栏变化
此语句后面的语句执行完成后才会跳转
3) <jsp:forward page="" />
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
...
跳转后浏览器地址栏不变,但是只能跳到当前主机下
此语句后面的语句执行完成后才会跳转
转自:http://zhaixiaohu.iteye.com/blog/427755
分享到:
相关推荐
servlet 跳转的几种情况 Servlet 跳转是指 Servlet 程序在执行过程中将控制权转移到另一个资源的过程,例如跳转到另一个 Servlet、JSP 或 HTML 页面。Servlet 跳转可以分为两大类:Redirect 跳转和 Forward 跳转。 ...
Servlet几种页面跳转的区别Servlet几种页面跳转的区别
总结来说,通过Servlet获取下拉列表的值并跳转到相关页面涉及以下几个步骤: 1. 在HTML页面中创建下拉列表,并指定一个name属性。 2. 编写Servlet,使用HttpServletRequest的getParameter()方法获取下拉列表的值。 3...
本文将详细介绍两种主要的页面跳转方法:`redirect`和`forward`。 1) **Redirect 方式** `response.sendRedirect()`方法用于实现重定向。当调用这个方法时,服务器向客户端发送一个HTTP 302状态码,指示浏览器去...
### JSP页面跳转的五种方法详解 #### 一、引言 在Web开发中,页面间的跳转是一项基本且重要的功能。JSP作为Java Web开发中的一个重要组成部分,提供了多种方式来实现页面间的跳转。本文将详细介绍五种常用的JSP页面...
接下来,我们将详细介绍这几种方法及其具体实现细节。 ### 使用JavaScript实现自动跳转 这种方法利用客户端JavaScript脚本来控制页面的自动跳转。下面是一个示例代码: ```html function out(obj) { var i = ...
总结来说,通过Servlet实现登录界面的跳转涉及以下几个关键点: 1. 创建HTML登录表单,指定提交时调用的Servlet。 2. 编写Servlet,处理POST请求,获取并验证用户输入。 3. 根据验证结果,使用`sendRedirect`进行...
每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。 3. 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。 4. 无...
【jsp下页面跳转的几种方法】 在Java服务器页面(JSP)开发中,页面跳转是常见的操作,用于在用户交互或业务处理后引导用户访问新的页面。主要有三种方式来实现这一目标:RequestDispatcher.forward()、...
本文将深入探讨这两种路径的区别以及它们在JSP页面跳转中的应用。 一、绝对路径与相对路径 1. 绝对路径:绝对路径是从根目录开始,完整地指明文件或资源所在位置的路径。例如,如果一个HTML或JSP文件位于服务器的`...
第一种方法适合服务器端控制,而后两种适用于客户端的交互式跳转,特别是第二种和第三种提供了更友好的用户体验,因为它们提供了跳转前的提示或者动态倒计时。 在实际开发中,需要注意浏览器兼容性问题,虽然大多数...
在Java Web开发中,Servlet是一种用于处理HTTP请求的服务器端组件。MV模式,通常指的是Model-View-Controller(模型-视图-控制器)设计模式,它在Servlet中扮演着核心角色,帮助开发者实现业务逻辑与用户界面的解耦...
在JSP 和 Servlet 的环境中,`RequestDispatcher.forward()` 方法是一种非常常用的页面跳转方式。这种方式实现了容器内部的控制权转移,也就是说,浏览器的地址栏不会显示跳转后的地址。 **代码示例**: ```java ...
在选择跳转方法时,通常考虑以下几个因素:是否需要保留请求上下文、是否需要浏览器地址栏显示新URL、是否涉及跨域以及页面跳转的时机。在性能方面,`forward()` 通常优于 `sendRedirect()`,因为后者涉及到两次HTTP...
`PageContext` 类提供了以下几种主要的功能: 1. **提供访问当前页面上下文中各种对象的方法**:例如,可以通过 `PageContext` 获取到 `HttpServletRequest` 和 `HttpServletResponse` 对象,从而处理用户请求和...
Servlet是一种Java编程语言中的技术,主要用于扩展服务器的功能,特别是在Web应用开发中,它扮演着核心角色。在这个项目中,Servlet将作为服务器端的处理组件,负责接收客户端(通常是浏览器)发送的请求,并返回...
Servlet的生命周期包括以下几个阶段: 1. 加载:Servlet容器加载Servlet类。 2. 实例化:Servlet容器创建Servlet实例。 3. 初始化:Servlet实例执行init()方法,进行初始化。 4. 服务:Servlet实例执行service()...