浅谈JSP的Forward及sendRedirect方法
使用同一个request,是在服务器端跳转,浏览器显示的是第一个页面的名字,因为客户端(浏览器)不知道它在服务器端跳转了。本文将为大家讲解JSP的forward及sendRedirect方法。
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")%>
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
12. <%request.setAttribute("river","redwater");
13. request.setAttribute("country","daguaiwan");
14. %>
15. <jsp:forward page="/tiane" />
16.
17. servletbama.jsp
18. <%request.setAttribute("river","redwater");
19. request.setAttribute("country","daguaiwan");
20. response.sendRedirect("/ForwardRedirect/tiane");
21. %>
Tiane.java
22. public class Tiane extends HttpServlet {
23.
24. public void doGet(HttpServletRequest request, HttpServletResponse response)
25. throws ServletException, IOException {
26. // response.sendRedirect("/ForwardRedirect/fengshan.jsp");
27. this.getServletConfig().getServletContext()
28. .getRequestDispatcher("/fengshan.jsp").forward(request, response);
29. }
30.
31. public void doPost(HttpServletRequest request, HttpServletResponse response)
32. throws ServletException, IOException {
33. doGet(request, response);
34. }
35. }
36. <servlet>
37. <servlet-name> tiane </servlet-name>
38. <servlet-class> com.dvnchina.test.Tiane </servlet-class>
39. </servlet>
40. <servlet-mapping>
41. <servlet-name> tiane </servlet-name>
42. <url-pattern> /tiane </url-pattern>
43. </servlet-mapping>
具体的结果我就不分析了,和第一个例子差不多的。