gpt4 book ai didi

jsp - 如何在 ant 中使用 jasper2 预编译 .jspf 文件

转载 作者:行者123 更新时间:2023-11-28 21:47:24 25 4
gpt4 key购买 nike

.jspf 文件是“Java 服务器片段”——jsp 仅用于在其他 .jsp 文件中包含 ()。

预编译所有 .jsp 文件非常方便,因为它会在构建时而不是运行时暴露语法错误、缺少导入、Java 代码错误等。我们都曾遇到过 .jsp 中的拼写错误,直到我们查看页面时才显示出来。我正在将一个自动任务放入 ant 中以预编译我所有的 JSP 文件。 (参见 http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html#Web_Application_Compilation)。

Tomcat 的 jsp 编译器 jasper2 内置了一个假设,即所有 jsp 文件都具有 '.jsp' 文件扩展名。这与当前在适当时使用 .jspf 文件扩展名的建议背道而驰。

问题:如何编写将调用 jasper2(又名 jspC)预编译所有 .jsp 文件(包括 .jspf 文件)的 ant 任务?

最佳答案

-- 答案

(请参阅下面的讨论以更正与此相关的其他答案)

使用 ant 帮助程序任务构建 .jspf 文件的文本列表以进行编译并将其传递给 jspfiles 属性中的 jasper2 任务。如下:

<target name="precompilejsp">

<taskdef name="jasper2" classname="org.apache.jasper.JspC">
<classpath refid="compile.classpath"/>
</taskdef>

<!-- THIS is the guts of the solution -->
<!-- Jasper2 refuses to precompile .jspf unless we list them specifically. Boo hoo. -->
<fileset id="jspffiles" dir="${appdir.build}">
<include name="**/*.jspf"/>
<include name="**/*.jsp"/>
</fileset>

<!-- This turns the set into a textual comma-separated list -->
<pathconvert targetos="unix" pathsep="," property="app.jspflist" refid="jspffiles"/>
<!-- echo message="Jspf files are: ${app.jspflist}"/ -->

<!-- Do the precompilation by invoking Jasper2 -->
<jasper2
validateXml="false"
uriroot="${appdir.build}"
jspfiles="${app.jspflist}"
webXmlFragment="${precompile_tmp_dir}/generated_web.xml"
outputDir="${precompile_tmp_dir}">
</jasper2>

<!-- Now compile those .java sources to generate any error messages. -->
<mkdir dir="${precompile_tmp_dir}/WEB-INF/classes"/>
<javac srcdir="${precompile_tmp_dir}"
destdir="${precompile_tmp_dir}/WEB-INF/classes"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}"
includeantruntime="false">
<classpath refid="compile.classpath"/>
</javac>

</target>

--- 讨论

已在引用的 What is .jspf file extension? How to compile it? 中说明(以及网络上的其他地方).jspf 文件通常不会自行编译,并且它们是通过 <jsp:include> 以文本方式包含的来自其他文件的引用。这种说法和推理是错误的。 Tomcat Jasper .jsp 编译器实际上在 .jsp 和相关 .jspf 文件的正常显示时处理期间独立编译 .jspf。通过检查/usr/share/tomcat/work/Catalina/localhost/org/youdomain/yourpath/includefile_jspf.java 可以很容易地看到这一点。此 .java 文件是作为 .jspf 文件的独立代码生成的。底线是 <jsp:include>不像 C 的 #include() 那样工作,而是在运行时将 jspf 文件的输出包含在包含文件的输出中,而不是包含 像 C 那样将 jspf 文件放入 .jsp 文件的源代码中。

引用的答案中关于最终用户无法查看 WEB-INF/somejsp.jsp 文件的说法也是错误的。通常将所有 .jsp 文件放在 WEB-INF 中,并在 web.xml 或其他 servlet 请求转发机制中映射的 Servlet 代码网关中引用它们:

RequestDispatcher 调度程序 = servctxThis.getRequestDispatcher( "/WEB-INF/JSP/thewholepage.jsp");
dispatcher.forward(请求,响应);

因此,具体来说,/WEB-INF 中的 .jsp 文件不能被最终用户直接查看,但它们可以被任何 servlet 或其他 JSP 文件转发到,并且经常执行包含整个网络响应 -- <HTML> ... </HTML> . (另一方面,.jspf 通常包含 HTML 响应的片段或片段 --- 例如 <DIV>header-content</DIV>

关于jsp - 如何在 ant 中使用 jasper2 预编译 .jspf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com