Jetty:使用ant预编译JSP

时间:2013-04-08 06:26:43

标签: jsp ant jetty precompile

我正在尝试使用Jetty预编译我的JSP文件,因此我不必使用我的Jetty项目发送编译器。我正在使用Ant来实现这一点,但是出现了错误,我不知道如何解决它。

  

taglibs.jsp(4,62)PWC6188:绝对的uri:   无法在web.xml中解析http://java.sun.com/jsp/jstl/core   或者使用此应用程序部署的jar文件

我正在使用另一个StackOverflow问题中提到的以下ant脚本: precompile jsps into classes for Jetty8 using ant

<property name="jetty.home" value="C:/jetty-distribution-8.1.8.v20121106" />     
<path id="compile.jspc">
     <fileset dir="${jetty.home}">
          <include name="lib/servlet-api-*.jar" />
          <include name="lib/jsp/*.jar" />
     </fileset>
</path>
<target name="jspc" depends="compile">
    <taskdef classname="org.apache.jasper.JspC" name="jasper2" classpathref="compile.jspc" />
    <jasper2 validateXml="false"
        uriroot="WebContent"
        addWebXmlMappings="true"
        webXmlFragment="WebContent/WEB-INF/generated_web.xml"
        compilerSourceVM="1.6"
        compilerTargetVM="1.6"
        outputDir="build/gen-src"
        verbose="9" />
</target>

可能出现什么问题并触发此错误?双重检查了类路径,并加载了所有必要的.jar文件。与其他论坛帖子中提到的JSTL版本无关。

最诚挚的问候, user2255297

更新:Taglibs.jsp的内容

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>
<%@ taglib prefix="stripesDynamic" uri="http://stripes.sourceforge.net/stripes-dynattr.tld" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%-- Short hand for the context root. --%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>

2 个答案:

答案 0 :(得分:1)

此错误的最常见原因是Web容器与您的Web应用程序WEB-INF/lib之间存在冲突的jar。

Jetty与您的项目之间的版本不匹配是此错误的最常见原因。

使用Jetty 8.x,您使用的是Servlet API 3.0。

请确保您在WEB-INF/lib

中使用以下版本
  • JSTL 1.2
  • EL 2.2
  • JSP 2.2
  • Servlet API 3.0

答案 1 :(得分:0)

无法与ANT和TagLibs一起预编译JSP文件。 我决定从ANT迁移到MAVEN,并且能够在maven-jetty-jspc-plugin的帮助下成功预编译文件 也可以在maven中运行部分ANT脚本。