文档章节

Struts2中的动态方法调用

开源俱乐部
 开源俱乐部
发布于 2014/06/11 16:02
字数 489
阅读 50
收藏 0
点赞 0
评论 0

一、动态方法调用介绍

        在Struts2开发中,默认执行的是execute方法,有时候我们会在一个Action中写多个方法,这时候我们需要在请求中调用我们想调用的方法,而不是采用多写Action的方式。

        使用动态方法可以避免Action太多。

二、动态方法调用常见方法

本示例中的Action类代码如下所示:

package blog.wlb.net.oschina.my;

public class SimpleAction {
	public String test1(){
		System.out.println("执行测试方法1");
		return "test1";
	}
	
	public String test2(){
		System.out.println("执行测试方法2");
		return "test2";
	}
	
	public String test3(){
		System.out.println("执行测试方法3");
		return "test3";
	}
	
	public String test4(){
		System.out.println("执行测试方法4");
		return "test4";
	}
}

本示例中的struts.xml中的代码如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="default" extends="struts-default">
        <action name="simple" class="blog.wlb.net.oschina.my.SimpleAction">
            <result name="test1">/test1.jsp</result>
            <result name="test2">/test2.jsp</result>
            <result name="test3">/test3.jsp</result>
        </action>
    </package>
</struts>

(1)指定method方法

        Get地址请求形如:http://localhost:8080/web/simple.action?method:test1

        Post请求代码如下所示:

<form action="web/simple.action" method="post">
    <input type="hidden" name="method:test1" />
    <input type="submit" value="提交" />
</form>

(2)叹号方式调用

        形如:http://localhost:8080/web/simple!test1.action

        注意:这种方式官方不推荐。

(3)通配符方式

        修改struts.xml中代码

<action name="simple_*" class="blog.wlb.net.oschina.my.SimpleAction" method="{1}">
            <result name="test1">/test1.jsp</result>
            <result name="test2">/test2.jsp</result>
            <result name="test3">/test3.jsp</result>
</action>

        具体访问为

        http://localhost:8080/web/simple_test1

        http://localhost:8080/web/simple_test2

        http://localhost:8080/web/simple_test3

        http://localhost:8080/web/simple_test4

        这种的意思是所有请求的为simple_开头的action都会根据下划线后面的参数动态的匹配action中的方法。

        这种方式是官方推荐的方式。

三、知识扩展

(1)如何启用或禁用动态方法调用

        动态方法调用默认是启用的,如果想禁用,可以在struts.xml中设置如下代码:

<constant name="struts.enable.DynamicMethodInvocation" value="false" />


© 著作权归作者所有

共有 人打赏支持
开源俱乐部
粉丝 10
博文 39
码字总数 31422
作品 0
朝阳
架构师
struts2基于动态代理的Interceptor

struts2核心功能都是基于struts2拦截器的,而拦截器又是基于java的动态代理。 要实现struts2拦截器,需在struts.xml中配置拦截器,每个action可以指定拦截器,指定了拦截器之后默认的拦截器链...

cjun1990 ⋅ 2015/10/23 ⋅ 0

Struts2知识总结

Struts2的作用 struts2的功能类似于servlet,仍然是接受请求,调用DAO进行处理,返回视图.它相比于servlet的优势 请求和返回视图的映射关系统一配置在struts.xml文件中,不用再耦合到java代码中了...

苏叶晚晚 ⋅ 2014/05/14 ⋅ 3

struts2 spring hibernate 原理

近期换了家公司,这家公司用的是最传统的SSH。刚开始工作的时候没注意三大框架的一些原理,今天自己谈谈看, 1、struts2 struts2是基于filter的,但同样也需要servlet的支持。一个请求被过滤...

tiger1986 ⋅ 2013/10/20 ⋅ 0

Java程序员从笨鸟到菜鸟之(四十六)细谈struts2(八)拦截器的实现原理及源码剖析

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和res...

长平狐 ⋅ 2012/11/12 ⋅ 0

开源俱乐部博文目录

MyEclipse设置 《MyEclipse Blue Edition版安装【图文】》 《MyEclipse设置编码格式》 Struts 《Struts2环境搭建》 《Struts2中Namespace的使用》 《Struts2中的动态方法调用》 《Struts2中结...

开源俱乐部 ⋅ 2014/06/30 ⋅ 0

struts2的配置

xml绑定本地约束的方法: window-->preferences(-->MyEclipse-->Files and Editors)-->XML-->XML Catalog-->user specified Entires-->Add 中: 在出现的窗口中的Key Type 中选择URI,在locat......

gsanye ⋅ 2017/06/11 ⋅ 0

Struts2理解--动态方法和method属性及通配符_默认Action

众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Action中的任意方法。 想要禁止...

mifans ⋅ 2016/09/30 ⋅ 0

Apache Struts 2 远程命令执行漏洞,你受到影响了?

Apache Struts 2 漏洞又来了...看看你所在的企业是否受到影响? 乌云导读 Apache Struts2 服务在开启动态方法调用的情况下可以远程执行任意命令,漏洞利用代码已经开始流传。 今日Apache St...

oschina ⋅ 2016/04/26 ⋅ 21

struts2的DMI调用方式

Action执行的时候并不是一定要执行execute方法 可以在配饰魏积安中配置Action的时候用method=来制定执行那个方法, 也可以在url地址中动态指定(动态方法调用MDI) 要说明的是:       前...

mrliuze ⋅ 2015/04/01 ⋅ 0

struts.enable.DynamicMethodInvocation疑惑

Struts2中有个比较让我疑惑的地方,就是这个常量的设置struts.enable.DynamicMethodInvocation,其含义是动态方法调用,我一直以为只有将将常量的值设为true,才能通过login!checkLogin.acti...

joyvag ⋅ 2011/11/29 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 31分钟前 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 34分钟前 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 38分钟前 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 46分钟前 ⋅ 0

linux实用操作命令

参考 http://blog.csdn.net/qwe6112071/article/details/50806734 ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件-A 同-a,但不列出"."和"...

简心 ⋅ 今天 ⋅ 0

preg_match处理中文符号 url编码方法

之前想过直接用符号来替换,但失败了,或者用其他方式,但有有些复杂,这个是一个新的思路,亲测可用 <?php$str='637朗逸·超速新风王(300)(白光)'; $str=iconv("UTF-8","GBK",$s...

大灰狼wow ⋅ 今天 ⋅ 0

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 今天 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 今天 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部