程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 深刻解析Java的Struts框架中的掌握器DispatchAction

深刻解析Java的Struts框架中的掌握器DispatchAction

編輯:關於JAVA

深刻解析Java的Struts框架中的掌握器DispatchAction。本站提示廣大學習愛好者:(深刻解析Java的Struts框架中的掌握器DispatchAction)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析Java的Struts框架中的掌握器DispatchAction正文


Struts中的表單處置器為ActionForm,而struts中的掌握器重要是Action,和DispatchAction掌握器等。
Action
在struts中,一切的用戶都邑經由ActionServlet的處置,而現實的任務是交給Action對象來處置的,ActionServlet可以從設置裝備擺設文件中創立ActionMapping對象,從ActionMapping對象中找到對應應用的Action,然後將用戶要求轉交給Action。
對Struts一個ActionMapping只能生成一個Action對象,當用戶提議要求的時刻會檢討所須要的Action對象能否存在,假如不存在就會生成一個Action對象,在今後的處置進程中應用這個對象。
當我們應用Action的時刻須要繼續arg.apache.struts.action.Action這個類,在子類中參加所須要的營業邏輯處置,這些子類會前往ActionForward對象,ActionServlet接收這個對象,把頁面轉發到指定頁面,從而把用戶要求的成果發送到對應的頁面。我們在struts-config.xml中停止設置裝備擺設。設置裝備擺設的重要屬性以下:
(1)  path屬性:拜訪Action的URL地址,當用戶要求途徑和URL婚配時,ActionServlet會把這個用戶要求發送給Action處置。
(2)  type屬性:指定處置要求的Action對應的類,須要寫類文件的包途徑。
(3)  name屬性:指定我們的Action用到的ActionForm名字,這個ActionForm必需是在<form-beans>中界說過的。
(4)  scope屬性:指定ActionForm的應用規模,缺省值為session規模。
(5)  input屬性:指定表單驗證失足的時刻轉向頁面。
(6)  validate屬性:指明能否主動挪用ActionForm中的validate辦法對表單停止驗證。
設置裝備擺設示例以下代碼。

<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> 


成績
當我們完成用戶增刪改查操作時采取struts框架,我們須要為增刪改查樹立四個分歧的Action,假如有更多的增刪改查操作,好比對物料增刪改查也須要樹立四個Action,如許形成了年夜量的Action。
成績的處理
在struts中的Action類中,只供給了一個execute()辦法,一個用戶要求URL只能對應一個servlet,在struts中供給了另外一個掌握器類org.apache.struts.actions.DispatchAction,這個類可以經完成相干營業邏輯所需辦法幾種在一個DispatchAction類中,我們繼續DispatchAction類後不重寫execute()辦法,而是編寫本身的辦法,在分歧的辦法中處置分歧的舉措。刪除用戶增刪改核對應的Action,樹立UserAction。

界面中挪用代碼以下所示。

<body> 
<a href="user/user_maint.do?command=list"title="請點擊拜訪用戶治理體系">用戶治理體系</a> 
</body> 


個中list對應著UserAction中的list辦法,傳遞的字符串與UserAction中的辦法名雷同。
UserAction中的代碼以下所示:

packagecom.bjpowernode.drp.web.actions; 
  
importjava.util.Date; 
importjava.util.List; 
  
importjavax.servlet.http.HttpServletRequest; 
importjavax.servlet.http.HttpServletResponse; 
  
importorg.apache.commons.beanutils.BeanUtils; 
importorg.apache.struts.action.ActionForm; 
importorg.apache.struts.action.ActionForward; 
importorg.apache.struts.action.ActionMapping; 
importorg.apache.struts.actions.DispatchAction; 
  
importcom.bjpowernode.drp.manager.UserManager; 
importcom.bjpowernode.drp.model.User; 
importcom.bjpowernode.drp.web.forms.UserActionForm; 
  
