一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 深入解析Java的Struts框架中的控制器DispatchAction

深入解析Java的Struts框架中的控制器DispatchAction

2020-03-10 11:43永遠的晴天 JAVA教程

這篇文章主要介紹了深入解析Java的Struts框架中的控制器DispatchAction,Struts是Java的SSH三大web開發框架之一,需要的朋友可以參考下

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方法對表單進行驗證。
配置示例如下代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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。

深入解析Java的Struts框架中的控制器DispatchAction

界面中調用代碼如下所示。

?
1
2
3
<body>
<a href="user/user_maint.do?command=list"title="請點擊訪問用戶管理系統">用戶管理系統</a>
</body>


其中list對應著UserAction中的list方法,傳遞的字符串與UserAction中的方法名相同。
UserAction中的代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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配置文件代碼如下所示。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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。在這里就不詳細講述了,有興許的童鞋可以查找些資料來實現。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品v日韩精品v国产精品 | 四虎在线永久免费视频网站 | 亚洲国产精品久久无套麻豆 | 日韩在线观看一区二区不卡视频 | 久9青青cao精品视频在线 | 亚洲国产一区二区a毛片 | 九九热这里只有精品视频免费 | 日韩一区在线播放 | 关晓彤被草 | 8x8x拔插| 2021国产麻豆剧传媒剧情最新 | 色婷婷综合和线在线 | 91日本在线观看亚洲精品 | 日韩三及片 | 天天干夜夜拍 | yin娃sao货调教情趣用品店 | 成人国产在线视频在线观看 | k逼| ai换脸明星造梦工厂忘忧草 | 冰漪丰满大乳人体图片欣赏 | 国产123区在线视频观看 | 久久se视频精品视频在线 | 国产精品日韩欧美在线 | 特黄特级高清免费视频毛片 | 久久精品黄AA片一区二区三区 | 韩国一级淫片特黄特刺激 | 四虎影院在线免费播放 | 性美国人xxxxx18 | 日本黄色录像视频 | 精彩国产萝视频在线 | 吻戏辣妞范1000免费体验 | 日韩在线天堂免费观看 | www.男人天堂 | 欧美大陆日韩一区二区三区 | 美女免费观看一区二区三区 | 国产99re在线观看69热 | 韩国悲惨事件30无删减在线 | 四虎影视网址 | 成人免费视频播放 | 99操视频 | 亚洲精品AV无码喷奶水糖心 |