Java 如何在JSP中包含资源而不增加服务方法的开销?

Java 如何在JSP中包含资源而不增加服务方法的开销?,java,jsp,include,Java,Jsp,Include,我正在处理一个使用JSP的高负载项目,页面上包含大量其他资源(JSP、jspf) 众所周知,在JSP中使用include有两种方式:静态方式和动态方式(或JSTL等效方式) 但他们都有缺点 例如,静态导入可能会导致主页中变量名的冲突。动态导入的性能较差 我希望对服务方法使用一些不是开销的东西,同时独立于代码的其余部分 在最狭窄的地方,我们必须将html代码放在java代码中: public String getHtml() { return “<div class=’entity’

我正在处理一个使用JSP的高负载项目,页面上包含大量其他资源(JSP、jspf)

众所周知,在JSP中使用include有两种方式:静态方式和动态方式(或JSTL等效方式)

但他们都有缺点

例如,静态导入可能会导致主页中变量名的冲突。动态导入的性能较差

我希望对服务方法使用一些不是开销的东西,同时独立于代码的其余部分

在最狭窄的地方,我们必须将html代码放在java代码中:

public String getHtml() {
    return “<div class=’entity’>” + … + “</div>”;
}

所以,我的问题是下一个:有没有什么方法可以优雅地表演这样的把戏?也许使用第三方库?

我认为解决方案永远不会用java编写html


正常的jstl include很好,您认为可以通过什么方式提高性能?

当第一次查看jsp时,它会被转换为java类并进行编译-包括任何包含和/或导入,所有这些都会成为一个类

因此,在第一次查看页面时,大量的包含可能会影响性能,但在这之后,本质上与调用servlet相同


如果您使用的是tomcat,请深入tomcat/work目录,查看您精心编写的JSP的情况。

我真的不明白这个问题。使用include有什么不对?它有点慢吗?是的,动态包含比静态包含慢得多。这不只是编译servlet后的方法调用吗?你有任何链接来支持这个吗?J2EE1.3?你在历史上损失了10多年=\。顺便说一句,为了得到真正的帮助,请提供一个真实的例子,而不仅仅是想法。这就是为什么它被称为“动态”。当我们这样做的时候,我们在servlet中得到了类似的东西:JspRuntimeLibrary.include(请求、响应,“/WEB-INF/file.jsp”,out,true);而不是通常的输出。写(“…”);正是这个JspRuntimeLibrary.include()调用降低了servlet的性能。所以我的想法是使用轻量级out.write(“…”)in-service方法调用静态方法。但是仍然能够在普通JSP中进行html布局。@user2216318以及您希望获得何种可测量的性能提升?@user2216318您已经证明静态include更快,我们知道这一点,所以,我的问题是:为什么不取消JspRuntimeLibrary.include()之类的用法?JSP翻译\编译可以更高效地完成。
<jsp:getProperty name="someEntity" property="html" />
<entitytag>
    <parameter name=’param1’ class=’java.util.String’ />
    <parameter name=’param2’ class=’mypackage.Entity’ />
    <tagbody>
        <div class=’entity’>…</div>
    </tagbody>
</entitytag>
static public void entitytag(String param1, Entity param2, JSPWriter out) {
    out.write(“<div class=’entity’>”);
    …
    out.write(“</div>”);
}
<mylib:entitytag param1=’someString’ param2=’someEntity’ />;
MylibClass.entitytag(param1, param2, out);