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原理及区别总结

一、原理.  1、 Forward        该图的交互过程如下: ① 浏览器访问Servlet1。 ② Servlet1想让Servlet2对客户端的请求进行响应,于是调用fo...
  • u011980994
  • u011980994
  • 2014年03月18日 16:34
  • 1650

forward与sendRedirect区别(实现页面跳转的方法)

SendRedirect Forward 不同的request 不同的对象,但是可以渠道上一个页面的内容 send后面的语句会继续执行,除非return Forwar...
  • yuxuan19900
  • yuxuan19900
  • 2014年07月31日 10:29
  • 6358

forward()和sendRedirect()执行后,后面的代码是否还继续执行?

之前知道 forward后地址栏地址不变,redirected后地址栏地址会变化,举个登陆的例子:   login.jsp ---> check (servlet) ---> 成功succ...
  • u010327174
  • u010327174
  • 2014年07月19日 22:40
  • 2664

sendRedirect()和forward()

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

response_sendRedirect和request_getRequestDispatcher()_forward的区别.

  • 2009年07月15日 22:34
  • 34KB
  • 下载

Servlet之forward、sendRedirect、 include区别与使用实例

  • 2015年05月19日 08:47
  • 13KB
  • 下载

servlet中页面重定向(sendRedirect)和请求转发(forward)区别

servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDispacther("/test....
  • lalalalalala_
  • lalalalalala_
  • 2017年12月27日 21:57
  • 467

servlet中请求转发(forward)与重定向(sendredirect)的区别

servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDispatcher("/test.jsp"...
  • YeaH_Chen
  • YeaH_Chen
  • 2017年12月01日 11:38
  • 118

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

页面之间的跳转可以通过两种方式实现:forward和sendRedirect forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用,例如要跳转到userlis...
  • sakya1224
  • sakya1224
  • 2017年02月12日 17:54
  • 159

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

SendRedirect Forward 不同的request 不同的对象,但是可以渠道上一个页面的内容 send后面的语句会继续执行,除非return Forwar...
  • ITofwanyifei
  • ITofwanyifei
  • 2014年08月11日 16:13
  • 614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:forward 和 sendRedirect
举报原因:
原因补充:

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