ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

struts2のstruts.xmlを書かない方式で「はまった」こと・・・あれこれ

2013-10-17 09:04:52 | JavaとWeb
ゼロコンフィグレーションって言うんでしょうか・・・
struts2のstruts.xmlを書かない方式で、はまったことあれこれ




■一般的には、こうしろ!と書いてある

やることは、4つ

1.サーバー側のstruts2から呼び出されるものを
  ~Action(~の1文字目は大文字)にして、

2.アノテーションとして、executeのところに、
   @Action("~" ) 
 (~の1文字目、大文字を小文字に変える)

3.一番上に、

@Results({
@Result(name="success", location="/index.jsp")
})

のようにResultで、returnしたときの行き先を書く

4.web.xmlのフィルターのところ
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>struts2.s2down</param-value>
</init-param>
</filter>

 のように、init-paramを指定せよ
(< >は、本当は半角。ただ、これをコピペしないように。理由は後述)


●そうすれば、
http://localhost:8080/アプリ名/~.action
(~の1文字目は小文字)でアクセスすると,Acion実行後、Resultで指定したJSPが動くはず!

※くわしくは、ここ

@いう間にWebアプリを作れる「Struts 2」入門
http://www.atmarkit.co.jp/fjava/special/struts2/struts2_1.html

注意:このソースをダウンロードして実行しようとしても、
   ライブラリが無いので動かない。
   そこで、最新のライブラリを入れても・・・動かない。後述




■はまった点1:eclipseで、アノテーションのところのエラーが消えない

・現象
  コレを行うためには、
    @Results
    @Action
  のアノテーションの指定が必要だが、ここでエラーになる

・理由
 struts2-convention-plugin-2.3.15.1.jar を見ていなかった。

・対応
(1)struts2-convention-plugin-2.3.15.1.jarを、javaのクラスパスに足す
  (WEB-INFのlibにも入れておくこと)

(2)ソースファイルで
   import org.apache.struts2.convention.annotation.*;
  を入れる




■はまった点2:500エラー、ぬるぽで落ちる

・現象

struts2.3いくつかをいれ、上記サイトからサンプルを落としてきて
実行すると、

HTTPステータス 500 -

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

java.lang.NullPointerException
org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)


・理由
 最新のものは、フィルターが変わっている。

・対策

web.xmlを開くと、
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
となっている。

このフィルタークラスを
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

に変える




■はまった点3:見えない(404エラー)

・現象

上記のようにフィルタークラスを変えると、今度は

HTTPステータス 404 - There is no Action mapped for namespace [/] and action name [index] associated with context path

・理由
 どうやら、param-valueに指定する値、すなわち、パッケージは、1単語ではだめで、
  ○○○.XXXのように、.がはいるものでないといけないようだ。


・対策
(1)param-valueをstruts2.s2downのように、○○○.XXXの形にする
(2)ということは、プログラムのパッケージもstruts2.s2downのように
   ○○○フォルダの下にXXXがあるようにして、そこにクラスファイルを置く
(3)ということは、ソースコードのpackageも修正する




■はまった点4:404エラー WEB-INF/content/を見に行こうとする

・現象
@Result(name="success", location="index.jsp")
と指定すると、
WEB-INF/content/index.jspを見に行こうとする。
(そこにファイルを作ると、うまく表示される)

・理由
 相対パスになっている。

・対策
 ゼッタイパス指定する
@Result(name="success", location="/index.jsp")
と、index.jspの前に/をつけると、サーブレットのフォルダの下のindex.jspを
見に行く。




■このほか

うちは、はまらなかったけど・・・

AbcEfgActionのように、大文字が2回出る場合、問題があるらしい。


Struts2のアクション名指定ではまった話
http://scarmitt.sakura.ne.jp/programs/struts2_no_action_mapped.html
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« iPhone5sでブルースクリーン... | トップ | ブラウザ上に、いろんな複雑... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事