我正在使用包含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如何編譯JSP?
Jetty服務器在MyServer.java的主要方法內部啓動。它創建一個WebAppContext並調用WebAppContext.setWar($ webAppRoot),其中$ webAppRoot是一個通常WEB-INF結構下的目錄的完整路徑。
所有的應用程序類和相關的JAR都在調用MyServer.main的類路徑中指定,WEB-INF/lib中沒有JAR,WEB-INF/class中沒有類(是的,我知道這很糟糕) 。 html,javascript,css和JSP文件存在於$ webAppRoot中。
Jetty doc支持JSP2.1支持表示ant-1.6.5是必需的依賴項。這個項目不包括ant,但是當你點擊它們時,JSP將被編譯並工作。
當我將應用程序類文件移動到WEB-INF/classes和它們的依賴JAR到WEB-INF/lib中時Jetty拋出了一個類未找到的錯誤,表示無法找到與ANT相關的類,當我點擊其中一個JSP頁面。爲什麼在原始配置中沒有ANT的情況下編譯JSP,但是當我將東西移動到WEB-INF ANT時變成必需的?
我的猜測是那些JSP jars來自Jetty-6.1.9發行版,因爲我剛下載它並在lib/jsp-2.1目錄中找到它們。 – NBW 2013-03-11 14:00:19
我用-verbose:class運行了一些東西,並注意到當配置中的東西觸發ANT依賴時,Jasper類(JspServletWrapper,JspCompilationContext,JasperLoader,Compiler)從jsp-2.1.jar中調用。最終,來自Jasper命名空間的「AntJavaCompiler」被調用。這觸發了對ANT的依賴。 – NBW 2013-03-11 14:27:22
好吧,那是在glassfish將JSP impl移出到jsp.java.net之前,我認爲我們正在將它從svn repo中取出並修補它,然後釋放這些jar。然後,支持其他編譯器的舉措將在過去的5年內完成,所以,看起來你現在可能被螞蟻困住了。如果可以的話,我仍然會進行預編譯,並在部署之前清除任何問題。 – 2013-03-11 14:42:22