Struts1 提供了DispatchAction 实现一个Action中名含多个业务逻辑
现在我们使用Struts2 也可实现现样的效果, 是使用通配符来实现的.
struts.xml 文件中,常用
<action /> 的name , class, method 三个属性都支持通配符
<resutl/> 也支持通配符
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="*Action_*" class="ssh.org.web.{1}Action" method="{2}">
<result name="success">/user/success.jsp</result>
<result name="input">/user/user.jsp</result>
</action>
</package>
</struts>
针对上面的配置, 假如我拉的URL 是:http://localhost/struts/UserAction_addUser
.action
UserAction_addUser 与*Action_* 匹配 , 第一个* 是User, 第二个*是addUser,
{1} 的值为 User, {2}的值为addUser , 区分大小写.
class="ssh.org.web.{1}Action" 赋值后是,由User 替代{1}
method="{2}" 赋值后是, 由addUser 替代{2}
从而实现动态的找到Action 与找个Action中的方法.
----------------------------------------------------------------------
其中一个Action代码: 类名是UaerAction, 其中有addUser()方法
与URL http://localhost/struts/UserAction_addUser
.action 相匹配, 模式为*Action_*
package ssh.org.web;
import java.util.Date;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport
{
private static final long serialVersionUID = 1L;
private String username;
private int age;
private Date birthday;
private List<String> aihao;
public String addUser() throws Exception
{
//添加用户
return "success";
}
public void validateAddUser()
{
if (null == username || "".equals(username))
{
addFieldError("username", "用户名不能为空");
}
System.out.println("validateAddUser() 验证方法 ");
}
public String getUserList()
{
//取得所有用户
return "success";
}
public void validateGetUserList()
{
//验证方法略...
System.out.println("validateAddUser() 验证方法 ");
}
public String getUsername()
{
return username;
}
public void setUsername(final String username)
{
this.username = username;
}
public int getAge()
{
return age;
}
public void setAge(final int age)
{
this.age = age;
}
public Date getBirthday()
{
return birthday;
}
public void setBirthday(final Date birthday)
{
this.birthday = birthday;
}
public List<String> getAihao()
{
return aihao;
}
public void setAihao(final List<String> aihao)
{
this.aihao = aihao;
}
}
------------------------------------------------------------------
<resutl/> 也支持通配符,
struts.xml文件 一例子:
<action name="page_*" class="ssh.org.web.HrefAction" >
<result name="success">{1}.jsp</result>
</action>
-----------------------------------------------------------------------
最后在说一说优先级的问题
通配符 匹配方式 , 当我们写多个<action name="*" .../> 时, 意思就是 你的URL 可能与多个 <action name="*" .../> 匹配上, 先执行那一个?
答: 按 书写的先后顺序, 先找到哪个, 就执行哪个.
分享到:
相关推荐
那么,在 Struts2 中如何动态调用 Action 的指定方法呢? 首先,我们可以在表单中使用 `<form action="login!register">` 将表单提交到 LoginAction 的 register() 方法。这是最简单的方式,但是这种方式不够灵活,...
此外,它还支持动态方法调用,即根据请求参数的不同,动态决定执行哪个方法。例如,你可以设置一个`execute`方法来处理默认请求,而其他方法则通过通配符调用。 在实际开发中,我们还可以结合Struts2的拦截器...
在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...
这种需求可以通过多种方式实现,其中一种较为常见的做法是利用中间JSP页面来间接调用Action,从而达到自动加载数据的目的。 #### 二、原理及实现步骤 ##### 2.1 原理介绍 在Struts框架中,通常通过配置文件...
默认情况下,Struts 2会调用Action类中的`execute()`方法。 2. **Struts.xml**: 这是Struts 2的配置文件,用于配置Action、拦截器等组件。 3. **Interceptors (拦截器)**: 拦截器用于处理Action执行前后的一系列...
在JSP中,我们可以通过标签库(Tag Library)如JSTL(JavaServer Pages Standard Tag Library)来处理表单数据和调用Action。例如,我们可以使用`<c:choose>`、`<c:when>`等标签进行条件判断,决定调用哪个Action。 ...
在传统的MVC模式中,控制器(Controller)通常通过硬编码的方式处理请求,而动态方法调用则允许我们动态地决定执行哪个Action的方法。这在处理多样化的用户请求和构建复杂应用时尤其有用。 1. **JS方法调用**: 在...
Struts2 动态方法调用(DMI,Dynamic Method Invocation)是Struts2框架中一个特色功能,允许开发者通过URL直接调用Action类中的方法,而无需预先在配置文件中显式声明这些方法。这种机制增加了开发的灵活性,但也...
下面将详细探讨Struts2中动态方法调用的实现机制、配置方式以及应用场景。 ### Struts2动态方法调用的实现原理 在Struts2中,动态方法调用基于Action类中的方法名与URL中的参数相匹配的原则。当一个请求到达时,...
`DefaultActionProxy`内部包含了Action的配置信息,它会创建并初始化`DefaultActionInvocation`,`DefaultActionInvocation`是Action执行过程的具体实现,它会按照配置信息调用Action的方法并处理结果。 - `...
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...
6. **传递参数**:动态调用时,`DynamicInvoke`方法接收一个对象数组作为参数,数组中的元素顺序应与目标函数的参数顺序一致。如果目标函数有返回值,`DynamicInvoke`会返回该值。 注意,如果DLL函数使用了非托管...
Struts2会根据URL中的部分替换通配符,并尝试调用Action类中的方法。如果找不到与之匹配的方法,Struts2将会回退到默认的执行方法(通常是`execute`)。 为了更高效地利用这一特性,我们需要遵循以下几点: 1. 方法...
如果使用表单提交的方式来调用Action,则可以通过表单中的`<input>`标签来传递参数。例如,`<input name="paraName" value="arg0">`表示传递一个名为`paraName`的参数,其值为`arg0`。 #### 总结 通过JavaScript...
在.NET框架中,C#语言提供了强大的反射机制,使得我们能够在运行时动态地获取类型、接口、属性、字段和方法等信息,甚至可以创建对象并调用其方法。本篇文章将详细探讨如何利用C#来动态获取DLL类库文件中的方法并...
总之,动态调用Web Service是Java开发中的一个重要技能,轴线2提供了一个强大而灵活的框架来实现这一功能。`WebServiceInvoker.java`文件的核心就是按照上述步骤实现动态调用的过程,理解其工作原理对于提升Web服务...
sp页面的form表单里面有一个属性值action,当提交jsp页面上的form表单时,系统会根据action的值来找到servlet里面具体的action,(这里的servlet是在web.xml配置文件里面),然后调用action里面的execute()方法,...
在传统的Struts2配置中,一个Action通常对应一个方法,通过URL路径与Action名进行绑定。然而,当业务需求变得复杂时,这样的设计可能不够灵活。`method`属性的引入,使得我们可以根据用户请求中的参数来决定执行哪个...
在C#中,动态调用意味着在运行时创建对象并执行方法,而不是在编译时。这对于处理未知或不固定的Web服务接口特别有用。下面是一步步的实现过程: 1. **导入Web服务引用**:通常,我们会使用`Add Service Reference`...
在.NET框架中,C#是一种常用的编程语言,用于构建各种应用程序,包括Windows桌面应用(如...在VS2010中,动态调用Web服务是实现跨平台通信的一个强大工具,尤其适用于那些无法或不希望使用自动生成的代理类的情况。