Action搜索顺序及动态方法调用
来源:互联网 发布:大连软件发展状况 编辑:程序博客网 时间:2024/04/30 04:32
一:Action搜索顺序
新建一个struts2项目,命名为struts2。按照如下XML文件配置一个Action:
<package name="hello" namespace="/test" extends="struts-default"> <action name="helloworld" class="com.ittx.struts.action.HelloWorldAction" method="execute"> <result name="success">/hello.jsp</result> </action></package>
将应用部署,访问如下路径:http://localhost:8080/struts2/test/sdf/dsf/32/d/helloworld.action 依然可以访问到Action。
这主要是因为Struts2对Action名称的搜索是按照一定顺序进行的。以上面的情况为例:
1.struts2首先搜索命名空间为/test/sdf/dsf/32/d的包是否存在,存在的情况下,是否有helloworld这个Action;
2.搜索命名空间为/test/sdf/dsf/32的包是否存在,存在的情况下,是否有helloworld这个Action;
3.搜索命名空间为/test/sdf/dsf的包是否存在,存在的情况下,是否有helloworld这个Action;
4.搜索命名空间为/test/sdf的包是否存在,存在的情况下,是否有helloworld这个Action;
5.搜索命名空间为/test的包是否存在。在这种情况下能够搜索到,因此,可以访问到helloworld这个Action。
此外,如果按照这种搜索顺序搜索,发现所有的包均不存在,那么struts2则会到命名空间为””(默认命名空间)的包下面去找helloworld这个Action。
2.搜索命名空间为/test/sdf/dsf/32的包是否存在,存在的情况下,是否有helloworld这个Action;
3.搜索命名空间为/test/sdf/dsf的包是否存在,存在的情况下,是否有helloworld这个Action;
4.搜索命名空间为/test/sdf的包是否存在,存在的情况下,是否有helloworld这个Action;
5.搜索命名空间为/test的包是否存在。在这种情况下能够搜索到,因此,可以访问到helloworld这个Action。
此外,如果按照这种搜索顺序搜索,发现所有的包均不存在,那么struts2则会到命名空间为””(默认命名空间)的包下面去找helloworld这个Action。
二:动态方法调用
1:Action的method属性完成动态方法调用
Action类:
package com.Demo;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import com.opensymphony.xwork2.ActionSupport;public class StrutsDemo extends ActionSupport {private static Logger log = LogManager.getLogger(StrutsDemo.class.getName());public String add() {log.debug("执行add用户操作 >>>>>>");return "ADD";}public String update() {log.debug("执行update用户操作 >>>>>>");return "UPDATE";}}
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="user" namespace="/" extends="struts-default"><action name="StrutsDemoAdd" class="com.Demo.StrutsDemo.StrutsDemo"method="add"><result name="ADD">/add_student.jsp</result></action><action name="StrutsDemoUpdate" class="com.Demo.StrutsDemo.StrutsDemo"method="update"><result name="UPDATE">/update_student.jsp</result></action></package></struts>访问添加方法执行如下路径:http://localhost:8080/struts2/StrutsDemoAdd.action
访问修改方法执行如下路径http://localhost:8080/struts2/StrutsDemoUpdate.action
2:感叹号方式
在上述使用method属性的方式来实现动态方法有一个不好的地方在于:如果只有几个方法需要被调用,我们只需要在struts.xml文件中,写几个类似上面的代码段。如果有几百个方法需要被动态调用,那么用这种方法可能就不适合了,这样代码冗余太大,也不便于管理。因此就有了!、通配符的使用的两种方法。
首先使用!、通配符的方法。必须先添加以下两段代码
<!-- 让struts2支持动态方法调用,配置在包标签之前,这个常量也可以在 struts.properties中配置--><constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 适配struts2.5感叹号通配符调用无效的问题:在pakcage标签下添加如下标签 --><global-allowed-methods>regex:.*</global-allowed-methods>
将上述事例struts.xml改为:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts><!-- 让struts2支持动态方法调用,配置在包标签之前,这个常量也可以在 struts.properties中配置 --><!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> --><package name="user" namespace="/" extends="struts-default"><!-- 解决struts2.5 通配符调用无效的问题 --><global-allowed-methods>regex:.*</global-allowed-methods><action name="StrutsDemo" class="com.Demo.StrutsDemo"><result>/sucess.jsp</result><result name="ADD">/add_user.jsp</result><result name="UPDATE">/update_user.jsp</result></action></package></struts>
</struts>在访问时,用!加方法名调用如:
访问添加方法执行如下路径:http://localhost:8080/struts2/StrutsDemo!add.action
访问修改方法执行如下路径http://localhost:8080/struts2/StrutsDemo!update.action
访问修改方法执行如下路径http://localhost:8080/struts2/StrutsDemo!update.action
3:通配符方式
通配符方式是使用最为广泛的方式。当然,在使用之前也需要和!方式一样需要struts支持动态调配及适配通配符将上述事例的struts.xml改为:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="user" namespace="/" extends="struts-default"><!-- 解决struts2.5 通配符调用无效的问题 --><global-allowed-methods>regex:.*</global-allowed-methods><action name="StrutsDemo_*" class="com.Demo.StrutsDemo"method="{1}"><result>/sucess.jsp</result><result name="ADD">/add_user.jsp</result><result name="UPDATE">/update_user.jsp</result></action></package></struts>
说明:上述代码中<action>标签中的name属性的下划线“_“ 作用为分开类名和方法名,这是一种习惯写法,可以省略。
method="{1}中的1表示第一个*。
在访问时,用!加方法名调用如:
访问添加方法执行如下路径:http://localhost:8080/struts2/StrutsDemo_add.action
访问修改方法执行如下路径http://localhost:8080/struts2/StrutsDemo_update.action
访问修改方法执行如下路径http://localhost:8080/struts2/StrutsDemo_update.action
如上文所述,method="{1}中的1表示第一个*。那么通配符是可以有多个的,将上述事例修改,
可以用第一个*表示类名,第二个*号表示方法名。代码如下:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="user" namespace="/" extends="struts-default"><!-- 解决struts2.5 通配符调用无效的问题 --><global-allowed-methods>regex:.*</global-allowed-methods><action name="*_*" class="com.Demo.{1}"method="{2}"><result>/sucess.jsp</result><result name="ADD">/add_user.jsp</result><result name="UPDATE">/update_user.jsp</result></action></package></struts>
0 0
- Action搜索顺序及动态方法调用
- 动态调用action方法
- 动态调用action方法
- Action动态方法调用
- 动态及静态的调用Action中的方法
- action中的动态方法调用
- Action的动态调用方法
- struts2 action动态方法调用
- Action的动态调用方法
- Action中的动态方法调用
- Action的动态方法调用
- struts2:路径搜索与动态调用action
- Action的搜索顺序
- action的搜索顺序
- 动态的调用action里面的方法
- struts2动态方法调用 ActionName!methodName.action
- struts2动态方法调用 ActionName!methodName.action
- 复习Struts2之Action动态方法调用
- 数据结构课程设计—图书管理系统
- IE SCRIPT1028: 缺少标识符、字符串或数字
- StringBuilder的基本用法
- linux应用编程共享内存
- 在哪
- Action搜索顺序及动态方法调用
- 函数和函数编程-----Python
- Swift3 MPMoviePlayerViewController的使用,iOS播放视频
- Msm: WARNING: No validity info available for session
- .net调用被隐藏了信息的com的解决方法.
- MySQL 使用explain分析sql语句的查询效率(一)
- ReactiveCocoa常用操作方法
- 第一篇文章,以后好好记录,好好学习!
- csdn转载的别人的文章的方法