在之前没有使用Struts时,web与前台的数据交互经过Servlet+jsp页面。一个增删改查每每须要写四个Servlet来处理数据;在使用struts以后,Servlet再也不被使用,而是经过struts.xml+*Action.class来获取数据。这时候Action.class不须要在编写四个,只要写一个,里面再写四个方法就好了;再经过struts.xml里面配置访问路径。那么问题来了?web
struts.xml里面有应该怎么来配置呢?框架
在上一篇《Struts2 01---环境搭配》中有提到过struts.xml的规范。一个struts.xml里面常会用到的属性有<package> <action> <result>等等。jsp
在Struts2框架中是经过package来管理action、result、interceptor、interceptor-stack等配置信息的。spa
package属性以下:code
通常来讲,咱们使用的时候配置name extends就足够了。xml
<action>属性以下:blog
这个我通常会配置name class method三个属性,若是在配置的时候没有设置method属性就会执行对应的Action.class中的execute();io
配置的时候通常一个方法对应一个这样的配置:class
<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 ;