2

MyEclipseIDE内でStruts2フレームワークを使用してTomcatサーバーを使用しているときに、問題が繰り返し発生します。プログラムをサーバーアプリケーションとして実行しています。実行すると、デフォルトのindex.jspファイルが正常に開きますが、アプリケーションの他の過去のファイルは機能しません。.doページのいずれかを読み込もうとすると、次のエラーが発生します。HTTPステータス404:要求されたリソース....は利用できません。以前にこのエラーが発生したときは、サーバーを再起動しただけで問題はありませんでしたが、今は同じ運がありません。

これが、実行を押したときのコンソールからのログです。

Apr 12, 2012 10:49:35 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;C:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201109141806\tomcat\bin
Apr 12, 2012 10:49:35 AM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Apr 12, 2012 10:49:35 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 285 ms
Apr 12, 2012 10:49:35 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Apr 12, 2012 10:49:35 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13
Apr 12, 2012 10:49:35 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Documents and Settings\username\My Documents\Workspaces\.metadata\.me_tcat\webapps\project-name\WEB-INF\lib\javax.servlet-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider).
log4j:WARN Please initialize the log4j system properly.
Apr 12, 2012 10:49:37 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Apr 12, 2012 10:49:37 AM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Apr 12, 2012 10:49:37 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16  config=null
Apr 12, 2012 10:49:37 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1720 ms

助言がありますか?

4

1 に答える 1

2

クラスパスに追加する理由がわかりませんjavax.servlet-3.0.1.jar.Eclipseを使用してアプリケーションをビルド/実行しているため、Tomcatまたは任意のサーバーをランタイムenvとしてプロジェクトに追加すると、これらのlib依存関係が自動的に追加されますclass-path.Simple にこの jar をプロジェクトの lib フォルダーから削除します。これには他の理由も考えられます。

  1. javax.servlet-3.0.1.jar がランタイム ライブラリとして (.WAR に) 追加されました。ビルド時にのみ必要でした。
  2. WEB-INF/lib から jar を削除し、ビルド スクリプトを更新して新しい場所を指すようにします。

参照されている Servlet Spec 2.3 のセクション 9.7.2 は、Servlet Container (Tomcat など) が J2EE 仕様の実装クラスを提供すると述べています。WEB-INF/lib ディレクトリの j2ee.jar (私たちの場合は servlet-api.jar?) は、同じ情報を提供しようとしています。アプリケーション固有の実装を持つことは、安定性とセキュリティの問題であり、仕様 2.3 と Tomcat では許可されていません。

つまり、lib フォルダーから javax.servlet-3.0.1.jar を削除し、コンテナーがこれらの依存関係を提供するようにします。

maven を使用してコンテナによって提供される依存関係を宣言するには、スコープを「provided」に設定します。これは、pom.xml のエントリがどのように見えるかの例です。

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
于 2012-04-12T18:15:06.147 に答える