jsp 跳转及数据传输问题

<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、付费专栏及课程。

余额充值