首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在每个会话中只评估一次JSP,然后对其进行缓存?

问是否可以在每个会话中只评估一次JSP,然后对其进行缓存?
EN

Stack Overflow用户
提问于 2010-05-08 05:39:17
回答 2查看 332关注 0票数 2

我的站点有一个导航菜单,它是作为单独的JSP动态构建的,并通过<jsp:include />包含在大多数页面中。菜单的内容和样式由用户可以访问和不能访问的页面决定。

这组可访问页面是在用户登录时从数据库中检索的,而不是在会话过程中检索的。因此,真的没有必要在用户每次请求页面时重新评估导航菜单代码。有没有一种简单的方法可以在每个会话中只从JSP生成一次标记,并在会话期间缓存/重用它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-10 09:27:45

一种类似的方法,但使用JSTL而不是scriptlet代码:

代码语言:javascript
复制
<c:if test="${empty menuContents}">
  <c:set var="menuContents" scope="session">
    Render the menu here...
  </c:set>
</c:if>
<c:out value="${menuContents}" escapeXml="false"/>
票数 3
EN

Stack Overflow用户

发布于 2010-05-08 05:57:25

这里有一个JSP标记文件,它可以做你想要的,未经测试。

代码语言:javascript
复制
<%@tag description="Caches the named content once per session" pageEncoding="UTF-8"%>

<%@attribute name="name"%>

<%
String value = (String)request.getSession().getAttribute(name);

if (value == null) {
%>
<jsp:doBody var="jspBody"/>
<%
    value = jspContext.getAttribute("jspBody", PageContext.PAGE_SCOPE);
    request.getSession().setAttribute(name, value);
}
jspContext.setAttribute("value", value);
%>
${value}

要使用它,您需要执行以下操作:

代码语言:javascript
复制
<t:doonce name="navigation">
    <jsp:include page="nav.jsp"/>
</t:doonce>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2791830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档