在以前没有使用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 ;