将基于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吗?
答案 0 :(得分:0)
实际上我只是通过以下方式找到了解决方案:
System.setProperty("org.apache.jasper.compiler.disablejsr199", "true");
这使得嵌入式Jetty 9.2的应用程序在JRE中运行愉快。 请参阅this以获取参考。