MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

sendRedirect,include,forward的区别

Posted on 2008-10-31 15:10 leekiang 阅读(574) 评论(0)  编辑  收藏 所属分类: jsp,servlet
1,sendRedirect
写法:response.sendRedirect();
服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求事先访问过的那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取,request.setAttribute的内容没有了
2,include
会同时包含本页面和include页面的内容,地址栏不变。
 request.setAttribute的内容可以正常使用 。
servlet写法:request.getRequestDispatcher("jsp2.jsp").include(request,   response);  
jsp写法:<jsp:include page="include.jsp"/>

3,forward
页面会是forward的页面的内容,地址栏不变
request.setAttribute的内容,可以正常使用
servlet写法:request.getRequestDispatcher("jsp2.jsp").forward(request,   response);
jsp写法<jsp:forward page=
"include.jsp"/>

以上内容主要来自
图解sendRedirect,include,forward的区别
该文有形象的示意图,值得一看。

4,
<%@ include file="/bookshelf.jsp" %>和<jsp:include page="bookshelf.jsp" flush="true" />
是有区别的。前者主要用于静态内容,后者主要用于动态内容(flush='true'必加?)。
 如果要传递参数,只能利用后者的<jsp:param name="" value=""/>标记,不能直接放在url后面。
参考:JSP 最佳实践: 用 jsp:include 控制动态内容
<%@ page language="java" contentType="text/html" %>
<html>
<body>
<jsp:include page="header.jsp" flush="true">
<jsp:param name="pageTitle" value="newInstance.com"/>
<jsp:param name="pageSlogan" value=" " />
</jsp:include>
<%@ include file="/navigation.jsp" %>
<jsp:include page="bookshelf.jsp" flush="true" />
<jsp:include page="/mt-blogs/index.jsp" flush="true" />
<%@ include file="/footer.jsp" %>
</body>
</html>



只有注册用户登录后才能发表评论。


网站导航: