JavaScriptとJSFを使用してWebサイトでFBログイン用のアプリケーションを開発しています。 こちら にコードを投稿しました。問題は、アプリケーションを実行するとJSFページが表示されず、代わりに次の例外がスローされることです。
Nov 28, 2013 7:21:46 PM org.Apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FacebookLogin] threw exception [javax/servlet/jsp/jstl/core/Config] with root cause
Java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
at com.Sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.Java:344)
at com.Sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.Java:153)
at com.Sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.Java:99)
at com.Sun.faces.lifecycle.Phase.doPhase(Phase.Java:101)
at com.Sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.Java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.Java:594)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:305)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:210)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:222)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:123)
at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:472)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:99)
at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:953)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:408)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1023)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:589)
at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:310)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at Java.lang.Thread.run(Unknown Source)
ここでの問題は何ですか?どのように解決できますか?
Java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/Config
パッケージ名が示唆するように、言及されたクラスは [〜#〜] jstl [〜#〜] の一部です。例外は、言及されたクラスのクラス定義ファイルがランタイムクラスパスで見つからないことを明確に伝えています。つまりConfig.class
ファイル、または少なくともそのクラスを含むJARファイルが、webappの実行時クラスパスにありません。
[〜#〜] jstl [〜#〜] は通常、完全な機能を備えたボックスによってすでに提供されていますJava TomEE などのEEコンテナ=、 JBoss AS / [〜#〜] eap [〜#〜] / WildFly 、 Payara /- GlassFish 、 WebLogic など、ただし Tomcat や Jetty などのベアボーンJSP /サーブレットコンテナでは使用できません。 JSFの場合とまったく同じように、Webアプリケーションと一緒にJSTLを自分で提供する必要があります(これは、完全なJava EEコンテナによってすでにボックスから提供されています)。
Faceletsには <c:xxx>
タグ がJSTL実装JARファイルへの依存関係を持っているため、この例外が発生しています。JSTCに同梱されていないTomcatを使用しています。 JSTLは、フレーバー jstl-1.2.jar で利用できる個別のライブラリとして提供されます。これをダウンロードして、Webアプリケーションの/WEB-INF/lib
フォルダーに、すでにそこに配置したJSF JARファイルと一緒にドロップすると、この例外は消えます。 Mavenユーザーは、以下の依存関係を追加して(そして完全な再ビルド/再デプロイを実行して)、これを実現できます。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
または、Tomcatを実際のJava EEコンテナに置き換えます。
誰かがjboss-eap-6.4.0.GAのspringframework-4.0.7-RELEASEモジュールを作成しようとしてこのエラーが発生した場合、私は寄稿を追加したいだけです。ぼくの module.xml
には以下が含まれます:
<dependencies>
...
<!-- Contains javax.servlet.jsp.jstl.core.Config -->
<module name="javax.servlet.jstl.api"/>
...
</dependencies>