struts 2での転送とリダイレクトの詳細
15889 ワード
Struts 2のResultTypeとAction処理チェーンStruts 2の結果タイプstruts-default.xmlには、struts 2に内蔵されている利用可能なすべてのStruts 2結果処理クラスが直接または間接的に実装されることを定義しますcom.opensymphony.xwork 2.Resultインタフェースはstruts-default.xmlの中にあります.Deprecated name form scheduled for removal in Struts 2.1.0.The camelCase versions are preferred.は、次の2つの結果タイプを使用することをお勧めしません.Struts-2.1.0では削除されます.Javaネーミングルール、すなわちラクダネーミングルール、さらにStruts 2にはいくつかのプラグインがあります.これらのプラグインは、他の結果タイプもサポートしています.ここでは、しばらくは関連しません.
結果タイプがinputのページの役割Struts 2アプリケーション実行中にaddFieldError()に情報があるか、タイプ変換に失敗したか、入力チェックに失敗したかなどを発見した場合、自動的にnameがinputのページにジャンプし、INPUTに対応するページに移動しますJSPページ面のフォームが通常で作成され、エラーが発生してページに戻ると、元データが消失するJSPページでフォームが作成され、エラーが発生してそのページに戻った場合でも、元データにはname値がinputでない場合、エラーが発生した場合、ブラウザに直接404エラーを提示する
結果タイプのhttpheader httpheader結果タイプはあまり使われず、実際にはHTTP応答のヘッダ情報を返します.単純な設定/result.jspであれば、実行時にコンソールから次のエラーが表示されますCaught OgnlException while setting property‘status’on type‘org.apache.struts 2.dispatcher.HttpHeaderResult’.java.lang.NoSuchMethodException:setStatus(java.lang.String)翻訳:アプリケーションはstatusの属性を設定するときにOgnlException異常をキャプチャしてHttpHeaderResultクラスソースコードを表示します.それはやはりprivate int status=-1を定義しています.それはステータスコードを表しています.一般的なステータスコードは以下の200対応OK 404対応File Not Foundまたはrequested resource()is not available 500対応サーバ内部エラーです.この場合、私たちは404に変更します.Actionが実行されると、SUCCESS結果に移行します.したがって、ページには404エラープロンプトが表示されます.httpheaderの結果タイプについては、理解すればいいです.普段はあまり使われていません.
結果タイプのplainTextは、type="plainText"に設定すると、元のファイルの内容、例えばファイルソース/testSuc.jspが表示されるとアプリケーションにアクセスし、testSuc.jspページにジャンプすると、Java教育サイトに比較的適したJavaコードが右クリックで表示されますが、type="plainText"のみを設定すると、ページに中国語が表示されると文字化けしてしまうので、そのcharSetプロパティを利用して中国語表示時の文字化けしの問題を解決できます.
charSetプロパティを設定しないでstruts.i 18 n.encodingグローバルプロパティを構成するのは、問題を解決できないcharSetプロパティの設定の目的は、JSPページの符号化を明文表示時の符号化と一致させる結果タイプにおけるredirectとredirectActionの区別redirectが現在のActionを処理した後、別の実際の物理リソースredirectActionにリダイレクトするのもリダイレクトですが、別のActionにリダイレクトするのはリダイレクトであれば、以前requestに保存されていたものはすべて消えてしまいます.リダイレクトは実際に2番目のリクエストを送信しているので、したがってリクエスト中のものは2番目のリクエストには現れない,すなわちリダイレクトはリクエストを共有しないものであり,リダイレクト後のページではリクエスト中のものを受信できない,またdispatcher結果タイプのdefault属性はTRUEであるためデフォルトはdispatcherであるためtype属性が設定されていなければデフォルトはリクエスト転送であり,すなわち、ブラウザには*.actionが表示されますが、type="redirect"属性を設定すると、ブラウザには/login 2.jspが表示されます.
Struts 2のAction処理チェーンが1つのActionから別のActionにジャンプするには、2つの方法があります.typeをchainまたはredirectActionchainの結果タイプに設定すると、複数のActionを1つのチェーンとして処理するためにchainとredirectActionを使用する利点は、フレームワークのデフォルト接尾辞に従って接尾辞が自動的に一致し、chainとredirectActionの違いはdispatcherとredirectの違いと同じであり、同じようにActionにジャンプすることです.ただしchainはサーバホッピングであり、redirectActionはクライアントホッピングサーバホッピングの過程でデータを共有することができ、この場合後のActionは前のActionの属性情報を受信して二次処理を行うことができる
以下はchain結果タイプの使用例view plaincopy to clipboardprintですか?
あるいはsecondchain.actionを使用して手動で.actionを追加しても正常にアクセスできますが、アプリケーションのAction接尾辞を変更する場合は、ここでも手動で接尾辞を変更する必要がありますので、公式ヘルプドキュメントの例では、次のActionを実行するためにこのような方法を使用したことがありますが、面倒です.しかし、これは厳密ではありません.次の例は、異なるネーミング空間でのActionview plaincopy to clipboardprintへのアクセスですか?
クライアントジャンプでのパラメータ転送2番目のActionでtype="redirect"を使用すると、Actionで共有されているデータはページで受信できませんが、クライアントジャンプではリンクにパラメータをアップロードできます.たとえばresultを/test 1 Suc.jsp?name=usernameと書くとStruts 2のXMLファイルで{}式を使用できます.Actionで使用可能なすべての属性が自動的に取り出されます.パラメータとして次のページに渡されます.ここではEL式ではありません.実際にはOGLL式はリンクから値を取るため、<{param.name}を使用します.ここでparamはrequest.getParameter(")に相当します.)page、request、session、applicationから値を取得するために使用され、ValueStackから値を取得する次のコード例view plaincopy to clipboardprintであるため、${name}も使用できません.
-「転送要求」と「リダイレクト」の違い
ブラウザに別のURLを取得させるためのリソースは、リクエスト転送(RequestDispatcher.forward)またはリダイレクト技術(HttpServeretResponse.sendRedirect)を使用することができますが、両者の内部メカニズムには大きな違いがあります.
1リクエスト転送は、同じWEBアプリケーションのコンポーネントにのみ転送できますが、リダイレクトは、同じサイトの異なるアプリケーションのリソースに再配向したり、絶対的なURLに配向したりすることもできます.
2リダイレクト先のページが見えるURL、転送先は初めてアクセスしたページのURLしか見えず、以降の作業はサーバーが行っています.
3要求応答呼び出し者と呼び出し者の間で同じrequestオブジェクトとresponseオブジェクトを共有し、リダイレクト呼び出し者と呼び出し者は2つの独立したアクセス要求と応答プロセスに属する.
4リダイレクトジャンプ後にreturnを付けなければなりません.そうしないと、ページはジャンプしますが、ジャンプ後の文も実行されます.転送はジャンプページを実行し、次のコードは実行されません.
結果タイプがinputのページの役割Struts 2アプリケーション実行中にaddFieldError()に情報があるか、タイプ変換に失敗したか、入力チェックに失敗したかなどを発見した場合、自動的にnameがinputのページにジャンプし、INPUTに対応するページに移動しますJSPページ面のフォームが通常で作成され、エラーが発生してページに戻ると、元データが消失するJSPページでフォームが作成され、エラーが発生してそのページに戻った場合でも、元データにはname値がinputでない場合、エラーが発生した場合、ブラウザに直接404エラーを提示する
結果タイプのhttpheader httpheader結果タイプはあまり使われず、実際にはHTTP応答のヘッダ情報を返します.単純な設定/result.jspであれば、実行時にコンソールから次のエラーが表示されますCaught OgnlException while setting property‘status’on type‘org.apache.struts 2.dispatcher.HttpHeaderResult’.java.lang.NoSuchMethodException:setStatus(java.lang.String)翻訳:アプリケーションはstatusの属性を設定するときにOgnlException異常をキャプチャしてHttpHeaderResultクラスソースコードを表示します.それはやはりprivate int status=-1を定義しています.それはステータスコードを表しています.一般的なステータスコードは以下の200対応OK 404対応File Not Foundまたはrequested resource()is not available 500対応サーバ内部エラーです.この場合、私たちは404に変更します.Actionが実行されると、SUCCESS結果に移行します.したがって、ページには404エラープロンプトが表示されます.httpheaderの結果タイプについては、理解すればいいです.普段はあまり使われていません.
結果タイプのplainTextは、type="plainText"に設定すると、元のファイルの内容、例えばファイルソース/testSuc.jspが表示されるとアプリケーションにアクセスし、testSuc.jspページにジャンプすると、Java教育サイトに比較的適したJavaコードが右クリックで表示されますが、type="plainText"のみを設定すると、ページに中国語が表示されると文字化けしてしまうので、そのcharSetプロパティを利用して中国語表示時の文字化けしの問題を解決できます.
<result name="success" type="plainText">
<param name="location">/testSuc.jspparam>
<param name="charSet">GBKparam>
result>
<result name="success" type="plainText"> <param name="location">/testSuc.jspparam> <param name="charSet">GBKparam> result>
charSetプロパティを設定しないでstruts.i 18 n.encodingグローバルプロパティを構成するのは、問題を解決できないcharSetプロパティの設定の目的は、JSPページの符号化を明文表示時の符号化と一致させる結果タイプにおけるredirectとredirectActionの区別redirectが現在のActionを処理した後、別の実際の物理リソースredirectActionにリダイレクトするのもリダイレクトですが、別のActionにリダイレクトするのはリダイレクトであれば、以前requestに保存されていたものはすべて消えてしまいます.リダイレクトは実際に2番目のリクエストを送信しているので、したがってリクエスト中のものは2番目のリクエストには現れない,すなわちリダイレクトはリクエストを共有しないものであり,リダイレクト後のページではリクエスト中のものを受信できない,またdispatcher結果タイプのdefault属性はTRUEであるためデフォルトはdispatcherであるためtype属性が設定されていなければデフォルトはリクエスト転送であり,すなわち、ブラウザには*.actionが表示されますが、type="redirect"属性を設定すると、ブラウザには/login 2.jspが表示されます.
Struts 2のAction処理チェーンが1つのActionから別のActionにジャンプするには、2つの方法があります.typeをchainまたはredirectActionchainの結果タイプに設定すると、複数のActionを1つのチェーンとして処理するためにchainとredirectActionを使用する利点は、フレームワークのデフォルト接尾辞に従って接尾辞が自動的に一致し、chainとredirectActionの違いはdispatcherとredirectの違いと同じであり、同じようにActionにジャンプすることです.ただしchainはサーバホッピングであり、redirectActionはクライアントホッピングサーバホッピングの過程でデータを共有することができ、この場合後のActionは前のActionの属性情報を受信して二次処理を行うことができる
以下はchain結果タイプの使用例view plaincopy to clipboardprintですか?
<action name="firstchain" class="com.jadyer.action.FirstAction">
<result type="chain">secondchainresult>
action>
<action name="secondchain" class="com.jadyer.action.SecondAction">
<result type="chain">thirdchainresult>
action>
<action name="thirdchain" class="com.jadyer.action.ThirdAction">
<result type="plainText">/chainResult.jspresult>
action>
<action name="firstchain" class="com.jadyer.action.FirstAction"> <result type="chain">secondchainresult> action> <action name="secondchain" class="com.jadyer.action.SecondAction">
<result type="chain">thirdchainresult>
action>
<action name="thirdchain" class="com.jadyer.action.ThirdAction">
<result type="plainText">/chainResult.jspresult> action>
あるいはsecondchain.actionを使用して手動で.actionを追加しても正常にアクセスできますが、アプリケーションのAction接尾辞を変更する場合は、ここでも手動で接尾辞を変更する必要がありますので、公式ヘルプドキュメントの例では、次のActionを実行するためにこのような方法を使用したことがありますが、面倒です.しかし、これは厳密ではありません.次の例は、異なるネーミング空間でのActionview plaincopy to clipboardprintへのアクセスですか?
<package name="test" extends="struts-default" namespace="/">
<action name="test" class="cn.jadyer.action.TestAction">
<result name="success" type="redirectAction">
<param name="actionName">test1param>
<param name="namespace">/xxparam>
result>
action>
package>
<package name="test1" extends="struts-default" namespace="/xx">
<action name="test1" class="cn.jadyer.action.Test1Action">
<result name="success" type="redirect">/test1Suc.jsp?name=${name}result>
action>
package>
<package name="test" extends="struts-default" namespace="/">
<action name="test" class="cn.jadyer.action.TestAction"> <result name="success" type="redirectAction">
<param name="actionName">test1param>
<package name="test1" extends="struts-default" namespace="/xx">
<action name="test1" class="cn.jadyer.action.Test1Action">
<result name="success" type="redirect">/test1Suc.jsp?name=${name}
result> action> package>
クライアントジャンプでのパラメータ転送2番目のActionでtype="redirect"を使用すると、Actionで共有されているデータはページで受信できませんが、クライアントジャンプではリンクにパラメータをアップロードできます.たとえばresultを/test 1 Suc.jsp?name=usernameと書くとStruts 2のXMLファイルで{}式を使用できます.Actionで使用可能なすべての属性が自動的に取り出されます.パラメータとして次のページに渡されます.ここではEL式ではありません.実際にはOGLL式はリンクから値を取るため、<{param.name}を使用します.ここでparamはrequest.getParameter(")に相当します.)page、request、session、applicationから値を取得するために使用され、ValueStackから値を取得する次のコード例view plaincopy to clipboardprintであるため、${name}も使用できません.
name="test" class="cn.jadyer.action.TestAction">
<result name="success" type="redirectAction">
name="actionName">test1
result>
name="test1" class="cn.jadyer.action.Test1Action">
<result name="success" type="redirect">/test1Suc.jsp?name=${username}result>
-「転送要求」と「リダイレクト」の違い
ブラウザに別のURLを取得させるためのリソースは、リクエスト転送(RequestDispatcher.forward)またはリダイレクト技術(HttpServeretResponse.sendRedirect)を使用することができますが、両者の内部メカニズムには大きな違いがあります.
1リクエスト転送は、同じWEBアプリケーションのコンポーネントにのみ転送できますが、リダイレクトは、同じサイトの異なるアプリケーションのリソースに再配向したり、絶対的なURLに配向したりすることもできます.
2リダイレクト先のページが見えるURL、転送先は初めてアクセスしたページのURLしか見えず、以降の作業はサーバーが行っています.
3要求応答呼び出し者と呼び出し者の間で同じrequestオブジェクトとresponseオブジェクトを共有し、リダイレクト呼び出し者と呼び出し者は2つの独立したアクセス要求と応答プロセスに属する.
4リダイレクトジャンプ後にreturnを付けなければなりません.そうしないと、ページはジャンプしますが、ジャンプ後の文も実行されます.転送はジャンプページを実行し、次のコードは実行されません.