これは私のweb.xmlコードです。実行中に次のようなエラーが発生します。これを解決するにはどうすればよいですか?
"重大:例外開始フィルターStruts Java.lang.ClassNotFoundException:org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter"
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>HelloStruts</display-name>
<filter>
<filter-name>Struts</filter-name>
<filter-class>org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts2バージョン2.5を使用している場合は、org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterからorg.Apache.struts2に変更する必要があります.dispatcher.filter.StrutsPrepareAndExecuteFilter
私も同じ問題に直面していました。誰もがjarのバージョンが間違っていただと示唆していましたが、問題が異なっていました。
プロジェクトに必要なjarを追加していましたが、機能しませんでした。
そのため、プロジェクトからjarを削除し、それらのjarをmy Tomcat server libフォルダーに追加しました。
ソリューションはpom.xmlにあります。
<dependencies>
<dependency>
<groupId>org.Apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.1.2</version>
</dependency>
</dependencies>
<packaging>war</packaging>
<build>
<finalName>struts-2.3-hello-world-example</finalName>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>web\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
このビデオでこれを見ることができます。 https://www.youtube.com/watch?v=q4IhM4GBhF8
他の解決策、残りの回答がうまくいかない場合
正しいパッケージパス(.ng ..なし)を入力しても、次のようになります。
Java.lang.ClassNotFoundException: org.Apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
私は同じ問題を抱えていましたが、正しいパスを使用して同じエラーが発生したため、このソリューションは機能しませんが、その理由は、クラスローダーがクラスをロードする方法です。
解決策は、WASに設定することです「最初にローカルクラスローダーでロードされたクラス(親は最後)」
これをする:
- WebSphereエンタープライズアプリケーションをクリックします。
- エンタープライズアプリケーションを選択してください
- 「モジュールの管理」をクリックします。
- モジュールをクリックします。
- 「クラスローダーの順序」ドロップダウンリストから「ローカルクラスローダーを最初にロードしたクラス(親は最後)」を選択します。
- OKをクリックします。
- 保存をクリックします。
- websphereサーバー(私の場合は仮想サーバー)を再起動します。
これがあなたにとってうまくいくなら、これを行う最良の方法は、EARプロジェクトにdeployment.xmlを設定することです。そのため、将来のデプロイメントでは、これは自動で設定されます。
<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment
xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:appdeployment="
http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi">
<deployedObject xmi:type="appdeployment:ApplicationDeployment"
startingWeight="10">
<modules
xmi:type="appdeployment:WebModuleDeployment"
startingWeight="10000"
uri="<your war name>"
classloaderMode="PARENT_LAST" />
<classloader mode="PARENT_LAST" />
</deployedObject>
</appdeployment:Deployment>
私はここで解決策を見つけました:解決策-WASのクラスローダー構成
プロジェクトのデプロイにstruts2ライブラリが含まれていることを確認してください。 struts2ライブラリをWEB-INFファイルの下に追加します。次に、それをビルドパスに追加します。
私の場合、公式ページの元のStrutsガイドに従って、「org.Apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter」で2.3.3を使用していましたが、バージョンを2.5に変更しただけで動作しました
Struts 2.5以降、StrutsPrepareAndExecuteFilterはorg.Apache.struts2.dispatcher.filterパッケージ(パッケージに「ng」なし)に移動されました。
これは、正しいバージョンのstruts2-core.jar
がlibパス上にないために発生します。 libディレクトリを確認し、struts2-core.jar
のバージョンが正しいことを確認してください。
Jarがlibフォルダーにある場合、コードをアプリケーションコンテナーにデプロイするときに、正しいプロジェクトライブラリが含まれていることを確認する必要があります。デプロイ時にStruts 2プロジェクトライブラリファイルが含まれていない場合、このエラーも発生します。