servlet的2种重定向方法

  转载
servlet/JSP 编程中,服务器端重定向可以通过下面两个方法来实现:
1 ,运用 javax.servlet.RequestDispatcher 接口的 forward 方法,
2 ,或者运用 javax.servlet.http.HttpServletResponse 接口的 sendRedirect 方法。
要运用 RequestDispatcher 接口的 forward 方法,首先要得到一个 RequestDispatcher 对象。 servlet 技术提供了三种方式来得到它:
 1.  通过运用 javax.servlet.ServletContext 接口的 getRequestDispatcher 方法,将一个包含路径的 String 传递给其它资源。该路径是相对于 ServletContext 的根路径的。  
 2. 
通过运用 javax.servlet.ServletRequest 接口的 getRequestDispatcher 方法,将一个包含路径的 String 传递到其它资源。该路径是相对于当前的 HTTP 请求的。  
 3. 
通过运用 javax.servlet.ServletContext 接口的 getNamedDispatcher 方法,传递一个包含其它资源名字的 String  
但要注意,你只有在客户端没有输出时才可以调用 forward 方法。 如果当前页面的缓冲区( buffer )不是空的,那么你在调用 forward 方法前必须先清空缓冲区。 否则,会抛出一个 IllegalStateException forward 方法也可以用来将请求发送到一个静态的页面。
在运用 RequestDispatcher 对象的 forward 方法来将一个控件从一个叫做 ABCServlet servlet 传递到另一个叫做 XYZServlet servlet 时,最简单的方法就是把 ABCServlet XYZServlet 的类文件放在同一个目录中。通过这种方法,你就可以从 URL  http://domain/VirtualDir/servlet/ABCServlet 来调用 ABCServlet ,从 URL http://domain/VirtualDir/servlet/XYZServlet 来调用 XYZServlet 了。然后运用 forward 方法就很简单了。你可以从 ServletRequest 接口运用 getRequestDispatcher , 传递第二个 servlet 的名字。在 ABCServlet 中,你可以写下面的代码:   

RequestDispatcher rd = 
request.getRequestDispatcher("SecondServlet");
  rd.forward(request, response);

你不需要在 XYZServlet 前放  /  符号。这种方法是最简单的,因为你根本不需要担心两个 servlets 的路径。  
稍复杂的方法就是把下面这个 String 传递到 ServletRequest getRequestDispatcher "/servlet/XYZServlet"

如果你必须调用一个从 ServletContext getRequestDispatcher 得到的 RequestDispatcher 对象的 forward 方法,你需要将 “/VirtualDir/servlet/XYZServlet” 作为路径参数来传递,如下:   

RequestDispatcher rd =
    getServletContext().getRequestDispatcher(
    "/servlet/XYZServlet");
  rd.forward(request, response);
<jsp:forward page=”OtherPage.jsp”/> 在结果 servlet 中就转换成了下面的代码: pageContext.forward("OtherPage.jsp");
运用 HttpServletResponse 接口的 sendRedirect 方法
该方法把一个命令发送到浏览器,让浏览器对在 location 中指定的 URL 提出请求。该方法可以接受绝对的或相对的 URLs 。如果传递到该方法的参数是一个相对的 URL ,那么 Web container 在将它发送到客户端前会把它转换成一个绝对的 URL 如果地址是相对的,没有一个 ’/’ ,那么 Web container 就认为它是相对于当前的请求 URI 的。
你应该运用哪种技巧?
[QUOTE] 为了编写最有效的代码,你应该了解这两种重定向技巧的不同。 forward 方法是在 Web container 内部工作的。 sendRedirect 方法需要到客户端的一个往返。所以 forward 方法比 sendRedirect 要快。但是, 运用 forward 方法有局限性,你只能重定向到同一个 Web 应用程序中的一个资源。而 sendRedirect 方法可以让你重定向到任何 URL 。结论:如果可以解决你的问题,那么就用 forward 方法。只有当你不能用 forward 方法时才运用 sendRedirect 方法。
forward不会改变当前浏览器地址栏中的路径 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值