详解struts2中配置action的方法

 如何解决action太多的问题??
我们因为需要不同的方法,所以往往建立很多不同的类,但是每个类中往往仅仅几行代码,不仅浪费了时间,而且配置起来也很繁琐,所以,建立一个共有的类,然后根据以下方式来操作,从而解决类太多的问题。
1.method方式:建立一个Action类,在类中编写不同的方法,在不同的方法中处理不同的请求。
  在struts.xml中配置method属性,让不同的action指向同一个Action类的不同方法。

2.感叹号方式:
 <constant name="struts.enable.DynamicMethodInvocation" value="true" />
 不需要配置method,直接用!方法名的方式来调用。

 DynamicMethodInvocation =动态方法调用

3.通配符方式(官网推荐) “约定大于配置”
   checkLogin    
   checkExists   
   add           
   delete        
   modify       
 <action name="*" class="myuser.UserAction" method={1}>
 </action>

以用户注册的方式,来和大家具体的讲解:

 totalaction类:

 1 package user;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 
11 import org.apache.struts2.ServletActionContext;
12 
13 import com.opensymphony.xwork2.ActionSupport;
14 
15 public class TotalAction extends ActionSupport {
16     HttpServletResponse response= ServletActionContext.getResponse();
17     HttpServletRequest request=ServletActionContext.getRequest();
18     HttpSession session= request.getSession();
19     private User user;
20 
21     public User getUser() {
22         return user;
23     }
24 
25     public void setUser(User user) {
26         this.user = user;
27     }
28     //添加用户到用户列表中。
29     public String add() throws Exception {
30         // TODO Auto-generated method stub
31         UserDAO dao =new UserDAO();
32         //System.out.println("::"+user.getID());
33         //System.out.println(""+user.getUserName());
34         //System.out.println("用户名::"+user.getPwd());
35         dao.addUser(user);
36         return this.SUCCESS;
37     }
38     //登录时检查用户名是否存在
39     public String checkLogin() throws Exception {
40         // TODO Auto-generated method stub
41             UserDAO dao =new UserDAO();
42             try {
43                 PrintWriter out= response.getWriter();
44                 if(dao.checkLogin(user))
45                 {
46                     //如果用户名字和密码输入正确,则将用户名和密码保存在session中,用于用户登录后用户名在列表的显示。
47                     session.setAttribute("USERS",user);
48                     out.print("1");
49                 }
50                 else
51                 {
52                     out.print("0");
53                 }
54             } catch (IOException e) {
55                 // TODO Auto-generated catch block
56                 e.printStackTrace();
57             }
58         return null;    
59     }
60     //检查注册的用户名是否重复
61     public String checkExists() throws Exception {
62         // TODO Auto-generated method stub
63         UserDAO dao = new UserDAO();
64         PrintWriter out = response.getWriter();
65         if(dao.checkExists(user))
66         {
67             //如果用户名存在则返回1,并在前端显示用户名已存在。
68             out.print("1");
69         }
70         else
71         {
72             out.print("0");
73         }
74         return null;
75     }
76 
77     //修改用户名和密码
78     public String modify() throws Exception {
79         // TODO Auto-generated method stub
80         return super.execute();
81     }
82     //删除用户名和密码
83     public String delete() throws Exception {
84         // TODO Auto-generated method stub
85         return super.execute();
86     }
87     
88 }
View Code

method的方法中struts的配置:

 1 <struts>
 2     <constant name="struts.action.extension" value="action,,"></constant>
 3     <constant name="struts.devMode " value="true"></constant>  
 4     <package name="user" namespace="/" extends="struts-default">
 5         <action name="checklogin" class="user.TotalAction" method="checkLogin">
 6         </action>
 7         <action name="CheckUser" class="user.TotalAction" method="checkExists">    
 8         </action>
 9         <action name="add" class="user.TotalAction" method="add">
10             <result name="success">/userlist.jsp</result>
11         </action>
12     </package>
13 </struts>

2,感叹号方式struts的配置。

 1 <struts>
 2     <constant name="struts.action.extension" value="action,,"></constant>
 3     <constant name="struts.devMode " value="true"></constant>
 4      <constant name="struts.enable.DynamicMethodInvocation" value="true" />  //需要配置
 5     <package name="user" namespace="/" extends="struts-default">
 6         <action name="user" class="user.TotalAction">//不需要method方法,只需在jsp页面加载时用!表示。
 7             <result name="success">/userlist.jsp</result>
 8         </action>
 9     </package>
10 </struts>

如:$.post("user!checkExists",。。。。。

3.通配符方式(官网推荐) “约定大于配置”

 1 <struts>
 2     <constant name="struts.action.extension" value="action,,"></constant>
 3     <constant name="struts.devMode " value="true"></constant>
 4      <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
 5     <package name="user" namespace="/" extends="struts-default">
 6         <action name="*" class="user.TotalAction" method="{1}" >//只需要将其改变成此方式。而jsp页面改变为方法名即可。此方式较为常用。
 7             <result name="success">/userlist.jsp</result>
 8         </action>
 9     </package>
10 </struts>

如::<form action="add" method="post">

原文地址:https://www.cnblogs.com/xiadongqing/p/5245192.html