Struts2 DMI的使用
Struts2的Action类中可以放置多个方法并在struts.xml中配置供页面调用。只要方法符合execute()方法的标准即返回类型是String就可以了。
同一个Action多个方法调用的方式中有三种方法
1.在<action>标签中有一个method的属性可以配置自定义的方法。
2.使用DMI方法。
3.使用通配符
今天我们着重介绍第两种方法的使用:
第一种方法的弊端是你在Action类中定义多少方法就需要使用多少个<action></action>标签,这样会导致struts.xml文件越来越大。
第二种方法的使用:
Action类的:
package test.struts2.DMI;
import com.opensymphony.xwork2.ActionSupport;
public class TestDMI extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public String searchUsers()throws Exception{
message = "你调用的是searchUsers()查询方法!";
return SUCCESS;
}
public String addUser()throws Exception{
message = "你调用的是addUser()添加方法!";
return SUCCESS;
}
}
和一起写法一样
struts.xml配置文件写法
<?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>
<constant name="struts.i18n.encoding" value="GBK"></constant>
<package name="struts2" extends="struts-default" namespace="/">
<action name="user" class="test.struts2.DMI.TestDMI">
<result>result.jsp</result>
</action>
<!--下面两个是第一种方法的写法,如果使用DMI下面两个action就不要了-->
<action name="userAdd" class="test.struts2.DMI.TestDMI" method="addUser">
<result>result.jsp</result>
</action>
<action name="userSearch" class="test.struts2.DMI.TestDMI" method="searchUsers">
<result>result.jsp</result>
</action>
</package>
</struts>
页面调用的写法
<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
%> <html>
<head> <title>Struts DMI</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head> <body>
<a href="userAdd">通过普通调用addUser()方法</a>
<br/>
<a href="userSearch">通过普通调用searchUsers()方法</a>
<hr>
<a href="user!addUser">通过DMI方式调用addUser()方法</a>
<br/>
<a href="user!searchUsers">通过DMI方式调用searchUsers()方法</a>
</body>
</html>
注意:大家看我的超链接中userAdd并没有加扩展名.action因为Struts2默认就会加上.action,我说的是在你没有更改默认扩展名的情况下可以不加扩展名。如果你把扩展名修改了就必须加上你修改过的扩展名如:.do;加了扩展名的页面如下:
<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
%> <html>
<head> <title>Struts DMI</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head> <body>
<a href="userAdd.action">通过普通调用addUser()方法</a>
<br/>
<a href="userSearch.action">通过普通调用searchUsers()方法</a>
<hr>
<a href="user!addUser.action">通过DMI方式调用addUser()方法</a>
<br/>
<a href="user!searchUsers.action">通过DMI方式调用searchUsers()方法</a>
</body>
</html>
如果想在链接后面加参数的话写法如:href="user!addUser.action?userName=张三"
第三种使用通配符弊端是struts.xml中比较混乱,代码可读性比较差。
Struts2 DMI的使用的更多相关文章
- struts2 DMI
在使用DMI(动态方法调用)的时候要注意struts.xml配置时要把 <constant name="struts.enable.DynamicMethodInvocation&qu ...
- struts2 DMI问题
最新开始学习struts2,在官网上下载的最新的struts2(2.3.15.2), jar包,在使用动态方法调用的时候老是报错,错误代码如下HTTP Status 404 - There is no ...
- struts2 s2-032漏洞分析
0x01Brief Description 最近面试几家公司,很多都问到了s2漏洞的原理,之前调试分析过java反序列化的漏洞,觉得s2漏洞应该不会太难,今天就分析了一下,然后发现其实漏洞的原理不难, ...
- ref:Struts2 命令执行系列回顾
ref:http://www.zerokeeper.com/vul-analysis/struts2-command-execution-series-review.html Struts2 命令执行 ...
- struts2 CVE-2012-0392 S2-008 Strict DMI does not work correctly allows remote command execution and arbitrary file overwrite
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
- Struts2的DMI跟SMI
我使用的Struts2的版本是2.5.2,今天在使用Struts2的DMI(动态方法调用)的时候出现了一个有趣的问题,我先把我的配置及代码展示一下: web.xml <filter> &l ...
- struts2的动态方法调用(DMI)和通配符映射
动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即 ...
- struts2 中使用DMI(动态调用方法)方式配置action
1.使用 "!"方式,即 action名称 ! 方法名称 struts.xml 配置 <package name="user" namespace=&qu ...
- Struts2动态方法调用(DMI)
当structs.xml解析到Action的时候,默认执行的是此action的execute()方法,但是实际开发中,我们的action中含有很多方法,比如说增删改查的方法,那么structs.xml ...
随机推荐
- Docker网络模式
[编者的话] 本文是<Docker网络及服务发现>一书的一个章节,介绍了搭建Docker单主机网络的基础内容.关于Docker网络的更多内容,包括多主机的网络,请参考该书的其他章节. @C ...
- Eclipse 在线汉化
1. 打开Eclipse , 进入菜单中 Help-->Install new Software.. 2. 到Eclipse 官网找到语言包地址,http://www.eclipse.org/ ...
- Linux 和 Windows 下对long long的输出
以前一直用__int64来识别windows还是Linux,可是发现HDU好像不认 看到wzy用的UNIX可以. UNIX是Linux下定义的,具体是什么可以去百度. 那么就可以 #ifdef UNI ...
- LeetCode:Permutations(求全排列)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
1.Collection集合迭代器使用的问题探讨: (1)问题1:能用while循环写这个程序,我能不能用for循环呢? 可以使用for循环替代. (2)问题2:不要 ...
- Linux: FTP服务原理及vsfptd的安装、配置
1.FTP 服务的安装# yum install -y vsftpd [root@rusky pub]# ls -l /etc/vsftpd/ total 20 -rw-------. 1 root ...
- Builder 建造者模式
简介 建造者模式的概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示. 大概的意思,就是一套的构建过程可以有不同的产品(表示)出来.这些产品(表示)都按照这一套的构建过程被 ...
- Command 命令模式
简介 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于[行为请求者]与[行为实现者]解耦,可实现二者之间的松耦合,以便适应变化. 将一个请求封装为一个对象,从而使你可用不同 ...
- java之JDBC
java之JDBC 一.什么是JDBC Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提 ...
- C#-高血压生活习惯数据模拟
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace test ...