使用jsp:include的JSP性能

Sha*_*n F 22 java performance jsp

我开始将一个大的JSP文件拆分成一些较小的JSP页面,这样我就可以在网站的其他区域重用它.

我可以采用离开的方法作为一个大型的Monolithic JSP文件,它接受参数并相应地调整它的行为.我可以采取的另一种方法是将它分开,以便通过jsp:include调用它.

创建从服务器内调度的其他请求调用时,性能问题是什么?将它保存为一个jsp页面是否更好的性能?

Vin*_*lds 24

jsp:include是一个运行时指令,不像<%@ include ... %>指令恰好是编译时指令(实际上是转换时间).编译时include指令相对无害,因为JSP通常是为生产预编译的,或者是在为应用程序的每个部署编译的最坏情况下.因此,最好对静态文件使用编译时指令,因为文件不会在运行时更改.

另一个头上的运行时include指令,如果误用,可能会导致一些性能损失,特别是对于包含的静态文件.这主要是因为JSP容器必须获取静态文件的内容并将它们包含在响应中.因此,保留运行时指令的用法,用于真正有用的场景,其中另一个servlet或jsp的响应将包含在响应中,而不仅仅是使代码看起来很好.


Kei*_*ler 17

你应该使用:

<%@ include file="page.jsp" %>
Run Code Online (Sandbox Code Playgroud)

这会在翻译时添加page.jsp的内容,并且没有开销.

<jsp:include page="page.jsp" />
Run Code Online (Sandbox Code Playgroud)

您的方法在运行时添加内容并增加了大量开销.


use*_*995 5

静态与动态 include

include指令在翻译过程中制作包含页面的副本并将其复制到 JSP 页面(“包含页面”)中。这称为静态包含(或翻译时包含)并使用以下语法:

<%@ include file="/jsp/userinfopage.jsp" %>
Run Code Online (Sandbox Code Playgroud)

jsp:include操作在运行时动态地将包含页面的输出包含在包含页面的输出中。这称为动态包含(或运行时包含)并使用以下语法:

<jsp:include page="/jsp/userinfopage.jsp" flush="true" />
Run Code Online (Sandbox Code Playgroud)

性能注意事项

静态包含影响页面大小;动态包含影响处理开销。静态包含避免了动态包含所需的请求调度程序的开销,但在涉及大文件时可能会出现问题。

动态包含确实增加了处理开销,需要额外调用请求调度程序。

http://docs.oracle.com/cd/A97336_01/buslog.102/a83726/keydev1.htm#1015959 http://docs.oracle.com/cd/A97336_01/buslog.102/a83726/genlovw3.htm