浅谈JSP的Forward及sendRedirect方法

Response.sendRedirect是两个不同的request,是在客户端跳转,浏览器显示的是跳转后的页面的名字。因为它是从客户端跳转到第二个页面的。

使用forward时,由于只是发送一次request请求,request设置的属性(setAttribute)依然能保留在下一个页面。

使用sendRedirect时,由于发送两次request请求,所以在下一个不能获取request属性。但可以通过重写URL的方式

内容传递过去。

下面举例说明:


tian.jsp    
<%request.setAttribute( "river", "redwater");
request.setAttribute( "country", "daguaiwan");
%>
"fengshan.jsp" />
  donglan.jsp    
<%request.setAttribute( "river", "redwater");
request.setAttribute( "country", "daguaiwan");
%>
"fengshan.jsp">fengshan
  bama.jsp    
<%request.setAttribute( "river", "redwater");
request.setAttribute( "country", "daguaiwan");
response.sendRedirect( "fengshan.jsp");
%>
  fengshan.jsp
<%=request.getAttribute( "river")%>

<%=request.getAttribute( "country")%>
 

   
   
   
   
  1. http://localhost:8080/ForwardRedirect/tiane.jsp 跳转后结果为:  
  2. redwater  
  3. daguaiwan  
  4.    
  5. http://localhost:8080/ForwardRedirect/donglan.jsp 跳转后结果为:  
  6. null  
  7. null  
  8.    
  9. http://localhost:8080/ForwardRedirect/bama.jsp 跳转后结果为:  
  10. null  
  11. null 

结果分析: tiane.jsp是通过forward跳转到fengshan.jsp的,这两个页面享用的是同一个request,故fengshan.jsp可以接收到tiane.jsp通过 request设置的属性。而donglan.jsp是通过href发送了另外的request请求,bama.jsp是通过sendRedirect跳转,用的也是另外的request请求,故fengshan.jsp不可以接收到这两个页面通过 request设置的属性。 Jsp和Servlet之间的跳转:从Jsp跳转Servlet可以使用或者response.sendRedirect(URL)都可以,它们之间的区别上面已经说明了。 从Servlet跳转Jsp: getRequestDispatcher的forward(request, response)方法,这里也只是发送了一次请求,可以在下一个页面接受request设置的属性。 ² response.sendRedirect(URL),这里发送了两次请求,不可以在下一个页面接受request设置的属性。

例子如下: servlettiane.jsp 

    
    
    
    
  1. <%request.setAttribute("river","redwater");   
  2.     request.setAttribute("country","daguaiwan");   
  3. %>   
  4.  page="/tiane" />   
  5.  
  6. servletbama.jsp      
  7. <%request.setAttribute("river","redwater");   
  8.     request.setAttribute("country","daguaiwan");   
  9.     response.sendRedirect("/ForwardRedirect/tiane");   
  10. %>  

Tiane.java

    
    
    
    
  1. public class Tiane extends HttpServlet {   
  2.  
  3.   public void doGet(HttpServletRequest request, HttpServletResponse response)   
  4.       throws ServletException, IOException {   
  5. //    response.sendRedirect("/ForwardRedirect/fengshan.jsp");   
  6.     this.getServletConfig().getServletContext()   
  7.             .getRequestDispatcher("/fengshan.jsp").forward(request, response);   
  8.   }   
  9.  
  10.   public void doPost(HttpServletRequest request, HttpServletResponse response)   
  11.       throws ServletException, IOException {   
  12.     doGet(request, response);   
  13.   }      
  14. }  

再在web.xml中配置servlet:  

    
    
    
    
  1.    
  2.   tiane   
  3.   com.dvnchina.test.Tiane   
  4.      
  5.      
  6.   tiane   
  7.   /tiane   
  8.   

具体的结果我就不分析了,和第一个例子差不多的。代码见附件。

【编辑推荐】

  1. 浅析JSP HTTP服务器支持CGI
  2. 使用JSP页面生成PDF报表
  3. JSP自定义标签定义步骤
  4. 详解测试JSP容器
  5. 介绍JSP HTTP服务器实现的以下特性

网页标题:浅谈JSP的Forward及sendRedirect方法
转载来源:http://www.shufengxianlan.com/qtweb/news0/357550.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联