struts.xml里的action的几种配置
<package name="hello" namespace="/abc" extends="struts-default">
<!-- 1.最常用的方法 -->
<action name="login" class="com.lxitedu.ant.User" >
<result name="input">/login.jsp</result>
<result name="success">/success.jsp</result>
<result name="error">/failure.jsp</result>
</action>
<!-- 2 方法 -->
<action name="*action" class="com.lxitedu.ant.User" method="{1}">
<result name="input">/login.jsp</result>
<result name="success">/success.jsp</result>
<result name="error">/failure.jsp</result>
</action>
<!-- 3 方法 -->
<action name="*" class="com.lxitedu.ant.User" >
<result name="input">/login.jsp</result>
<result name="success">/success.jsp</result>
<result name="error">/failure.jsp</result>
</action>
</package>
user.java
action类 User.java
package com.lxitedu.ant;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class User extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private HttpServletResponse response;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
setName(getName());
return SUCCESS;
}
@SuppressWarnings("unchecked")
public void validate() {
if (getName().equals("") || getPassword().equals("")) {
addFieldError("name", getText("error.name"));
} else if (!(getName().equals("chenmiao") && getPassword().equals("123456"))) {
addFieldError("name", getText("error.error"));
}
}
public String add() throws Exception {
System.out.println("add");
setName(getName());
return SUCCESS;
}
}
login.jsp
login.jsp 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="abc/login.action" >
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 最普通的 -->
<s:form action="login!add.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 在action直接指定进入add方法 -->
<s:form action="login!add.action" namespace="/abc">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 另一种从action直接指定进入add方法 -->
<s:form action="abc/addaction.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 对应的sturs.xml文件的第2配置法进add方法 -->
<s:form action="abc/login.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 对应的sturs.xml文件的第3种配置进execute()方法 -->
</body>
</html>
成功页面 success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h2>Login Success. Welcome <s:property value="name" /></h2>
</body>
</html>
说明:
动态方法调用
(1)action名!方法名.action
action类里面自定义一个方法,add();
如:(s:form action="login!add.action" namespace="/abc");
指定之后,则不执行action类里面的execute()方法,而是add方法。
(2)在struts.xml里面的action里面配置
如:<action name="login" class="com.lxitedu.ant.User" method=“方法名”>
注意:一般不推荐使用!
(3) <action name="*action" class="com.lxitedu.ant.User" method="{1}">
然后在js页面的action改为(s:form action="方法名action.action");
如:(s:form action="addaction.action");
(4)struts.xml里面配置
<action name="*" class="com.lxitedu.ant.User">
所有请求都进execute()方法;
如果需要指定进入自定义方法则在action里面加上method=“方法名”
如:<action name="*" class="com.lxitedu.ant.User" method="add">
所以请求都进add方法。
(5)<action name="*" class="com.{1}类名" >能够动态的找到包名或者类名。
(6)<action name="*_*" class="com.{1}类名" method="{2}">
能够动态的去找到包名或者方法名
在页面上<s:form action="ant_add" namespace="/abc">
那么找到的就是com.ant类名中的add方法。
分享到:
相关推荐
在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...
Struts2作为一款流行的Java Web框架,其动态方法调用(Dynamic Method Invocation,DMI)功能为开发者提供了极大的灵活性。在传统的MVC模式中,控制器(Controller)通常通过硬编码的方式处理请求,而动态方法调用则...
Struts2 动态方法调用(DMI,Dynamic Method Invocation)是Struts2框架中一个特色功能,允许开发者通过URL直接调用Action类中的方法,而无需预先在配置文件中显式声明这些方法。这种机制增加了开发的灵活性,但也...
Struts2_动态方法调用,使用struts2架构的动态方法进行资源调用
Struts2 动态方法调用详解 Struts2 框架提供了动态方法调用的机制,允许一个 Action 对应多个请求,从而减少 Action 的数量。这种机制可以提高系统的灵活性和可维护性。 方法一:指定 Method 属性 在 Struts2 中...
### Struts2动态方法调用的实现原理 在Struts2中,动态方法调用基于Action类中的方法名与URL中的参数相匹配的原则。当一个请求到达时,Struts2会解析URL中的方法名(通常是通过在Action名称后加上“!”符号后跟的...
Struts2动态方法调用是该框架的一个重要特性,它允许开发者通过URL直接映射到Action类中的方法,而不仅仅是类。这种灵活性极大地增强了应用程序的可扩展性和可维护性。在Struts2中,动态方法调用是通过ActionMapper...
### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...
2. 动态方法调用 在URL请求中,我们可以传递一个名为`method`的参数,Struts2会根据这个参数值来寻找并执行相应的方法。例如,访问`http://example.com/multiMethodTest.action?method=executeMethod2`,Struts2就...
通配符动态调用是Struts2动态调用的一种进阶形式,它的主要优点在于减少重复配置。传统的动态调用可能需要为每个method写一条配置,例如: ```xml *" class="com.example.UserAction"> <result type="dispatcher">...
本文将重点讨论Struts2中的API耦合和动态方法调用,这两种特性对于理解框架的工作原理和提高代码的灵活性至关重要。 首先,我们来看看Struts2 API耦合的几种方式: 1. **ActionContext类**:ActionContext是Struts...
此外,它还支持动态方法调用,即根据请求参数的不同,动态决定执行哪个方法。例如,你可以设置一个`execute`方法来处理默认请求,而其他方法则通过通配符调用。 在实际开发中,我们还可以结合Struts2的拦截器...
压缩包文件`struts2_5_dynamicRequestMethod`很可能包含了与Struts2动态方法调用相关的示例代码和测试用例。这些源代码可能展示了如何配置Struts2的配置文件以支持动态方法调用,以及如何在Action类中定义对应的方法...
三、Struts2动态方法调用 Struts2支持动态方法调用,即可以根据请求参数动态决定Action中的执行方法,无需在struts.xml中显式列出所有方法。 四、Struts2结果类型 1. Forward:将控制权转发到另一个页面。 2. ...
在Struts2中,异步调用机制是实现页面动态更新和提高用户体验的关键技术之一。这个案例“struts014”很可能展示了如何在Struts2中实现异步调用来处理耗时操作,如数据库查询或复杂计算。 异步调用的基本概念是,...
在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...
Struts2 支持动态方法调用,这意味着你可以通过 URL 直接调用 Action 类的方法,无需预先在配置文件中硬编码。这种灵活性使得应用的扩展性更强。 **4. Struts2 结合 Hibernate3** Hibernate3 是一个流行的 Java ORM...
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...