1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。
request.getRequestDispather();返回的是一个RequestDispatcher对象。
2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。
3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而
ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为
ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或
jsp。它有两个方法:
1.void forward(ServletRequest request,ServletResponse response)
用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。
2.void include(ServletRequest request,ServletResponse response)
用来记录保留request和response,以后不能再修改response里表示状态的信息。
如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
2. 调用ServletContext.getRequestDispatcher(String url)方法。
eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);
http://lanew.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-3690834-uid-327434.html
二者区别:
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后
服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面
收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页
面可直接用request.getAttribute获得数据。
最基本的用法就如上了,其他的一些应注意的地方如下:
跳转方式
http://localhost:8080/Test应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
URL。
表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应
用(则提交至http://localhost:8080/uu);
Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至
http://localhost:8080/Test/uu);
(运用RequestDispatcher接口的Forward)方法
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过
response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用
forward方法前必须先清空缓冲区。
"/"代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个
<servlet-name>)
rd.forward(request, response);提交至名为TestServlet的servlet
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,
这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
从http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp
(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect("http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo,
sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
(Meta Refresh)方法200
这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是:<meta http-equiv="refresh" content="5;
url=http://www.dreamdu.com/" />
相应的java代码
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
------------------------------------------------------------------------------------------------
--------------------------
使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.
------------------------------------------------------------------------------------------------
--------------------------
request.setAttribute存的东西
只用通过方法2跳转 才能在新页取出来
发表评论
-
如何在url中传递中文
2012-04-30 17:00 2708url1. http://hi.baidu.c ... -
javascript阻止冒泡事件处理机制
2012-04-06 23:01 989JavaScript代码 //如果提供了事件 ... -
fileupload实现图片上传
2012-04-06 21:51 1440package fileupload; import ... -
HTML中添加后退、前进、刷新的超链接
2012-03-30 22:02 16283<!--<a href='javas ... -
用fileupload组件上传文件出现乱码解决方法
2012-03-30 21:32 13906用fileupload组件上传文件出现乱码解决方法www.yj ... -
从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPat
2012-03-30 15:07 1653转:http://zjutsoft.iteye.com/ ... -
tomcat配置数据库连接池成错误
2012-03-23 17:48 1304在TOMCAT5.5.X的版本中配置数据源会出现这样的错 ... -
Connection DBUtils (封装了原始JDBC对数据库的操作的一个开源类库)
2012-03-22 18:08 1557DBUtils是Apache组织提供的一个能方便的对各种 ... -
tomcat配置数据库连接池2
2012-03-22 17:49 917为了简化通过连接池获取数据库连接的过程,JDBC ... -
tomcat配置数据库连接池
2012-03-22 17:50 1031数据库连接是比较耗 ... -
CKeditor配置(转)
2012-03-22 17:50 13344ckeditor是fckeditor的下一代版本,下面就 ... -
常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类
2012-03-22 17:50 1428现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两 ... -
struts2框架验证xml中DTD错误解决办法
2012-03-13 09:12 3019Struts2.2之后,特别是Struts2.2.3,xw ... -
Tomcat 出现 Socket acdept failed 时的解决方法
2012-03-13 08:28 919昨天编Strut2的项目时,myeclipse总是报出如下的错 ...
相关推荐
### jsp跳转getRequestDispatcher()和sendRedirect()的区别 在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`getRequestDispatcher()`和`sendRedirect()`。这两种方式虽然都能实现页面跳转,...
跳转方式 ...运用forward方法只能重定向到同一个Web应用程序中的一个资源。...Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);
- `RequestDispatcher.forward()`方法的请求转发是在服务器内部进行的,不需要与客户端进行第二次通信,因此速度较快,效率较高。 - `HttpServletResponse.sendRedirect()`方法需要通过客户端再次发送请求,进行二...
- 调用`request.getRequestDispatcher(path).forward(request, response)`,其中`path`参数是一个相对于当前Servlet上下文的路径,用于指定要跳转的目标资源。 - 当使用`forward()`时,请求和响应对象会被传递到...
与`forward()`不同,`sendRedirect()`实际上是向客户端浏览器发送一个HTTP状态码302(临时重定向)或303(见其他),并附带一个新的URL,指示浏览器发起一个新的GET请求到这个新URL。因此,`sendRedirect()`会生成一...
页面之间的跳转可以通过两种方式实现:forward和sendRedirect。 forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用”目标文件”/>,例如要跳转到userlist.jsp,可以写: 代码如下: ”userlist...
request.getRequestDispatcher("/admin/register.jsp").forward(request,response); return; } //2.调用业务层完成注册操作并返回结果 User user = new User(userId,realName,pwd,age, Arrays.toString...
### JSP面试常见问题解析:Forward与SendRedirect的区别及Include的理解 #### 1. Forward与SendRedirect的区别 在Web开发中,特别是在Java Server Pages (JSP)与Servlets结合使用的场景下,`forward`与`...
### Java Web知识集锦:RequestDispatcher与sendRedirect的区别详解 #### 概述 在Java Web开发中,控制页面之间的流转是非常重要的技术之一。通常我们有两种常用的方法:`RequestDispatcher`和`sendRedirect`。这...
### Java Web知识集锦:RequestDispatcher与sendRedirect的区别详解 #### 概述 在Java Web开发过程中,开发者经常需要处理用户请求的转发和重定向。这两种机制有助于改善用户体验并简化程序逻辑。本文将深入探讨`...
JSP 中的五种跳转方式详细区别 在 JSP 编程中,跳转是一种常见的技术手段,用于将用户从当前页面重定向到另一个页面。JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:...
Session和Application的区别: * Session是会话变量,例如:打开一个网站,Session就存在了,更换页,只要是这个网站的页,Session始终存在,当关闭这个网站的时候,Session就结束了。 * Application是全局变量,不...
与`sendRedirect()`不同,`forward()`方法是一种服务器端的页面跳转方式,由RequestDispatcher接口提供。通过调用`request.getRequestDispatcher("url").forward(request, response);`,开发者可以在服务器内部将...
总结,JSP页面跳转是Java Web开发中的基础操作,理解并熟练掌握`forward()`和`sendRedirect()`的区别和用法对于开发高效、可维护的Web应用至关重要。在实际项目中,应根据需求选择合适的跳转方式,优化用户体验并...
RequestDispatcher dispatcher = request.getRequestDispatcher("资源的 URL"); dispatcher.forward(request, response); } ``` 间接请求转发(Redirect): 间接请求转发实际上是两次HTTP请求,用户可以在...
* forward() 方法的调用者与被调用者之间共享相同的 request 对象和 response 对象,而 sendRedirect() 方法调用者和被调用者使用各自的 request 对象和 response 对象,它们属于两个独立的请求和响应过程。...
//sql语句,从user表中选择出username和userpassword与用户填入的一样的数据 String sql = "select * from user where username = '" + username + "' and userpassword = '" + userpassword + "'"; ResultSet ...
### 转发与重定向的区别 在Web开发中,转发(Forward)和重定向(Redirect)是两种常见的页面跳转方式。这两种方法虽然都能实现页面的跳转,但其内部工作原理、对客户端的影响以及应用场景都有所不同。本文将详细...