Jetty如何编译JSP?

时间:2013-03-07 22:05:31

标签: jsp configuration jetty

我正在使用包含jetty-6.1.9.jar,jsp-2.1.jar,jsp-api-2.1.jar,servlet-api-2.5-6.1.9.jar的遗留项目,并在JRE下运行1.7.0_03。

Jetty服务器在MyServer.java的main方法中启动。它创建一个WebAppContext并调用WebAppContext.setWar($ webAppRoot),其中$ webAppRoot是一个目录的完整路径,在该目录下是通常的WEB-INF结构。

所有app类和依赖JAR都在调用MyServer.main的类路径上指定,WEB-INF / lib中没有JAR,WEB-INF / class中没有类(是的,我知道它搞砸了)。 html,javascript,css和JSP文件位于$ webAppRoot中。

关于JSP2.1支持的Jetty文档表明ant-1.6.5是必需的依赖项。这个项目不包括ant,但JSP会被编译并在你点击它们时工作。

当我将应用程序类文件移动到WEB-INF / classes并将其依赖的JAR移动到WEB-INF / lib时Jetty会抛出一个未找到类的错误,说当我点击其中一个JSP时它无法找到ANT相关的类。为什么在原始配置中没有ANT的情况下编译JSP,但是当我将内容移入WEB-INF时,ANT变得必需?

1 个答案:

答案 0 :(得分:1)

你在哪里获得那些jsp罐子?

JSP是一种疯狂的技术,它有更多的叉子然后是厨房抽屉......我最近提倡我们分叉它,因为我们消耗的那个似乎死了(jsp.java.net上的那个)我们需要一条合理的道路来获取将IP接受的jsp更新为jetty。无论如何,我离题了,目前使用我们在jetty 7,8和9中的jsp版本,默认行为是使用系统编译器,如果设置了某个属性(org.apache.jasper.compiler.disablejsr199 = true)那么它而是寻找我们当前分发的eclipse编译器或者之后的ant。所以......这种行为完全取决于你正在使用的jsp实现。如果你的类路径中没有ant并且正在编译jsps,那么它很可能是由系统编译器完成的。否则,寻找一个包含eclipse java编译器的ejc jar文件,它也可以利用那个。

另外,我知道您正在使用遗留项目,但真正建议更新到更新且支持的jetty版本。并且除非在6.1.9和最后一次维护版本之间修复很多东西,否则建议更新到jetty 6.1.26。除此之外,如果您遇到jsp问题,那么从6.1.26发行版更新jsp jar可能有助于对其进行排序。您可能只需要破解那些jsp jar的源代码(我认为它们位于maven central的org / mortbay / jetty下)。

最后,自从我接触jetty 6以来已经过了几年,或许你需要将ant放入webapp类加载器中,之前因为它在系统类加载器中而有效吗?如果它在$ jetty.home / lib下,那么webapp上下文可能被配置为在webapp类加载器中使用父优先级并从那里拉出ant?

[编辑]我注意到6.1.9有一个maven-jetty-jspc-plugin,所以你可能只需预先编译你的jsps并完成它。 (http://repo2.maven.org/maven2/org/mortbay/jetty/maven-jetty-jspc-plugin/

相关问题