`

Servlet 重导定向问题

阅读更多
response.sendRedirect 与 request.getRequestDispatcher(url).forward(request,response)区别

  服务器端进行转向的4种方法:  
  1.   ServletContext的getRequestDispatcher()   
  2.   ServletContext的getNamedDispatcher()   
  3.   ServletRequest的getRequestDispatcher()   
  4.   ServletResponse的sendRedirect()进行转向。 
 
  1.2.3   功能大于等于   forward() 重导功能
4.   sendRedirect()          
  使用forward方法,因为这些这样比较高效。只有在forward方法不能使用时(比如要转向到一个非本web应用),再使用ServletResponse的sendRedirect()方法。  
   
  <jsp:fordward>与   sendRedirect   方法的比较  
  虽然   <jsp:fordward>与   sendRedirect   方法,都可以将浏览器浏览的网页,重导至另一个网页,但是两者在原理上是不太相同。  
  a. <jsp:fordward>   :   动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果。  
  优点:   两网页间可以分享   request   对象内的变量。  
  b. sendRedirect   :   动作是透过   HTTP   协议的   Header   ,   对浏览器下达重导指令,因此,不牵涉到服务器端缓冲区的问题。  
  不过由于   sendRedirect   方法作用于客户端,所以重导前后网页无法分享存在于   request   对象内的变量。  
  Solution:   response.sendRedirect(“test.jsp?key=view”)  
  今天才搞清楚这个原理,ServletResponse就是在客户端响应返回数据,在这里ServletResponse不保留,request.setAttribute()的属性,如果用response.sendRedirect重导话,一些数据最好绑定到session里,数据一多,服务器吃不消,建议用ServletRequest来重导。
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics