我们有一个在glassfish服务器上运行的网页。在我们的jsp文件中,我们有很多包括下面的内容。
<jsp:directive.include file="johndoe/foobar.jspf"/>
根据用户选择包含这些文件。我们的jsp文件基本上是这样的:
<jsp:root version="2.1" xmlns:c="http://java.sun.com/jstl/core_rt"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:webuijsf="http://www.sun.com/webui/webuijsf">
//some unimportant codes here
<c:if test="${sessionScope.loadAvgTest}">
//some unimportant codes here
<f:subview id="reports15">
<jsp:directive.include file="siforms/sysinfoform.jspf"/>
</f:subview>
//some unimportant codes here
<f:subview id="reports16">
<jsp:directive.include file="siforms/sysinfoformscheduled.jspf"/>
</f:subview>
//some unimportant codes here
</c:if>
//some unimportant codes here
<c:if test="${sessionScope.bandwidthTest}">
//some unimportant codes here
<f:subview id="reports17">
<jsp:directive.include file="mailforms/mailfilter.jspf"/>
</f:subview>
//some unimportant codes here
<f:subview id="reports18">
<jsp:directive.include file="mailforms/mailfilterscheduled.jspf"/>
</f:subview>
//some unimportant codes here
</c:if>
....
大约有80个if语句,每个语句包含2个inculdes。当我删除了很多这些if子句并且只留下了一些,如果有几个包括内存使用就没问题了。但随着我使用更多if子句和更多包括内存使用量的增长。有什么想法我可以如何优化代码或如何对servlet配置进行配置更改以降低内存使用量?
答案 0 :(得分:1)
使用jsp:include
代替jsp:directive.include
解决了这个问题。
据我所知,我的研究jsp:directive.include
(include指令)在编译时将文件包含到JSP页面中,而jsp:include
包含运行时的输出。
I have found that, include action (runtime include) runs a bit slower
yet it is preferred generally because it save a lot of memory of the system.
(source)
答案 1 :(得分:0)
您正在使用JSF。在视图创建时,如果if
语句的计算结果为true,则页面上的JSF控件将添加到组件树中。对于服务器端状态保存,这些UIComponent实例和their state将(默认情况下)保留在用户的会话中。您添加的控件越多,您将消耗的内存就越多。默认情况下,会话中会保留许多旧视图。
你可以尝试:
com.sun.faces.numberOfViewsInSession
和com.sun.faces.numberOfLogicalViews
或实施的等效初始化参数)javax.faces.STATE_SAVING_METHOD
- 这带来安全问题,可能会改变应用程序行为)