- 浏览: 49602 次
最新评论
-
羽鹤彬:
mayths 写道这个完全可以使用substring吧,这样的 ...
java String获取指定值 -
mayths:
这个完全可以使用substring吧,这样的意义在哪里?
java String获取指定值 -
huangyunbin:
string的substring不就可以实现吗,你蛋疼啊
java String获取指定值
Servlet:
当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 一、原理
1) redirect 方式
response.sendRedirect("/a.jsp");
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
response.sendRedirect("http://www.ycul.com"); 跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
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应用中的页面上。 跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法: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是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。
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) ...
跳转后浏览器地址栏不变,但是只能跳到当前主机下 此语句后面的语句执行完成后才会跳转
发表评论
-
java并发(二)对象的共享-不变形
2015-03-11 13:18 783满足同步需求的另 ... -
java并发(二)对象的共享-线程封闭
2015-02-15 15:04 659当访问共享的可变数据的时候,通常需要使用同步。一种避免 ... -
java并发(二)对象的共享-发布与逸出
2015-02-15 14:27 2339“发布”一个对象的意思是指,使对象能够在当前作用域之外 ... -
java并发(二)对象的共享-可见性
2015-02-15 10:49 1625public class NoVisibility { ... -
java并发(一)线程安全性
2015-02-14 13:19 743要编写线程安全的代码,其核心就在于要对状态访问操作进行 ... -
去除指定空格
2013-12-07 15:11 599去除指定空格<A > </A> ... -
Java synchronized详解(转载)
2013-06-27 10:12 739第一篇: 使用synchronized 在编写一个类 ... -
spring之BeanFactoryAware接口(转载)
2013-06-14 16:25 717要直接在自己的代码中读取spring的bean,我们除了根据常 ... -
nginx,apache和tomcat
2013-05-15 14:16 925今天配置nginx+tomcat了解了这么一个东西,nginx ... -
web.xml配置详解(转发)
2013-04-03 15:31 26661 定义头和根元素 ... -
ajax异步请求
2012-09-05 20:03 1956今天写了一个ajax的异步请求,遇到了一个无法正确提交的问题, ... -
Date相关
2012-08-20 16:48 715package test; import java. ... -
jquery ui autocomplete
2012-08-15 18:58 1339今天用了点jquery ui的autocomplete插件,过 ... -
url链接中文乱码
2012-07-04 10:53 839我在写get方法的时候发现如果链接带有中文参数,传递的时候是乱 ... -
java String获取指定值
2012-05-31 09:19 6921今天遇到一个问题,如何将一个String类型的变量获取指定位置 ... -
Ibatis java
2012-05-17 15:06 640Ibatis like写法有两种(以name为例): 1. 是 ... -
java自定义抛出异常
2012-04-24 16:39 4109package test; /** * 异常中定义抛 ... -
字符串组装-将时间转换成String并补足位数
2012-04-23 10:29 2884package test; import java.te ... -
java mina iobuffer转换成String
2012-03-16 10:24 6337在做crc校验的过程中遇到了iobuffer转换成string ... -
java 保留小数
2012-03-13 16:42 789今天一个小问题虽然很简单但搞的我很郁闷,所以就写下来。是关于保 ...
相关推荐
Servlet 跳转可以分为两大类:Redirect 跳转和 Forward 跳转。 Redirect 跳转 Redirect 跳转是指将控制权转移到另一个资源,并将 URL 修改为新的资源的 URL。Redirect 跳转可以使用 response.sendRedirect() 方法...
3. **跳转(Redirect)与转发(Forward)**: - **Redirect**:Servlet可以通过`response.sendRedirect()`方法将客户端重定向到另一个URL。这种情况下,浏览器会发起一个新的HTTP请求,因此URL会显示在浏览器地址栏...
在实际开发中,理解和掌握Servlet与JSP的跳转机制以及它们如何协同工作,对于构建高效、可维护的Java Web应用至关重要。同时,合理利用Eclipse或MyEclipse这样的IDE能提升开发效率,更好地实现需求。
在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...
### jsp与Servlet跳转详解 #### 一、引言 在Java Web开发中,页面间的跳转是一项基本且重要的功能。本篇文章将通过具体的示例来深入探讨JSP与Servlet之间的跳转机制,帮助读者更好地理解其工作原理及应用场景。 #...
总结,本例子涵盖了Servlet中的页面跳转技术,包括请求转发和重定向,以及如何使用JDBC与数据库进行交互,这些都是Java Web开发中的基础且重要的概念。同时,实践数据库连接时需要注意资源的正确管理和使用数据库...
在Servlet中,跳转分为两种主要类型:请求转发(Request Forward)和重定向(Redirect)。这两种方法都是在服务器端完成的,但它们的工作机制和效果有所不同。 1. 请求转发(Request Forward) - **概念**:请求...
本篇文章将详细讲解Servlet中跳转页面的两种主要方法:redirect(重定向)和forward(转发),以及在JSP中如何实现类似操作。 1. **Servlet中的跳转** - **Redirect(重定向)** 重定向是通过`response....
在开发Web应用时,我们经常会遇到“forward”和“redirect”的概念,它们是两种不同的页面跳转方式。理解和掌握它们的区别对于优化用户交互和处理请求流至关重要。 **forward(转发)**: - 转发是由服务器端完成的...
`<jsp:forward/>`标签在JavaServer Pages (JSP)中用于将一个请求转发到另一个资源,比如从一个JSP页面跳转到另一个JSP页面或者一个Action。在Struts2框架下使用`<jsp:forward/>`进行页面跳转时,可能会遇到“404 Not...
在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...
它通过`Request`对象的`forward()`方法实现,服务器接收到请求后,不直接处理,而是将请求传递给另一个内部资源(如JSP、Servlet或其他Web组件)。在这个过程中,客户端并不知道请求被转发,它只看到最初的请求URL,...
当我们需要在不同的页面之间导航时,`forward`和`redirect`是两种常见的处理请求转发和重定向的方法。本文将深入探讨这两种机制及其区别。 首先,`forward`是通过服务器端内部跳转实现的。它使用`RequestDispatcher...
总结,Java Servlet中的页面跳转主要分为`redirect`和`forward`两种方式,每种都有其特定的应用场景。`redirect`适用于需要改变URL或跳转到外部资源的情况,而`forward`则适用于保持URL不变且在同一个应用内进行页面...
登录跳转主要有两种方式:重定向(Redirect)和转发(Forward)。重定向是服务器向浏览器发送一个新的HTTP请求,浏览器收到后会加载新的URL。转发则是服务器内部的操作,用户在浏览器中看到的仍然是原始请求的URL,...
通过上述分析,我们可以看到“j2ee练习8实现页面自动跳转”涵盖了Web开发中的多个核心概念和技术,包括页面跳转、Servlet、JSP、MVC模式以及Web应用的常规设计和调试。学习并掌握这些知识点,将有助于提升J2EE开发...
**六、Servlet API中的forward()和redirect()** 1. **forward()**:服务器端的转发,URL不变,效率较高,常用于内部跳转,避免暴露实际路径。 2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,...
页面跳转在Web开发中也非常重要,常见的跳转方式有重定向(Redirect)和转发(Forward)。重定向是让客户端发起一个新的HTTP请求,而转发则是服务器内部的操作,不涉及客户端的额外请求。 在实际应用中,Servlet...
当调用 `forward()` 方法时,服务器会把当前请求转发到指定的目标资源(如JSP页面、Servlet等)。这种方式不会生成新的HTTP请求,而是直接将当前请求交给另一个资源处理。因此,请求转发过程中,客户端的URL不会发生...