forward 和 sendRedirect

转载 2007年09月23日 08:48:00

作者:80x86

Javax.servlet.RequestDispatcher.forward(ServletRequest request, ServletResponse response)

Javax.servlet.http.HttpServletResponse.sendRedirect(String location)

forward

作用于服务器端,重定向后客户端浏览器地址栏的URL不变,无法通过get方式传递参数,不过可以通过HttpServletResponse. setAttribute(key, values)来做:

JDK的DOC中的描述:

Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. This method allows one servlet to do preliminary processing of a request and another resource to generate the response.

forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws an IllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward.

这个方法允许一个servlet对一个请求作完处理后,并使用另一个资源作响应。

forward应该在向客户端发出响应之前被调用(response的输出流被刷新之前),如果已经向客户端发出了响应,这个方法将抛出一个 “IllegalStateException”的异常。未发出响应response的输出缓冲区在调用forward会被自动的清空。

得到RequestDispatcher引用的方法:

1、 javax.servlet.ServletContext.getRequestDispatcher(String path)

JDK的DOC中的描述:

The pathname must begin with a "/" and is interpreted as relative to the current context root. Use getContext to obtain a RequestDispatcher for resources in foreign contexts. This method returns null if the ServletContext cannot return a RequestDispatcher.

用的最多,最容易理解的方法,path必须是以“/”开头,路径是相对于全局上下文路径,对应于web应用的根目录

2、javax.servlet.ServletRequest.getRequestDispatcher(String path)

JDK的DOC中的描述:

The pathname specified may be relative, although it cannot extend outside the current servlet context. If the path begins with a "/" it is interpreted as relative to the current context root. This method returns null if the servlet container cannot return a RequestDispatcher.

可以是相对地址,以当前资源的根目录,但不能超出当前资源根目录。

可以是以“/”开头的地址,当前root作为根目录环境。

2、 javax.servlet.ServletContext.getNamedDispatcher(String name)

JDK的DOC中的描述:

Servlets (and JSP pages also) may be given names via server administration or via a web application deployment descriptor.

得到名为name的资源。

Servlets(也可是JSP 页面)可能会有个给定的名字,该名字是服务器或者web应用的部署描述web.xml提供的。

sendRedirect

工作在客户端,重定向后客户端浏览器地址栏的URL变为新的资源URL,可以通过get方式传递参数。

JDK的DOC的描述:

Sends a temporary redirect response to the client using the specified redirect location URL. This method can accept relative URLs; the servlet container must convert the relative URL to an absolute URL before sending the response to the client. If the location is relative without a leading '/' the container interprets it as relative to the current request URI. If the location is relative with a leading '/' the container interprets it as relative to the servlet container root.

If the response has already been committed, this method throws an IllegalStateException. After using this method, the response should be considered to be committed and should not be written to.

这个方法可以接受相对的URL,在发送响应之前servlet容器会将其转化为绝对的URL。如果相对的URL不以“/”开头,容器将解释为是相对当前请求的路径URI,如果是以“/”开头,则解释为是相对于servlet容器的更目录环境。

注意:如果已经向客户端响应了请求,这个方法将抛出一个“IllegalStateException”的异常。调用了这个方法后,这个响应是否被提交或是否提交完毕。

sendRedirect比较简单,参数location就是代表重定向目标新资源

localtion可以有以下几种情况:

可以是绝对地址,如:http://localhost:8080/servlet/a.jsp

可以是相对地址,相对于当前访问资源的根目录,如:a.jsp

可以是以“/”开头的地址,则认为是先对该web应用的根目录,如:/a.jsp

 

相关文章推荐

sendRedirect()和forward()

  • 2009年06月15日 14:44
  • 54KB
  • 下载

jsp中页面之间的跳转forward与sendRedirect的区别

页面之间的跳转可以通过两种方式实现:forward和sendRedirect forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用,例如要跳转到userlis...

response.sendRedirect()与request.getRequestDispatcher().forward(request,response)的区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是...
  • c_w_d
  • c_w_d
  • 2016年06月21日 15:47
  • 146

让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是...

forward和sendRedirect之间的区别

forward和sendRedirect都可以实现跳转。 两者的区别如下: 1、请求次数不同,这是最本质的区别。在forward方式下,在执行当前JSP对象或者Servlet对象的过程中去调用...

RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别

(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程...

转发和重定向区别( forward与sendRedirect区别)

SendRedirect Forward 不同的request 不同的对象,但是可以渠道上一个页面的内容 send后面的语句会继续执行,除非return Forwar...

JAVA 的服务器重定向:使用forward()方法转发请求和使用 sendRedirect()方法重定向的区别

转载于:http://blog.csdn.net/caixiexin/article/details/6642050 使用RequestDispatche r的 forward()方法转...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:forward 和 sendRedirect
举报原因:
原因补充:

(最多只允许输入30个字)