問題の1説明
add()メソッドで設定アクションは仕方struts.xmlワイルドカードを使用してコールにアクセスする にhttp:// localhost:8080 / Struts2Demo / helloworld_add.actionの時間を、おなじみのエラーが発生しました:
HTTPステータス404 - 見つかりませんでした
タイプ ステータスレポート
メッセージは、 名前空間のマッピングされた何のアクションがありません[/]とアクション名[helloworld_add]コンテキストパスに関連付けられている[/ Struts2Demo]。
説明 オリジンサーバは、ターゲット・リソースの現在の表現が見つからないか、それが存在することを開示して喜んではありませんでした。
Apache Tomcatの/ 8.5.35
2、関連するコード
struts.xml関連するコード部分
< パッケージ名= "デフォルト" 名前空間は= "/"が延び= "ストラットデフォルト" >
< アクション名= "helloworld_ *" 方法= "{1}" クラス= "com.icheny.action.HelloWorldAction" >
< 結果> /result.jsp </ 結果>
< 結果名= "追加" > /{1}.jsp </ 結果>
< 結果名= "更新"を> /{1}.jsp </ 結果>
</ アクション>
</ パッケージ>
HelloWorldAction.java関連するコード部分
公共の文字列の追加()
{
リターン「追加」;
}
パブリック文字列の更新()
{
リターン「更新」;
}
3つの理由
次のレベルへの安全性のStruts2の2.5バージョン、ワイルドカードの使用を禁止するので、すべての無担保アクセスはstruts.xmlで宣言することができるようにする必要があります。したがって、私は2.5.16ストラットのバージョン、およびこの間違いの出現を使用しています。
4.ソリューション
パッケージに属性を追加します。厳格な法-呼び出し=「false」に
の変更後のコードのstruts.xmlパッケージ部分:
< パッケージ名=「デフォルト」の名前空間=「/」延び=「ストラットデフォルト」厳密・メソッド呼び出し=「偽」> < アクション名=「helloworld_ *」方法=「{1}」クラス= "com.icheny .action.HelloWorldAction」> < 結果> /result.jsp </ 結果> < 結果名= "追加" > /{1}.jsp </ 結果> < 結果名= "更新"> /{1}.jsp </ 結果> </ アクション> </ パッケージ>
別の訪問にhttp:// localhost:8080 / Struts2Demo / helloworld_add.action、通常のジャンプ: