2

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

众所周知,在 JSP 中使用 include 有两种方式:静态 - <%@include %>和动态 - <jsp:include />(或 JSTL 等效的 <c:import />)。

但他们都有缺点。

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

我想使用一些不是服务方法开销的东西,同时独立于其余代码。

在最狭窄的地方,我们不得不将 html-code 放在 java-code 中:

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

在 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’&gt;…&lt;/div>
    </tagbody>
</entitytag>

这将被翻译成:

static public void entitytag(String param1, Entity param2, JSPWriter out) {
    out.write(“&lt;div class=’entity’&gt;”);
    …
    out.write(“&lt;/div>”);
}

在 JSP 中,这个调用看起来像:

<mylib:entitytag param1=’someString’ param2=’someEntity’ />;

在服务方法中:

MylibClass.entitytag(param1, param2, out);

所以,我的问题是下一个:有什么方法可以优雅地制作这种技巧吗?也许使用第三方库?

4

2 回答 2

0

我不认为解决方案是在 java 中做 html。

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

于 2013-03-27T16:18:29.053 回答
0

当第一次查看 jsp 时,它会变成一个 java 类并编译——包括任何包含和/或导入,所有这些都变成一个类。

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

如果您使用的是 tomcat,请深入到 tomcat/work 目录以查看您精心编写的 jsps 的变化。

于 2013-03-27T18:36:10.863 回答