public classUserAction extends DispatchAction { 
  
   
  
  
   protected ActionForward list(ActionMapping mapping, ActionForm form, 
          HttpServletRequestrequest, HttpServletResponse response) 
          throwsException { 
      //挪用營業邏輯操作 
      List userList = UserManager.getInstance().findAllUserList(); 
      request.setAttribute("userlist",userList); 
       
      returnmapping.findForward("list_success"); 
   } 
  
   
   /** 
   * 用戶刪除 
   * @param mapping 
   * @param form 
   * @param request 
   * @param response 
   * @return 
   * @throws Exception 
   */ 
   public ActionForward del(ActionMapping mapping, ActionForm form, 
          HttpServletRequestrequest, HttpServletResponse response) 
          throws Exception { 
      //獲得從頁面表單中提交過去的值 
      UserActionForm uaf = (UserActionForm)form; 
       
      //獲得須要刪除的userId的聚集 
      String[] userIdList = uaf.getSelectFlag(); 
  
      //挪用營業邏輯操作 
      UserManager.getInstance().deleteUsers(userIdList); 
      return mapping.findForward("del_success"); 
   } 
   
   /** 
   * 用戶添加 
   * @param mapping 
   * @param form 
   * @param request 
   * @param response 
   * @return 
   * @throws Exception 
   */ 
   public ActionForward add(ActionMapping mapping, ActionForm form, 
          HttpServletRequest request, HttpServletResponse response) 
          throwsException { 
       
      //獲得從頁面表單中提交過去的值 
      UserActionForm uaf = (UserActionForm)form; 
      Useruser = new User(); 
      BeanUtils.copyProperties(user,uaf); 
      user.setCreateDate(newDate()); 
       
      //挪用營業邏輯操作 
      UserManager.getInstance().addUser(user); 
      returnmapping.findForward("add_success");  } 
  
   /** 
   * 修正用戶 
   * @param mapping 
   * @param form 
   * @param request 
   * @param response 
   * @return 
   * @throws Exception 
   */ 
   public ActionForward modify(ActionMapping mapping, ActionForm form, 
          HttpServletRequestrequest, HttpServletResponse response) 
          throwsException { 
      //獲得從頁面表單中提交過去的值 
      UserActionForm uaf = (UserActionForm)form; 
      User user = new User(); 
      BeanUtils.copyProperties(user,uaf); 
       
      //挪用營業邏輯操作 
      UserManager.getInstance().modifyUser(user); 
      returnmapping.findForward("modify_success"); 
   } 
   
   /** 
   * 依據ID查詢用戶 
   * 
   * @param mapping 
   * @param form 
   * @param request 
   * @param response 
   * @return 
   * @throws Exception 
   */ 
   public ActionForward find(ActionMapping mapping, ActionForm form, 
          HttpServletRequestrequest, HttpServletResponse response) 
          throwsException { 
      //獲得從頁面表單中提交過去的值 
      UserActionForm uaf = (UserActionForm)form; 
       
      String userId = uaf.getUserId(); 
       
      //挪用營業邏輯操作 
      User user = UserManager.getInstance().findUserById(userId); 
       
      //將user對象從Action傳遞到JSP頁面 
      request.setAttribute("user",user); 
       
      returnmapping.findForward("find_success"); 
   } 
   
} 

  


Struts-config.xml設置裝備擺設文件代碼以下所示。

<struts-config> 
   
  <form-beans> 
      <form-bean name="userForm"type="com.bjpowernode.drp.web.forms.UserActionForm"/> 
  </form-beans> 
   
  <action-mappings> 
    <action path="/user/user_maint" 
           type="com.bjpowernode.drp.web.actions.UserAction" 
           name="userForm" 
           scope="request" 
           parameter="command" 
    > 
        
        <forward name="list_success" path="/user/user_list.jsp"/> 
        <forward name="del_success" path="/user/user_maint.do?command=list"redirect="true"/> 
        <forward name="add_success" path="/user/user_maint.do?command=list"redirect="true"/> 
        <forward name="modify_success" path="/user/user_maint.do?command=list"redirect="true"/> 
        <forward name="find_success" path="/user/user_modify.jsp"/> 
 </action-mappings>  
</struts-config> 


個中設置裝備擺設Action的時刻,設置裝備擺設了parameter屬性,而且指定了parameter屬性值為command,當用戶單擊添加或刪除用戶操作時,會以http://localhost:8080/struts_dispatchaction_usermgr/user/user_maint.do?command=list,這個要求會被映照到UserAction掌握器中,Struts依據method參數的值把這個要求發送到掌握器UserAction的list辦法。如許獲得參數完成頁面的挪用。
從上述可以看出,DispatchAction可以經由過程command這個參數的值來決議挪用DispatchAction的哪一個辦法,DispatchAction是從用戶要求的URL中提取parameter界說參數的值,從而決議挪用哪一個辦法處置用戶要求。所以DispatchAction不克不及經由過程ActionForm向辦事器提交要求,由於提交表單的時刻不克不及向辦事器傳遞參數。
依據上述示例我們可以總結出DispatchAction與Action差別:Action是從表單中獲得數據,而且主動轉換為對應的類型。而DispatchAction獲得設置裝備擺設文件中parameter,截取parameter界說的參數值。然則DispatchAction可以處置多個舉措而不須要樹立多個Action。
DispatchAction可以在統一個掌握器中處置多個舉措,但只能經由過程URL來挪用掌握器,依據用戶提交的參數來決議挪用哪一個辦法來處置用戶要求。不克不及經由過程表單提交用戶要求信息,在struts中假如要在統一個表單中處置分歧的舉措,可使用LookupDispatchAction。在這裡就不具體講述了,有也許的童鞋可以查找些材料來完成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved