English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
1.クライアントがservletコンテナ(Tomcat)へのリクエストを初期化します;
2.このリクエストは一連のフィルタを通過し、その後FilterDispatcherが呼び出されます;
3.FilterDispatcherはActionMapperに尋ねて、このリクエストがアクションを呼び出すかどうかを決定します;
4.ActionMapperがアクションを呼び出すことを決定した場合、FilterDispatcherはリクエストの処理をActionProxyに委譲し、ActionProはConfigurationManagerに依頼してフレームワークの設定ファイルを確認し、呼び出す必要があるアクションクラスを見つけます。一般的にはstruts.xmlを読み取ります;
5.ActionProxyはActionInvocationのインスタンスを作成し、ActionInvocationインスタンスを使用して名前付きパターンで呼び出します。Actionの呼び出しの前後には、関連するインターセプタの呼び出しが行われます。
6.Actionが実行終了すると、ActionInvocationはstruts.xmlの設定に基づいて対応する返却結果を探します。
例えば以下のコード:
struts2取得した.actionリクエストに基づいて、どのビジネスロジックコンポーネントを呼び出すかを決定します;
struts2アプリケーション内のすべてのActionはstruts.xmlに定義されています;
struts2ユーザーリクエストを処理するActionインスタンスはユーザーが実装したビジネス制御クラスではなく、Actionエージェントです。ユーザーが実装したビジネス制御クラスはServletAPIに結びついていないため、ユーザーリクエストを処理することができません。
<html> <head> <title>SUCCESS</title> </head> <body> <form action="hello.action" method="post"> USERNAME:<input type="text" name="name"></<br> PASSWORD:<input type="password" name="pass"></<br> <input type="submit" value="送信"> </form> </body> </html>
例えば上記のフォームのhello.action、このaction属性は通常のservletでもなく、動的JSPページでもありません。フォームがhello.actionに送信された場合、Struts2のFilterDispatcherが動作し、ユーザーリクエストが対応するActionに転送されます。
注意してください:Struts2 Actionはデフォルトですべての.actionで終わるリクエストをインターセプトします。フォームをActionに処理させる必要がある場合、フォームのaction属性を.actionの形式に設定する必要があります。
制御クラス
public class HelloAction { private String name; private String pass; public void setName(String name){ this.name=name; } public void setPass(String pass){ this.pass=pass; } public String execute(){ if("陽".equals(name) && "1234".equals(pass)){ return "成功"; } else{}} return "error"; } } }
前の処理が完了した後は、ページの転送のみが実行され、ユーザーの状態が追跡されていません。ユーザーがログインした後、ユーザーのユーザー名をHTTPセッションの状態情報に追加する必要があります。
Httpsessionインスタンスにアクセスするために、struts2ActionContextクラスが提供されており、getSession()メソッドが提供されていますが、このメソッドの返り値はHttpSession()ではなくMap()です。しかし、Struts2のインターセプタがSession()とHttpSession()の切り替えを担当します。
セッション属性が設定されているかどうかを確認するために、成功した後の画面に以下のように設定できます
<html> <head> <base href="<%=basePath%>" rel="external nofollow" > <title>SUCCESS</title> </head> <body> ようこそ、${sessionScope.user}、ログインしました。 </body> </html>
JSPを使用して2.0表現文法でHTTPセッションのuser属性を出力します。
ActionツールクラスはActionSupportを統合しています
ActionSupportクラスはツールクラスであり、Actionインターフェースを実装しています。これに加えて、Validateablezインターフェースも実装しており、データ校验機能を提供しています。
入力データの校验機能を追加するために、Actionに重写的validateメソッドを追加します。
public void validate() { if(getName()==null || getName().trim().equals("")){ addFieldError("name",getText("name.required")); } if(getPass()==null || getPass().trim().equals("")){ addFieldError("pass", getText("pass.required")); } }
システムのexecute()メソッドの前に実行される重写的validateメソッドに追加されたデータが校验エラーを含んでいる場合、ActionクラスのfieldErrorにデータ校验エラーが既に含まれていると、リクエストはinputロジックビューに転送されます。したがって、struts.xmlにinputロジックビュー名を追加して、ログインページに遷移させる必要があります。
このvalidateメソッドの欠点は、大量のvalidateメソッドの再書き込みが必要であるため、strutsを使用することができます。2の検証フレームワークで検証を行います。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <validators> <!--フォームのnameを確認--> <field name="name"> <field-validator type="requiredstring"> <message key="name.required">/> </field-validator> </field> <!--フォームのpassを確認--> <field name="pass"> <field-validator type="requiredstring"> <message key="pass.required">/> </field-validator> </field> </validators>
まとめ
これで、この記事についてstrutsの2の流れや関連する知識コードの解説をすべて含む内容です。皆様の助けになることを願っています。興味を持たれた方、このサイトの他の関連テーマもご覧ください。不十分な点があれば、お気軽にコメントしてください。皆様のサポートに感謝します!
声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーによって自発的に貢献し、アップロードされた内容であり、このサイトは所有権を持ちません。また、人間による編集は行われておらず、関連する法的責任も負いません。著作権侵害を疑われる内容が見つかりましたら、以下のメールアドレスにご連絡ください:notice#oldtoolbag.com(メールの際は、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認が取れましたら、このサイトは直ちに侵害を疑われる内容を削除します。