如何解决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. MongoDB(五):MongoDB操作文档

    本篇文章中将讲解如何使用MongoDB操作文档. 文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式.BSON是一种类似json格式的一种二进制形式的存储格式,简称Binary ...

  2. Entity Framework开发介绍

    一.Entity Framework概要 Entity Framework是微软的Object Relational Mapper(对象关系映射),也就是我们平常说的ORM,它可以让应用程序开发者将关 ...

  3. css样式DEMO

    <!-- 导入框 --> <div id="importWin" class="easyui-window" title="服务封装 ...

  4. 聊聊Javascript中的AOP编程

    Duck punch 我们先不谈AOP编程,先从duck punch编程谈起. 如果你去wikipedia中查找duck punch,你查阅到的应该是monkey patch这个词条.根据解释,Mon ...

  5. 《FPGA全程进阶---实战演练》第二章之焊接板子及调试注意事项

    1.若是读者第一次做板子,强烈建议画完PCB板后将PCB图打印出来,然后对照你买的芯片将芯片放置对 应的位置,然后查看所有的封装格式适不适合,否则等你做出板子来后再试,为时晚矣.笔者虽然知道要这么 做 ...

  6. e650. 激活事件

    An object wishing to fire item events must implement ItemSelectable. This example shows typical code ...

  7. C++ 程序可以定义为对象的集合

    C++ 基本语法C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色 ...

  8. Adobe AIR(跨平台应用)

    Adobe AIR(跨平台应用)现在正式应用于android平台了,Adobe Air是一款独立的客户端应用软件,这些软件可以作为单独的程序安装使用,它可以使开发人员使用HTML.JavaScript ...

  9. 【JavaScript】使用setInterval()函数作简单的轮询操作

    轮询(Polling)是一种CPU决策怎样提供周边设备服务的方式,又称"程控输出入"(Programmed I/O). 轮询法的概念是.由CPU定时发出询问.依序询问每个周边设备是 ...

  10. list模块

    一.   concat(Things) -> string() Types:    Things = [Thing]    Thing = atom() | integer() | float( ...