web-dev-qa-db-ja.com

java.lang.ClassNotFoundException:org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter in web.xml

これは私の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>
7
kavie

struts2バージョン2.5を使用している場合は、org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterからorg.Apache.struts2に変更する必要があります.dispatcher.filter.StrutsPrepareAndExecuteFilter

バージョンノート2.5

37

私も同じ問題に直面していました。誰もがjarのバージョンが間違っていただと示唆していましたが、問題が異なっていました

プロジェクトに必要なjarを追加していましたが、機能しませんでした。

そのため、プロジェクトからjarを削除し、それらのjarをmy Tomcat server libフォルダーに追加しました。

1

ソリューションは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

0
david

他の解決策、残りの回答がうまくいかない場合

正しいパッケージパス(.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のクラスローダー構成

0
Kail Alexander

プロジェクトのデプロイにstruts2ライブラリが含まれていることを確認してください。 struts2ライブラリをWEB-INFファイルの下に追加します。次に、それをビルドパスに追加します。

0
richard gong

私の場合、公式ページの元のStrutsガイドに従って、「org.Apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter」で2.3.3を使用していましたが、バージョンを2.5に変更しただけで動作しました

0
David

Struts 2.5以降、StrutsPrepareAndExecuteFilterはorg.Apache.struts2.dispatcher.filterパッケージ(パッケージに「ng」なし)に移動されました。

0
Joe Aldrich

これは、正しいバージョンのstruts2-core.jarがlibパス上にないために発生します。 libディレクトリを確認し、struts2-core.jarのバージョンが正しいことを確認してください。

Jarがlibフォルダーにある場合、コードをアプリケーションコンテナーにデプロイするときに、正しいプロジェクトライブラリが含まれていることを確認する必要があります。デプロイ時にStruts 2プロジェクトライブラリファイルが含まれていない場合、このエラーも発生します。

0
meoww-