如何解决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. 一站式学习Wireshark(八):应用Wireshark过滤条件抓取特定数据流

    应用抓包过滤,选择Capture | Options,扩展窗口查看到Capture Filter栏.双击选定的接口,如下图所示,弹出Edit Interface Settints窗口. 下图显示了Ed ...

  2. Ajax-ajax实例4-多级联动菜单

    项目结构: 项目运行: 技术要点: 1.4.1 技术要点在分析具体的实现代码之前,先介绍一下本例的几个技术要点.1 .选项的动态创建与删除document 对象的 createElement 方法可以 ...

  3. arduino~snprintf

    #include <stdio.h> printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf ...

  4. js学习笔记34----自执行函数

    自执行函数的写法通常如下: 方式1: (function(){ *** 写事件处理代码 *** }()) 方式2: (function(){ *** 写事件处理代码 *** })() 方式3: !(f ...

  5. USB2.0学习笔记连载(二):USB基础知识简介

    USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...

  6. Java 关于finally、static

    论坛上看到的两道题目,如下: //为啥运行结果是1 0 不是 0 0呢 谁能解释下啊 public class FinallyDemo { static int value = 0; static i ...

  7. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...

  8. 电脑的CPU可直接解读的数据机器码

    机器语言(machine language)是一种指令集的体系.这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据. 机器码有时也被称为原生码(Native Code), ...

  9. JAVA 多线程机制(一)

    PS:又开始忙叨JAVA了..前一阵子搞定了HTML+CSS,要开始写实验室的界面了,真没劲...博客到时候再更新吧! 先更新JAVA的吧... 多线程(一) 主要内容 1.JAVA中的线程 2.用T ...

  10. 转载:MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    转自:http://www.jb51.net/article/39199.htm 本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍, ...