Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以从Java内部使用JSP模板吗?_Java_Jsp - Fatal编程技术网

可以从Java内部使用JSP模板吗?

可以从Java内部使用JSP模板吗?,java,jsp,Java,Jsp,我对JSP相当陌生。到目前为止,处理流程似乎非常复杂,Java首先运行,然后填充JSP模板 我想知道是否有一种从Java内部使用JSP模板的方法。我的意思是,假设我在类路径上有一个简单的“SimpleDiv.jsp”模板,如下所示: <div id="${id}" class="${class}"> ${content} </div> private String getDivHtml( id, html ) { Template simpleDiv =

我对JSP相当陌生。到目前为止,处理流程似乎非常复杂,Java首先运行,然后填充JSP模板

我想知道是否有一种从Java内部使用JSP模板的方法。我的意思是,假设我在类路径上有一个简单的“SimpleDiv.jsp”模板,如下所示:

<div id="${id}" class="${class}">
    ${content}
</div>
private String getDivHtml( id, html ) {
    Template simpleDiv = TemplateLoader.load("SimpleDiv.jsp");
    simpleDiv.set("id", id);
    simpleDiv.set("class", Whatever.CLASS_NAME);
    simpleDiv.set("content", html);

    return simpleDiv.toString();
}

这是一个非常简单的例子,所以不要纠缠于细节。主要的问题是——我能用Java拉入一个JSP模板并使其内联生成HTML吗?

Freemarker和Velocity是从模板生成内容的常用工具,您可以尝试其中一种。由于JSP是作为servlet实现的(JSP规范将它们定义为webcomponents),它们被绑定到servlet容器。

JSP是一个内部servelt,一个java类,通常在完成执行时输出HTML


也许您应该将jsp文件视为一个纯字符串,“simpeDiv.set”方法只是执行替换工作:将${key}替换为${value}

使用普通jsp无法实现这一点。网站上有相关的Q/A解释如何做到这一点:

使用普通JSP的另一个选项是使用外部框架来完成任务,如ApacheTiles和SiteMesh(这里提到:)


如果可以,请升级到。这项技术已经提供了内置的模板系统,如前所述。

考虑一下JSP的子集,它不依赖于servlet:


我不确定JSP是否不可行,但我肯定认为其他模板工具(如Freemarker或Velocity)更适合于此。为此,我会使用Freemarker或Velocity等模板引擎。是一个很好的模板库,从简单到完整的语法。模板语言和功能与JSP有多相似?如果语法尽可能相似就好了(即使它们缺少taglibs等功能)@Joe:这取决于你想要什么,引用bean非常接近,控件结构有不同的语法。请看Velocity和FreeMarker(与JSP)有很大不同——它们不使用XML标记。但根据我的经验,这是一件好事;标记更易于识别和编辑。最有价值的IDE/编辑器也将语法突出显示它们。在这两个库中都没有假设生成的输出将a)发送到web客户端(即从servlet容器发送回来),或b)实际输出HTML或XML。两者都不支持taglib(来自内存),但它们确实支持其他方法(更好的方法,IMHO)来创建可重用的内容“标记”。@Paul我想要相似性的原因是,我们仍然会使用真正的JSP模板。因此,附加的模板语言应该非常相似(因此人们可以假装相同)或非常不同(因此人们不会错误地认为它是相同的)。否则这就是不可思议的山谷问题@Jung.j.yu-与Nathan的评论一样,这是正确的答案!回顾这个项目,它自2005年以来就没有更新过。