jspは現在のosgi Webアーカイブバンドル以外のクラスでは動作しないことを誰もが知っています。これはGFのバグです。このバグを回避するためのglassfishの開発者https://java.net/jira/browse/GLASSFISH-11208は、オフラインjspコンパイラを使用することを提案しています(展開時ではなくアーカイブ構築時にjspファイルをコンパイルする)。 OK、私はwab構築中にjspをコンパイルするためにjspc-maven-pluginを使用しました。Glassfish 4.1.1およびオフラインJSPコンパイラ(JSPおよびOSGI)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<version>1.4.6</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<id>compile</id>
</execution>
</executions>
<configuration>
</configuration>
</plugin>
jspがコンパイルされ、ビルドされたWebアーカイブにそのクラスが表示されます。
問題があります。グラスフィッシュに私のコンパイル済みJSPを使用させることはできますが、コンパイルすることはできません。 GFはコンパイルされた.classesを無視して.javasを生成し、コンパイルします。
EDIT私が今までに作るもの1: 1)私は)
<jsp-config>
<property name="usePrecompiled" value="true"/>
<!-- to see it doesn't generate .javas -->
<property name="keepgenerated" value="true" />
</jsp-config>
2-web.xmlのをGlassFishのに加えて、私は私のWABアーカイブを構築するとき、私は、しかしWEB-INF/classes/jsp/...
でJSPのクラスを持っていますjspファイルが見つからないという例外が出ます。私はWEB-INF/classes/org/apache/jsp...
にJSPのクラスを移動manually
とき、私は、コンテナは今、これらのクラスを見ていることがわかりますが、私は
StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.lang.NoClassDefFoundError: org/apache/jsp/... (wrong name: jsp/...)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2370)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2154)
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1542)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1925)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:978)
at org.glassfish.osgijavaeebase.BundleClassLoader.loadClass(BundleClassLoader.java:79)
at org.glassfish.osgiweb.OSGiWebDeploymentContext$WABClassLoader.loadClass(OSGiWebDeploymentContext.java:169)
at org.glassfish.osgiweb.OSGiWebDeploymentContext$WABClassLoader.loadClass(OSGiWebDeploymentContext.java:154)
at org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:654)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:202)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:695)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:626)
を取得するので、これは正しい道を知っている - ORG/apacheの/ JSP。問題は、この方向に出力するためのプラグインを作成する方法です。しかし、これが最後のポイントですが、結果ではない
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<version>1.4.6</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<id>compile</id>
<configuration>
<packageName>org.apache.jsp</packageName>
</configuration>
</execution>
</executions>
<configuration>
</configuration>
</plugin>
から2
EDITは、だから私はこのMavenプラグインの設定を発見しました。私も例外はありませんが、返されたhttpリクエストは空です(ブラウザの空白ページ)。他のMavenプラグインを使うはずですが、どちらを使うべきですか?
明確にするには、WARアプリケーションではなくWABアプリケーションを構築していることは間違いありません。 –
@ Steve C私の編集をご覧ください。 –
GlassFishをコンテナとして使用することに縛られていない場合、Apache Karafは純粋なOSGiコンテナとして代替を提供します。また、Pax-Webと一緒にJSPをサポートします。 –