Jetty 9(emedded)运行时的JSP编译

时间:2016-07-03 14:20:57

标签: jsp jetty embedded-jetty

将基于Jetty 6的应用程序迁移到9.2(嵌入式)。

我无法弄清楚JSP在运行时是如何编译的(没有预编译)。当我使用JDK时,我的应用程序运行正常。但它在JRE中运行时无法提供JSP,我得到的错误是:

org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac.  A full JDK (not just JRE) is required
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:119)
    at org.apache.jasper.compiler.Jsr199JavaCompiler.compile(Jsr199JavaCompiler.java:208)
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:384)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453)

这清楚地表明Jetty正在寻找JRE中显然不存在的Java编译器。看看Jetty 9.2文档,我读到了:

By default, the Apache JSP container will look for the Eclipse Java Compiler (jdt).

我在类路径中有 jetty-jsp-jdt-2.3.3.jar 但由于某种原因,Jetty似乎忽略了它。

所以,我的问题是 - 如何在没有JSP预编译的情况下设置嵌入式Jetty,并且能够在JRE中运行。这基本上是我在Jetty 6中的应用程序通过内置的jasper编译器进行的操作。甚至可以使用Jetty 9.2吗?

1 个答案:

答案 0 :(得分:0)

实际上我只是通过以下方式找到了解决方案:

System.setProperty("org.apache.jasper.compiler.disablejsr199", "true"); 

这使得嵌入式Jetty 9.2的应用程序在JRE中运行愉快。 请参阅this以获取参考。