プロが教えるわが家の防犯対策術!

以下のサイトを参考に環境構築を行い、
サンプルプログラムを実行しようとしています。、
http://www.atmarkit.co.jp/fjava/special/struts2/ …
(サンプルファイルは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になります。

何かアドバイスをいただけたらと思います。
よろしくお願いいたします。

A 回答 (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.h …

他にもjumpActionクラス:@Resultは@Results{}の中になければコンパイルエラーです。
index.jspの1行目:pageEncodingの左に半角スペースがありませんので追加します。

これでひとまず画面が出る所まではできるかと存じます。

以上です。

この回答への補足

お早いご回答とご丁寧な説明感謝致します。

修正して実行してみたところ下記エラーが出ました。
既に操作[ビルドパスの構成]→[外部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]

補足日時:2013/01/04 01:38
    • good
    • 0
この回答へのお礼

あのあと少し作業してみると'lib'フォルダへ
必要であるjarの追加が抜け漏れていたことがわかりました。
実行したところ、おかげさまで画面が表示されました。
画面が表示されましたが今のところボタンをクリックしてもほかのjspへ
ジャンプできない状態です。
もう少し作業してみてどうしてもダメなようであれば
また質問を行おうと思います。
ご協力くださりありがとうございました。

お礼日時:2013/01/04 03:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!