在这样的一个场景中
a.jsp中使用jsp:include在多处引入了b.jsp,但是在b.jsp中有一部分只需要执行一次(引入一次);那么这个时候就可以使用request.setAttribute来完成
a.jsp中有这样一段代码<%
System.out.println(request.getAttribute("TOP_AD_LOADED"));
%>
<jsp:include page="b.jsp">
<jsp:param name="PARAM" value="1"></jsp:param>
</jsp:include>
<%
System.out.println(request.getAttribute("TOP_AD_LOADED"));
%>
b.jsp 中这样代码<%
request.setAttribute("TOP_AD_LOADED",true);
%>
<%
System.out.println("--");
System.out.println(request.getAttribute("TOP_AD_LOADED"));
%>
null true
b.jsp中判断 TOP_AD_LOADED 是否已经被加载过<c:if test="${!TOP_AD_LOADED}">
只需要执行一次的代码
</c:if>
如果使用 jstl的 c:set标签来完成,结果是失败的,因为使用这个标签在这个JSP执行完后会清除掉这个变量
可能你会说,把这一部分拿出来,在a.jsp中引入一次就行了,如果已经存在几十个jsp都存在这样的情况,那么每个jsp都会修改
request.getAttribute在 jsp:include 中的应用(小技巧),布布扣,bubuko.com
request.getAttribute在 jsp:include 中的应用(小技巧)
原文地址:http://my.oschina.net/emmet/blog/300144