- 締切済み
struts2環境構築で不具合が出てしまっています
以下のサイトを参考に環境構築を行い、 サンプルプログラムを実行しようとしています。、 http://www.atmarkit.co.jp/fjava/special/struts2/struts2_3.html (サンプルファイルは3pで落とすことができます。) 実行しようとすると下記エラーが出てしまい、解決ができない状況です。 ------------------------------------------------------------------------------- WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Test20130103' did not find a matching property. 1 03, 2013 5:38:36 午前 org.apache.catalina.core.StandardContext filterStart SEVERE: フィルタ struts2 の起動中の例外です java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:257) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:383) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:104) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) 1 03, 2013 5:38:36 午前 org.apache.catalina.core.StandardContext startInternal SEVERE: Error filterStart 1 03, 2013 5:38:36 午前 org.apache.catalina.core.StandardContext startInternal SEVERE: 以前のエラーのためにコンテキストの起動が失敗しました [/Test20130103] --------------------------------------------------------------------------------- java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher とあるため、 必要なjarファイルがライブラリに追加されていないだけだと最初は思っていたのですが、 追加してもうまく実行されないためどうも違うようです。 下記jarファイルを現在インストールしています。 commons-io-2.0.1.jar commons-fileupload-1.2.2.jar commons-lang-2.4.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.6.jar struts2-codebehind-plugin-2.3.8.jar struts2-convention-plugin-2.3.8.jar struts2-core-2.3.8.jar 使用している開発環境eclipseはver4.2.1になります。 何かアドバイスをいただけたらと思います。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- A-pZ
- ベストアンサー率100% (1/1)
お疲れさまです。 参照された記事はやや古いバージョンのStruts2のようですね(・ω・` サンプルプログラムはEclipseのWTPプラグインを利用して作成した"動的Webプロジェクト"のようですので、WEB-INF/libに、お使いのjarファイルを入れていれば動作環境は整います。 ただし、最新の2.3.8を使うとなると、サンプルコードに修正が必要です。 ◆フィルタを変更します。 サンプルにある org.apache.struts2.dispatcher.FilterDispatcherは現在、非推奨です。 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterをお使いください。 ◆Actionクラス @Results、@Resultアノテーションは、Struts2.1よりConventionプラグインへ移行しましたので、インポートするパッケージが異なります。 import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; ◇Result指定 @Resultで指定する属性も変更になりました。 @Result(name = "hello1", location = "index.jsp") このように、locationを使います。 また、type属性も、クラス名.classではなくなり、文字列(エイリアス)で指定します。 @Result(name = "hello2", location = "jump.jsp", type = "redirect"), @Result(name = "recipe", location = "jump!recipe", type = "redirectAction"), @Resultにつけるtype属性については、公式サイトの下記をご覧ください。 http://struts.apache.org/2.x/docs/result-types.html 他にもjumpActionクラス:@Resultは@Results{}の中になければコンパイルエラーです。 index.jspの1行目:pageEncodingの左に半角スペースがありませんので追加します。 これでひとまず画面が出る所まではできるかと存じます。 以上です。
お礼
あのあと少し作業してみると'lib'フォルダへ 必要であるjarの追加が抜け漏れていたことがわかりました。 実行したところ、おかげさまで画面が表示されました。 画面が表示されましたが今のところボタンをクリックしてもほかのjspへ ジャンプできない状態です。 もう少し作業してみてどうしてもダメなようであれば また質問を行おうと思います。 ご協力くださりありがとうございました。
補足
お早いご回答とご丁寧な説明感謝致します。 修正して実行してみたところ下記エラーが出ました。 既に操作[ビルドパスの構成]→[外部jarの追加]で xwork-core-2.3.8.jar は入れています。 どうしても解決できないためこちらも見てもらってよろしいでしょうか。 また、お手数かけますがもうひとつ質問があります。 上記の操作のようにjarを追加すると'Java Resources'配下の'ライブラリー'にjarが追加されていきます。 今回、A-pZ様のおっしゃるように'WEB-INF'配下の'lib'にも同じjarを追加しましたが、 双方何が違うのでしょうか。 どちらか一方にjarは追加すれば良いといったようなものではないのでしょうか。 以上、よろしくお願いいたします。 以下エラー一覧 -------------------------------------------------------------------------------------------------------------------------------------- 1 04, 2013 1:25:59 午前 org.apache.catalina.core.StandardContext filterStart SEVERE: フィルタ struts2 の起動中の例外です java.lang.NoClassDefFoundError: com/opensymphony/xwork2/config/ContainerProvider at org.apache.struts2.dispatcher.ng.InitOperations.createDispatcher(InitOperations.java:110) at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:73) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:278) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:259) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:383) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:104) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.ClassNotFoundException: com.opensymphony.xwork2.config.ContainerProvider at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) ... 21 more 1 04, 2013 1:25:59 午前 org.apache.catalina.core.StandardContext startInternal SEVERE: Error filterStart 1 04, 2013 1:25:59 午前 org.apache.catalina.core.StandardContext startInternal SEVERE: 以前のエラーのためにコンテキストの起動が失敗しました [/Test20130103]