SSHフレームワークのStruts(1)――Strutsの運行フロー

5296 ワード


Strutsフレームワークを採用するWebアプリケーションについて、その基本的な流れを例によって紹介する.
一、実例
Login.jsp、システム登録を行うページ
  
  
		<form action="login.do" method="post">
			  :<input type="text" name="username"><br>
			  :<input type="password" name="password"></br>
			<input type="submit" value="  ">
		</form>

Web.xml、初期化されたプロファイル
		  <servlet>
		    <servlet-name>action</servlet-name>
		    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		    <init-param>
		      <param-name>config</param-name>
		      <param-value>/WEB-INF/struts-config2.xml</param-value>
		    </init-param>
		    <init-param>
		      <param-name>debug</param-name>
		      <param-value>2</param-value>
		    </init-param>
		    <init-param>
		      <param-name>detail</param-name>
		      <param-value>2</param-value>
		    </init-param>
		    <load-on-startup>2</load-on-startup>
		  </servlet>
		
		
		  <!-- Standard Action Servlet Mapping -->
		  <servlet-mapping>
		    <servlet-name>action</servlet-name>
		    <url-pattern>*.do</url-pattern>
		  </servlet-mapping>  
		</web-app>

Struts-config.xml,strursのプロファイル
		<struts-config>
			<form-beans>
				<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
			</form-beans>
			
			<action-mappings>
				<action path="/login" 
						type="com.bjpowernode.struts.LoginAction"
						name="loginForm"		
						scope="request"		
						>
					<forward name="success" path="/login_success.jsp" />
					<forward name="error" path="/login_error.jsp"/>		
				</action>
			</action-mappings>
		</struts-config>

  LoginAction:
		public class LoginAction extends Action {  
		  
		    @Override  
		    public ActionForward execute(ActionMapping mapping, ActionForm form,  
		            HttpServletRequest request, HttpServletResponse response)  
		            throws Exception {  
		         UserActionForm  userForm=(UserActionForm)form;  
		         String userName=userForm.getName();  
		         int password=userForm.getPassword();            
		         UserManage userManage=new UserManage();
		         User user=new User();  
		          user.setName(userName);  
		          user.setPassword(password);  
		    
		        try {  
		             userManage.ValidateUser(user);  
		             return mapping.findForward("success");  
		          } catch (UserNotFoundException e) {  
		             e.printStackTrace();  
		             request.setAttribute("message", e.getMessage());  
		          }catch(PasswordErrorException e){  
		             e.printStackTrace();  
		             request.setAttribute("message", e.getMessage());  
		          }  
		    
		          return mapping.findForward("fail"); }  

 
 LoginActionForm:
 
				public class UserActionForm extends ActionForm {  
				    private String name;  
				    private int password;  
				    public String getName() {  
				        return name;  
				    }  
				    public void setName(String name) {  
				        this.name = name;  
				    }  
				    public int getPassword() {  
				        return password;  
				    }  
				    public void setPassword(int password) {  
				        this.password = password;  
				    }  
				      
				} 
				

  UserManager
				public class UserManage {  
				      
				     public void ValidateUser(User user) {  
				      //              
				      if (!"admin".equals(user.getName())) {  
				          throw new UserNotFoundException("     !    :" + user.getName());  
				      } else if (user.getPassword() != 123456) {  
				         throw new PasswordErrorException("    ");  
				      }  
				 }} 

二、実行プロセス
A、初期化設定
Struts 1のコアActionServiceletは、Web.xmlで自動的に起動するように構成されたサーブレットに継承されます.
B、送信及び受信要求
(1)クライアントが要求をコミットすると,.doで終わるすべての要求がActionServiceletという中央配布器にコミットされる.(2)クライアントが要求を発行する方式Get/Postに従ってActionServiceetに実行するdoGet()かdoPost方法かを選択する
C、処理と配布要求
(3)doGet()/doPost()メソッドを実行してもprocess()メソッドに実行される.これはActionServiceletの核心的な方法であり、この方法では、切り取り要求パス(processPath)が実現され、切り取り要求パスからStruts.cofing.xmlプロファイルに対応するActionMapping(processMapping)(4)ActionServiceletがユーザ要求のActionに一致すると、response要求のフォームパラメータがActionFormにパッケージされる(processActionFormインプリメンテーションを呼び出す)オブジェクト.このActionFromオブジェクトは実質的にJavaBeanであり、フォームのデータ情報が含まれている.(5)このとき、システムは特定のActionに移行し、ActionFormオブジェクトに渡され、特定のActionのExecute()メソッドを実行する.
  (
6)execute()の実行が終了すると、ActionForwardタイプのオブジェクトが生成され、ActionServiceletに戻り、Struts.cofing.xmlプロファイルの処理結果アイテムと組み合わせて転送またはリダイレクトされ、最後にインタフェースがユーザーに返されます.
  
ここでは初歩的な理解と説明にすぎませんが、ソースコードとフローチャートをより詳細に結合するには、次のブログで分析します.