forward、sendRedirect及Jsp和Servlet之间的跳转
2013-08-11 01:05
495 查看
http://www.blogjava.net/yzzh9/archive/2009/06/09/280908.html
<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")%>
http://localhost:8080/ForwardRedirect/tiane.jsp跳转后结果为:
redwater
daguaiwan
http://localhost:8080/ForwardRedirect/donglan.jsp跳转后结果为:
null
null
http://localhost:8080/ForwardRedirect/bama.jsp跳转后结果为:
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
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>
具体的结果我就不分析了,和第一个例子差不多的。代码见附件。
<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")%>
http://localhost:8080/ForwardRedirect/tiane.jsp跳转后结果为:
redwater
daguaiwan
http://localhost:8080/ForwardRedirect/donglan.jsp跳转后结果为:
null
null
http://localhost:8080/ForwardRedirect/bama.jsp跳转后结果为:
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
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之间的跳转 推荐
- forward、sendRedirect及Jsp和Servlet之间的跳转
- forward、sendRedirect及Jsp和Servlet之间的跳转
- Servlet JSP 之间的跳转 response.sendRedirect()和RequestDispatcher().forward的比较
- forward、sendRedirect及Jsp和Servlet之间的跳转
- forward、sendRedirect及Jsp和Servlet之间的跳转
- jsp中页面之间的跳转forward与sendRedirect的区别
- jsp中页面之间的跳转forward与sendRedirect的区别
- jsp中页面之间的跳转forward与sendRedirect的区别
- 【学习摘记】马士兵Servlet&JSP_课时24_forward_sendredirect——原页面跳转 vs 新页面跳转
- jsp中页面之间的跳转forward与sendRedirect的区别
- 【学习摘记】马士兵Servlet&JSP_课时29_servlet_forward——JSP内置对象以及与servlet之间的跳转
- JSP-Servlet中转发(forward)与重定向(sendRedirect)的区别
- Servlet跳转方式sendReDirect()和forward()
- jsp中<jsp:forward page=""/>和response.sendRedirect("")两种跳转的区别
- <jsp:forward>和response.sendRedirect()两种跳转的区别
- jsp中<jsp:forward page=""/>和response.sendRedirect("")两种跳转的区别
- servlet 中的 sendRedirect和forward实现跳转以及报参数非法异常
- Servlet跳转方式sendReDirect()和forward()
- JSP页面跳转之sendRedirect()与forward()辨析