我们在配置一个action的时候,为了避免下Action类的每个方法都映射成一个action 我们可以这样配置:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="*User" method="{1}" class="vaannila.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
以前我们是:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="User" class="vaannila.UserAction">
<result name="success">/success.jsp</result>
</action>
<action name="addUser" method="add" class="vaannila.UserAction">
<result name="success">/success.jsp</result>
</action>
<action name="updateUser" method="update" class="vaannila.UserAction">
<result name="success">/success.jsp</result>
</action>
<action name="deleteUser" method="delete" class="vaannila.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
写了比较多的重复代码,现在struts2支持动态方法调用,以通配符的形式来查找对应的方法。
下面我们写java代码
package vaannila;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String message;
public String execute()
{
message = "Inside execute method";
return SUCCESS;
}
public String add()
{
message = "Inside add method";
return SUCCESS;
}
public String update()
{
message = "Inside update method";
return SUCCESS;
}
public String delete()
{
message = "Inside delete method";
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
最后就是我们访问action的url怎么写呢?
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="User" >
<s:submit />
<s:submit action="addUser" value="Add" />
<s:submit action="updateUser" value="Update" />
<s:submit action="deleteUser" value="Delete" />
</s:form>
</body>
</html>
addUser匹配在strut2中配置的*User,那么add将会被作为了方法的名字到UserAction查找叫add的方法。这样就实现了动态方法的关系映射。
分享到:
相关推荐
1、升级所需要的jar(见附件): freemarker-2.3.22.jar ognl-3.0.19.jar ... <constant name="struts.enable.DynamicMethodInvocation" value="true"/> 这两行请不要加在外边。“加在这里”</struts>
1. **开启DMI:** 需要在struts.xml配置文件中设置`struts.enable.DynamicMethodInvocation`为`true`。 ```xml <constant name="struts.enable.DynamicMethodInvocation" value="true"/> ``` 2. **Action类...
在修复 S2-033 漏洞时,我们可以采取两种方法:一是关闭动态方法调用,在 struts.xml 中的 `”struts.enable.DynamicMethodInvocation” value=”true” />` 改为 `”struts.enable.DynamicMethodInvocation” value...
<constant name="struts.enable.DynamicMethodInvocation" value="true"/> ``` 配置完成后,用户可以通过`/MyAction!methodName.action`来调用`MyAction`类的`methodName`方法。 每种Action访问方式都有其适用...
要启用动态方法调用,需要在Struts配置文件中设置`struts.enable.DynamicMethodInvocation`常量为`true`,默认情况下它是启用的。 **示例:** 在登录验证的Action类中,可以添加一个注册用户的`register`方法...
#### 1.1 `struts.enable.DynamicMethodInvocation` 此配置项用于控制Struts是否启用动态方法调用(Dynamic Method Invocation,简称DMI)。DMI允许Struts框架在执行Action时通过字符串形式指定要调用的方法,从而...
method invocation and dispatch. After reading this part, you will understand the advanced features of Ice and how to effectively use them to find the correct trade-off between performance and resource...
struts.enable.DynamicMethodInvocation 属性设置 Struts 2 是否支持动态方法调用,该属性的默认值是 true。如果需要关闭动态方法调用,可以将该属性设置为 false。 这些常量都是 Struts2 框架的核心组件,它们控制...
- 动态方法调用(Dynamic Method Invocation,DMI)是一个可选特性,通过设置`struts.enable.DynamicMethodInvocation`为`true`来启用,允许使用方法名作为URL的一部分。 3. **测试项目**: - 在浏览器中访问`...
- **Dynamic Method Invocation**:`struts.enable.DynamicMethodInvocation`属性控制动态方法调用功能,当设置为`false`时,可以避免一些安全风险,但可能会限制某些功能的实现。 #### 4. **IDE配置与开发环境** ...
struts.enable.DynamicMethodInvocation Allows one to disable dynamic method invocation from the URL 允许动态方法调用 struts.freemarker.manager.classname The org.apache.struts2.views.freemarker....
- **struts.enable.DynamicMethodInvocation**:控制是否启用动态方法调用,这是一个安全敏感的配置项,因为它允许通过URL参数调用Action类的方法。 #### 实践建议 1. **编码一致性**:始终确保`struts.i18n....
这个配置文件设置了默认的动态方法调用为禁用(`DynamicMethodInvocation`),开发模式开启(`devMode`),定义了一个名为“default”的包,一个默认的动作“index”指向/index.jsp页面,并且配置了全局错误处理页面...
在后续章节中,你会深入到Struts2的动态方法调用(Dynamic Method Invocation,DMI)和固定方法调用(Fixed Method Invocation,FMI)的区别。DMI允许你根据用户请求动态选择Action的方法,而FMI则更倾向于每个Action...
Allows IDispatch dynamic method invocation through Variant Assignment of script functions to Delphi events Uses byte code as an intermediate format and allows storing and reloading compiled ...
- **同时支持静态和动态方法调用(Support for both static and dynamic method invocation)**:CORBA支持这两种方法调用模式,DCOM也支持类似的特性。 #### 6. RPC/RMI包支持的内容 **题目描述:** 下列选项中,...
- `<constant>`标签用于设置Struts2的全局常量,如上面示例中的`DynamicMethodInvocation`和`devMode`。 - `<include>`标签用于导入其他XML配置文件,以保持配置的模块化。 **配置Action** 在Struts2中,`package`...
在这个例子中,`struts.enable.DynamicMethodInvocation`设置为`false`意味着不启用动态方法调用,`struts.devMode`设置为`false`表示不在开发模式下运行,以提高性能。 6. **创建Action类**:在对应的包`...