`
- 浏览:
783050 次
- 性别:
- 来自:
上海
-
在servlet中,一般跳转都发生在doGet, doPost等方法里面。
一、原理中文JAVA技术网
1) redirect 方式
;F'R s/i#g9G0response.sendRedirect("/a.jsp"); 中文JAVA技术网
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException中文JAVA技术网KM.FB3MY
{
} response.setContentType("text/html; charset=UTF-8");
response.sendRedirect("/index.jsp");
}
2) forward方式
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher .forward(request, response);
页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。 中文JAVA技术网
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
这种方式是在服务器端作的重定向。服务器往client 发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。
这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html; charset=UTF-8");
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp")
{
rd.forward(request, response);
}
二、区别.
1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
3、基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。
4、sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。
java
response.sendRedirect(); 中文JAVA技术网"{
和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(),如果有,页面不会跳转。
AJ,{ 跳转后浏览器地址栏变化 [
此语句后面的语句执行完成后才会跳转
<jsp:forward page="" />
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
B0at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) 中文JAVA技
跳转后浏览器地址栏不变,但是只能跳到当前主机下 中文JAVA技术网3n8VY"B.p Xd
此语句后面的语句执行完成后才会跳转
来自:http://hi.baidu.com/ccst2005/blog/item/df3e76c23a20b91e0ef4778a.html
他们的区别是:
response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的 request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和 response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
下面将详细介绍这两种跳转方式的特点及区别。 #### 1. `forward`跳转 `forward`跳转是一种服务器端内部的跳转方式,它通过`<jsp:forward>`标签来实现。其具体表现形式为: ```jsp 跳转页面地址" /> ``` **特点:...
在Servlet中,有两种主要的跳转方式:`...总的来说,理解这两种跳转方式及其差异对于构建高效、健壮的Servlet应用程序至关重要。在设计Web应用程序时,根据实际需求选择合适的方式可以提高用户体验和应用程序的灵活性。
理解并掌握这两种跳转方式的区别和适用场景,对于提升个人开发技能及项目质量具有不可忽视的作用。在未来的学习和实践中,持续探索和优化页面跳转的策略,将有助于我们在复杂多变的Web环境中,为用户提供更加顺畅和...
### Activity跳转的四种方式详解 #### 一、标准模式(Standard) 标准模式是Activity的默认启动模式。当一个新的Activity启动时,系统会为它创建一个新的实例,并压入任务栈的顶部。在这种模式下,每次启动...
本篇文章将详细探讨两种主要的界面跳转方法:`startActivity(Intent)`和`startActivityForResult(Intent, int)`。 首先,我们来看第一种方式——`startActivity(Intent)`。这个方法用于启动一个新的Activity,不...
这里我们主要探讨两种常见的页面跳转方式:直接跳转和携带结果跳转,并介绍如何实现这两种方法。这两种方式都是基于Intent对象来完成的。 首先,我们来看直接跳转,也称为无结果跳转。在Android中,你可以使用`...
根据提供的文件信息,我们可以推断出这篇文章主要讨论的是在Web开发环境下如何通过两种不同的方法来实现对txt文件的“跳转”操作。这里的“跳转”实际上是指在Web页面上进行的一些交互操作,比如选择、删除等,并...
### jsp跳转getRequestDispatcher()和sendRedirect()的区别 在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`...理解这两种跳转方式的特点与区别,有助于提高Java Web应用的灵活性与可用性。
安卓中Activity的三种Intent跳转方式 在 Android 开发中,Intent 是一种基本的通信机制,用于在应用程序之间或应用程序内部进行数据交换和功能调用。Activity 是 Android 应用程序的基本组成部分,用于提供用户界面...
Servlet 跳转可以分为 Redirect 跳转和 Forward 跳转两种,JSP 跳转也可以使用这两种方式,但是需要注意 JSP 的特殊性。了解 Servlet 跳转的几种情况,可以帮助开发者更好地控制程序的流程和数据传递。
Java 课程中的“一次跳转”和“两次跳转”主要指的是在服务器端进行的页面重定向(Redirect)和请求转发(Forward)。...理解并合理运用这两种跳转方式,对于编写高效、健壮的 Java Web 应用至关重要。
传统的页面跳转方法通常采用`rewrite`规则,但随着技术的发展,出现了一种新的跳转方式——通过`refresh`进行跳转。这种方式相比传统方法更为彻底且更安全快捷,被广泛应用在如百度、知乎等大型网站中。本文将详细...
答:这两种跳转方式分别是`include`和`redirect`。`include`通常在服务器端执行,将一个页面的内容嵌入到另一个页面中,不会改变URL,执行后还能回到原来页面。`redirect`是客户端跳转,URL改变,页面完全转向新页面...
在这个文件中,可能会包含以下两种跳转方式的代码: 1. 使用HTML的`<meta>`标签进行刷新跳转: ```html ;url=http://new.url.com"> ``` 这段代码会让页面在5秒后自动跳转到`http://new.url.com`。内容中的数字代表...
JSP 中有两种跳转方式:<jsp:include page="included.jsp" flush="true"> 和 。前者页面不会转向 include 所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。后者完全转向...
关于跳转指令,ARM提供了两种跳转方式:一种是将跳转地址直接写入程序计数器PC的MOV指令,能够实现对4GB连续空间内的任意跳转。另外一种是通过B、BL和BX指令实现的跳转,这些指令可以在当前指令向前或向后32MB的地址...
2. **性能与效率**:对比forward与sendRedirect两种跳转方式在资源消耗、执行时间等方面的差异。 3. **兼容性与稳定性**:确保在各种服务器环境及部署条件下,路径解析与跳转逻辑的稳定运行。 ### 资源与配置 测试...
每种跳转方法都有其适用场景和限制,开发者应根据实际需求和搜索引擎优化策略选择合适的方法。值得注意的是,不恰当的使用网页跳转可能触发搜索引擎的反作弊机制,对网站的搜索排名产生负面影响。因此,应谨慎使用并...
### JSP页面从一个页面传递一个参数到另外一个页面的方法 ...通过了解这两种跳转方式的特点及应用场景,开发者可以根据实际需求灵活选择适合的方法,有效地管理页面间的数据交互,提高应用程序的用户体验。
本文将详细解析这两种跳转方式的区别及其应用场景。 #### RequestDispatcher详解 1. **请求转发(Request Dispatcher)** - `request.getRequestDispatcher()` 是一种请求转发的方式,这种方式使得前后页面共享同...