forward、sendRedirect及Jsp和Servlet之间的跳转

 
<jsp:forward> 使用同一个 request ,是在服务器端跳转,浏览器显示的是第一个页面的名字,因为客户端(浏览器)不知道它在服务器端跳转了。
Response.sendRedirect 是两个不同的 request ,是在客户端跳转,浏览器显示的是跳转后的页面的名字。因为它是从客户端跳转到第二个页面的。
 
 
 
使用 forward 时,由于只是发送一次 request 请求, request 设置的属性( setAttribute )依然能保留在下一个页面。
使用 sendRedirect 时,由于发送两次 request 请求,所以在下一个不能获取 request 属性。但可以通过重写 URL 的方式将内容传递过去。
下面举例说明:
tian.jsp    
<%request.setAttribute( "river", "redwater");
    request.setAttribute( "country", "daguaiwan");
%>
<jsp:forward page= "fengshan.jsp" />
 
 
donglan.jsp    
<%request.setAttribute( "river", "redwater");
    request.setAttribute( "country", "daguaiwan");
%>
<a href= "fengshan.jsp">fengshan</a>
 
 
bama.jsp    
<%request.setAttribute( "river", "redwater");
    request.setAttribute( "country", "daguaiwan");
    response.sendRedirect( "fengshan.jsp");
%>
 
 
fengshan.jsp
<%=request.getAttribute( "river")%><br/>
<%=request.getAttribute( "country")%>
redwater
daguaiwan
 
null
null
 
null
null
 
结果分析:
tiane.jsp是通过forward跳转到fengshan.jsp的,这两个页面享用的是同一个request,故fengshan.jsp可以接收到tiane.jsp通过 request设置的属性。
donglan.jsp是通过href发送了另外的request请求,bama.jsp是通过sendRedirect跳转,用的也是另外的request请求,故fengshan.jsp不可以接收到这两个页面通过 request设置的属性。
 
JspServlet之间的跳转:
Jsp跳转Servlet可以使用<jsp:forward page=”URL” />或者response.sendRedirect(URL)都可以,它们之间的区别上面已经说明了。
 
Servlet跳转Jsp
²         getRequestDispatcherforward(request, response)方法,这里也只是发送了一次请求,可以在下一个页面接受request设置的属性。
²         response.sendRedirect(URL),这里发送了两次请求,不可以在下一个页面接受request设置的属性。
例子如下:
servlettiane.jsp    
<%request.setAttribute( "river", "redwater");
    request.setAttribute( "country", "daguaiwan");
%>
<jsp:forward page= "/tiane" />
 
servletbama.jsp    
<%request.setAttribute( "river", "redwater");
    request.setAttribute( "country", "daguaiwan");
    response.sendRedirect( "/ForwardRedirect/tiane");
%>
 
Tiane.java
public class Tiane extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
//    response.sendRedirect("/ForwardRedirect/fengshan.jsp");
     this.getServletConfig().getServletContext()
            .getRequestDispatcher( "/fengshan.jsp").forward(request, response);
  }

   public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
    doGet(request, response);
  }    
}
 
再在web.xml中配置servlet:
   < servlet >
   < servlet-name >tiane </ servlet-name >
   < servlet-class >com.dvnchina.test.Tiane </ servlet-class >
   </ servlet >
   < servlet-mapping >
   < servlet-name >tiane </ servlet-name >
   < url-pattern >/tiane </ url-pattern >
</ servlet-mapping >
具体的结果我就不分析了,和第一个例子差不多的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值