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 设置的属性。
 
Jsp Servlet 之间的跳转:
Jsp 跳转 Servlet 能够使用 <jsp:forward page=”URL” /> 或者 response.sendRedirect(URL) 均可以,它们之间的区别上面已经说明了。
 
Servlet 跳转 Jsp
²  getRequestDispatcher forward(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 >
具体的结果我就不分析了,和第一个例子差很少的。代码见附件。
相关文章
相关标签/搜索