如何解决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类:

 package user;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class TotalAction extends ActionSupport {
HttpServletResponse response= ServletActionContext.getResponse();
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session= request.getSession();
private User user; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
//添加用户到用户列表中。
public String add() throws Exception {
// TODO Auto-generated method stub
UserDAO dao =new UserDAO();
//System.out.println("::"+user.getID());
//System.out.println(""+user.getUserName());
//System.out.println("用户名::"+user.getPwd());
dao.addUser(user);
return this.SUCCESS;
}
//登录时检查用户名是否存在
public String checkLogin() throws Exception {
// TODO Auto-generated method stub
UserDAO dao =new UserDAO();
try {
PrintWriter out= response.getWriter();
if(dao.checkLogin(user))
{
//如果用户名字和密码输入正确,则将用户名和密码保存在session中,用于用户登录后用户名在列表的显示。
session.setAttribute("USERS",user);
out.print("1");
}
else
{
out.print("0");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//检查注册的用户名是否重复
public String checkExists() throws Exception {
// TODO Auto-generated method stub
UserDAO dao = new UserDAO();
PrintWriter out = response.getWriter();
if(dao.checkExists(user))
{
//如果用户名存在则返回1,并在前端显示用户名已存在。
out.print("1");
}
else
{
out.print("0");
}
return null;
} //修改用户名和密码
public String modify() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
//删除用户名和密码
public String delete() throws Exception {
// TODO Auto-generated method stub
return super.execute();
} }

method的方法中struts的配置:

 <struts>
<constant name="struts.action.extension" value="action,,"></constant>
<constant name="struts.devMode " value="true"></constant>
<package name="user" namespace="/" extends="struts-default">
<action name="checklogin" class="user.TotalAction" method="checkLogin">
</action>
<action name="CheckUser" class="user.TotalAction" method="checkExists">
</action>
<action name="add" class="user.TotalAction" method="add">
<result name="success">/userlist.jsp</result>
</action>
</package>
</struts>

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

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

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

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

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

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

详解struts2中配置action的方法的更多相关文章

  1. 在Struts2中配置Action

    在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...

  2. 详解Java中的Object.getClass()方法

    详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Me ...

  3. javap反编译命令详解&Eclipse中配置javap命令

    javap命令所有参数如下图所示: javap 命令用于解析类文件.其输出取决于所用的选项.若没有使用选项,javap 将输出传递给它的类的 public 域及方法.javap 将其输出到标准输出设备 ...

  4. 详解JavaScript中的arc的方法

    今天说说JavaScript在网页中画圆的函数arc! 一.arc所需要的参数设置 1 arc(x, y, radius, startAngle, endAngle, counterclockwise ...

  5. 详解centos7中配置keepalived日志为别的路径

    由于在默认状态下keepalived的日志会写入到/var/log/message中,我们需要将此剥离出来. 在centos 6下可以: (1)首先修改/etc/sysconfig/keepalive ...

  6. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Swift - 自动布局库SnapKit的使用详解1(配置、使用方法、样例)

    为了适应各种屏幕尺寸,iOS 6后引入了自动布局(Auto Layout)的概念,通过使用各种 Constraint(约束)来实现页面自适应弹性布局. 在 StoryBoard 中使用约束实现自动布局 ...

  8. 详解Webwork中Action 调用的方法

    详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...

  9. 详解Springboot中自定义SpringMVC配置

    详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ​ 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需 ...

随机推荐

  1. Windows 2008 R2组策略之二——GPO初探

    与前一篇博文发表已经相去月余了,实在是有些不好意思了.感谢51CTO的大编们将小文加了推荐,这使我更加觉得自己产出太少,难于回馈大家的厚爱. 今天将这个系列的第二篇奉献给大家,以伺视听. 在上篇小文中 ...

  2. if no 和 if not

    x = None if x is not None: print("kong") if not x is not None: print("kong") # i ...

  3. Log4j,Log4j2,logback,slf4j日志学习

    日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条 ...

  4. 使用html2canvas实现超出浏览器部分截图

    之前写过一篇关于 html2canvas如何在元素隐藏的情况下生成截图 的文章,后面发现还有个坑在等着我,就是如果合成图片太大,超出了浏览器的可视区域,那么超出部分是无法截图的.在网上找到了以下方法, ...

  5. QThread 的使用方法及函数解析

    近日,使用QThread,一些问题百思不得其解,看过大牛的文章,恍然大悟啊. 原文 http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f ...

  6. 关于Struts2有时候出现的莫名其妙的错误

    有的时候突然出现红色叉叉,但是又不知道哪里错了,解决方法: 1.刷新项目文件夹 2.重启MyEclipse

  7. am335x 10.1"电容touch 不能识别

    /**************************************************************** * am335x 10.1"电容touch 不能识别 * ...

  8. UART通信协议

    第一部分: UART使用的是 异步,串行通信.    串行通信是指利用一条传输线将资料一位位地顺序传送.特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场 ...

  9. tRNA 二级结构预测可视化

    tRNAdb 收录了来自104个物种的623条tRNA 序列,从数据库中下载对应物种的tRNA 序列和二级结构,以人为例 打开下面的链接 http://trna.bioinf.uni-leipzig. ...

  10. [mysql] 查询前几条记录

    From: http://www.cnblogs.com/xuxm2007/archive/2010/11/16/1878211.html SELECT   *   FROM   table   LI ...