Struts2 02--通配符

Posted 五岁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 02--通配符相关的知识,希望对你有一定的参考价值。

   在以前没有使用Struts时,web与前台的数据交互通过Servlet+jsp页面。一个增删改查往往需要写四个Servlet来处理数据;在使用struts之后,Servlet不再被使用,而是通过struts.xml+*Action.class来获取数据。这时候Action.class不需要在编写四个,只要写一个,里面再写四个方法就行了;再通过struts.xml里面配置访问路径。那么问题来了?

struts.xml里面有应该怎么来配置呢?

在上一篇《Struts2 01---环境搭配》中有提到过struts.xml的规范。一个struts.xml里面常会用到的属性有<package> <action> <result>等等。

在Struts2框架中是通过package来管理action、result、interceptor、interceptor-stack等配置信息的。

package属性如下:

一般来说,我们使用的时候配置name extends就足够了。

<action>属性如下:

这个我一般会配置name class method三个属性,如果在配置的时候没有设置method属性就会执行对应的Action.class中的execute();

配置的时候一般一个方法对应一个这样的配置:

<action name="IndexAdd" class="com.action.IndexAction" method="add">
    <result name="success" type="redirect"> /index.jsp</result>
    </action>

可是这种配置虽然不难配置,但是随着方法越来越多,配置方法的action也会越来越多:

<action name="IndexAdd" class="com.action.IndexAction" method="add">
    <result name="success" type="redirect"> /index.jsp</result>
    </action>
<action name="IndexUpdate" class="com.action.IndexAction" method="update">
    <result name="success" type="redirect"> /index.jsp</result>
    </action>
<action name="IndexGetAll" class="com.action.IndexAction" method="GetAll">
    <result name="success" type="redirect"> /index.jsp</result>
    </action>

那么这个时候其实我们是可以通过通配符来简化配置的代码的,拿上面这一段代码来说,使用了通配符之后:

<action name="Index*" class="com.action.IndexAction" method="{1}">
    <result name="success" type="redirect"> /index.jsp</result>
    </action>

在同一个Action.class中的方法都只需要一个<action>来执行,地址是action的name属性值+Action.class中的方法名。*代指方法名,{1}代指*。

其实通配符还有一种:“!”,这个是一个过时的通配符;我不会使用,只是知道有这个通配符。

通配符的使用不仅可以用在<name>+<method>上,<result>也可以通过通配符来简化代码;

<result>属性如下:

 

type属性里面有很多返回结果类型,但是我一般用的都是转发或者重定向。默认的就是转发,重定向是redirect ;

 

以上是关于Struts2 02--通配符的主要内容,如果未能解决你的问题,请参考以下文章

漏洞通告Struts2远程代码执行漏洞通告(S2-057)

第三章Struts2 Action中动态方法调用通配符的使用

Struts2 ActionWildcard(通配符配置)约定优于配置

struts2中method={1}详解

struts2.5.2 通配符问题_亲测有用

Struts2通配符