我正在使用 JSP 开发一个高负载项目,其中包含大量页面上的其他资源(jsp、jspf)。
众所周知,在 JSP 中使用 include 有两种方式:静态 - <%@include %>和动态 - <jsp:include />(或 JSTL 等效的 <c:import />)。
但他们都有缺点。
例如,静态导入可能会导致主页面中的变量名发生冲突。动态导入性能较差。
我想使用一些不是服务方法开销的东西,同时独立于其余代码。
在最狭窄的地方,我们不得不将 html-code 放在 java-code 中:
public String getHtml() {
return “<div class=’entity’>” + … + “</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’>…</div>
</tagbody>
</entitytag>
这将被翻译成:
static public void entitytag(String param1, Entity param2, JSPWriter out) {
out.write(“<div class=’entity’>”);
…
out.write(“</div>”);
}
在 JSP 中,这个调用看起来像:
<mylib:entitytag param1=’someString’ param2=’someEntity’ />;
在服务方法中:
MylibClass.entitytag(param1, param2, out);
所以,我的问题是下一个:有什么方法可以优雅地制作这种技巧吗?也许使用第三方库?