欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

forward、sendRedirect及Jsp和Servlet之间的跳转 JSPServletOffice浏览器Microsoft 

程序员文章站 2022-05-21 13:57:24
...
<jsp:forward> 使用同一个 request ,是在服务器端跳转,浏览器显示的是第一个页面的名字,因为客户端(浏览器)不知道它在服务器端跳转了。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

Response.sendRedirect 是两个不同的 request ,是在客户端跳转,浏览器显示的是跳转后的页面的名字。因为它是从客户端跳转到第二个页面的。
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft 
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft 
 
使用 forward 时,由于只是发送一次 request 请求, request 设置的属性( setAttribute )依然能保留在下一个页面。

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

下面举例说明:
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft tian.jsp    
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%request.setAttribute("river","redwater");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     request.setAttribute("country","daguaiwan");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft %>
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <jsp:forward page="fengshan.jsp" />
 
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft donglan.jsp    
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%request.setAttribute("river","redwater");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     request.setAttribute("country","daguaiwan");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft %>
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <a href="fengshan.jsp">fengshan</a>
 
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft bama.jsp    
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%request.setAttribute("river","redwater");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     request.setAttribute("country","daguaiwan");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     response.sendRedirect("fengshan.jsp");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft %>
 
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft fengshan.jsp
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%=request.getAttribute("river")%><br/>
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%=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设置的属性。
例子如下:
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft servlettiane.jsp    
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%request.setAttribute("river","redwater");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     request.setAttribute("country","daguaiwan");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft %>
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <jsp:forward page="/tiane" />
 
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft servletbama.jsp    
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft <%request.setAttribute("river","redwater");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     request.setAttribute("country","daguaiwan");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft     response.sendRedirect("/ForwardRedirect/tiane");
forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft %>
 
Tiane.java
publicclass Tiane extends HttpServlet {

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

  publicvoid 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>
具体的结果我就不分析了,和第一个例子差不多的。代码见附件。
 
 
 

forward、sendRedirect及Jsp和Servlet之间的跳转
            
    
    
        JSPServletOffice浏览器Microsoft 

999 2009-06-09 13:41 发表评论