动态方法调用有三种方法:

1.同一Action多次映射,每个action标签的method对应要调用的方法。

当要调用的方法多了就会增加struts.xml文件的复杂性。

2.struts.DynamicMethodInvocation=true (struts.properties文件)

或<constant name="struts.enableDynamicMethodInvocation" value=true></constant(struts.xml文件)

struts.properties文件优先级更高

因为常量可以在下面多个配置文件中进行定义,所以我们需要了解struts2加载常量的搜索顺序: 
struts-default.xml 
struts-plugin.xml 
struts.xml 
struts.properties 
web.xml

如果在在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。

这个顺序是在多个文件中配置了同一个常量的前提下,比如struts.action.extension这个常量在struts.xml中有而struts.properties没有,那么struts.xml仍会覆盖默认的值aciton,,。

3.通配符(官方推荐的方法)

案例:

<!--索引下标从1开始-->
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="success">/{2}_{1}.jsp</result>
</action>

访问http://127.0.0.1:8080/Ch12/User_add.action

调用action.UserAction.add(),若业务处理返回success,会跳转到add_User.jsp

指定多个配置文件:

我们不可能将所有的内容写在一个struts.xml文件中,特别是在比较大的应用中更是如此,为便于管理,就可以根据功能的不同写在不同的.xml文件中,然后将这些.xml文件包含在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>
<include file="hello.xml"></include>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
</struts>

第7行指定了编码,防止多个xml文件的编码格式不同导致乱码。

hello.xml的内容是实际要配置的action。

默认Action:

通常用于显示404页面

 <package name="testStruts" extends="struts-default" namespace="/aaa">
<action name="notFound">
<result>/404.jsp</result>
</action>
</package>

如果action标签没有指定class属性,默认会不经业务逻辑直接跳转到result。

注意:如果action的name用了通配符,首先会去和通配符\匹配,如果没有才会寻找默认的Action

Action后缀:

StrutsPrepareAndExecuteFilter是Struts2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。

* 根据配置文件:struts2-core-x.x.x.jar包下的org.apache.struts2/default.properties文件定义的常量决定
    struts.action.extension=action,,

* 默认处理的后缀是可以通过常量”struts.action.extension“进行修改的,如下面配置Struts 2只处理以.do为后缀的请求路径:

<struts>

<constant name="struts.action.extension" value="do"/>

</struts>

* 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:

<constant name="struts.action.extension" value="do,go"/>

也可在struts.properties文件中配置

也可在web.xml中配置

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-value>
<param-value>do,action,,</param-value>
</init-param>
</filter>

参考:https://www.cnblogs.com/pwc1996/p/4839162.html

另外,result的name属性区分大小写,默认是success。如果多个result的name相同(包含多个未指定的情况),那么将跳转到最后一个result的页面

Struts2学习笔记:DMI,多个配置文件,默认Action,后缀的更多相关文章

  1. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  2. 【Struts2学习笔记(3)】至Action注入属性值

    (1)有属性注入? 当一些属性不适合固定写入时适合使用这样的方法,对于一些使用特频繁的类或者方法,非常多类都会用到,那么使用属性注入会节省很多其它的力气.并且在设计的时候就能够提早的把该属性给定义出来 ...

  3. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  4. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  5. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  6. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  7. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

  8. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)

         5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...

  9. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)

    自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...

随机推荐

  1. YTU 2552: 好好学习天天向上

    2552: 好好学习天天向上 时间限制: 1 Sec  内存限制: 128 MB 提交: 55  解决: 42 题目描述 在刚过去不久的母亲节中,小红答应妈妈要好好学习天天向上.小红对数学特别不擅长, ...

  2. 深度学习——无监督,自动编码器——尽管自动编码器与 PCA 很相似,but自动编码器既能表征线性变换,也能表征非线性变换;而 PCA 只能执行线性变换

    自动编码器是一种有三层的神经网络:输入层.隐藏层(编码层)和解码层.该网络的目的是重构其输入,使其隐藏层学习到该输入的良好表征. 自动编码器神经网络是一种无监督机器学习算法,其应用了反向传播,可将目标 ...

  3. bzoj4873

    http://www.lydsy.com/JudgeOnline/problem.php?id=4873 最大权闭合子图... 建图: 1.d[i][j]:i->j区间的费用,d[i][j] & ...

  4. 使用IntelliJ IDEA 创建Maven项目(入门)

    一. 下载Maven 下载地址:http://maven.apache.org/download.cgi tar.gz压缩格式用于unix操作系统,而zip用于windows的操作系统,但在windo ...

  5. PCB 机器学习(ML.NET)初体验实现PCB加投率预测

    使用ML.NET建立PCB加投率模型对单一蚀刻工序进行加投率预测, 此实例为最简单预测,要想实现全流程加投率预测挑战难度还是挺大的,可以查看另一种关于大数据在PCB行业应用---加投率计算基本原理:P ...

  6. [Swift]通天遁地Swift

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. May Challenge 2019 Division 2 水题讲解

    Reduce to One 这题其实蛮水的? 题意就是说: 给定一个 1~n 的序列,每次挑两个数 x y 合并,合并值为 \(x+y+xy\) ,然后求不断合并最后剩下的一个的最大值 随便搞搞发现答 ...

  8. Parameterized testing with any Python test framework

    1. 在进行单元测试时,很多时候需要进行参数化 尝试过使用 from nose_parameterized import parameterized 但在使用过程中会报错,后来将上面的内容改为了下面的 ...

  9. 题解报告:hdu 2612 Find a way(双bfs)

    Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...

  10. 【SpringMVC框架】非注解的处理器映射器和适配器

    参考来源:     http://blog.csdn.net/acmman/article/details/46968939 处理器映射器就是根据URL来找Handler,处理器适配器就是按照它要求的 ...