Struts2中使用DMI(动态方法调用)

来源:互联网 发布:湖北省近20年gdp数据 编辑:程序博客网 时间:2024/05/21 11:28
Struts2中使用DMI(动态方法调用)
(这是从网上找的视频资料,学习的过程中真理的)

Action执行的时候并不一定要执行execute方法,
可以在配置文件中配置Action的时候用method=来指定执行哪个方法------会产生太多的action,不推荐用,
也可以在url地址中动态指定(动态方法调用-DMI)------推荐


1.配置Action (method方式)
url为:http://localhost:8080/militaryShop/user/userAdd
<struts>
<constant name="struts.person" value="true"/>
<!-- 当调用userAdd这个action的时候,会调用对应的class对象的add方法-->
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.militaryShop.struts2.user.action.UserAction" method="add">
<!--成功,则返回的页面-->
<result>/user_add_sucess.jsp</result>
</action>
</package>
</struts>


2.DMI方式配置xml
2.1 使用"!"方式,即action名称!方法名称
url为:http://localhost:8080/militaryShop/user/user!add
add是Action中的方法
<struts>
<constant name="struts.personMode" value="true"/>
<!-- 会调用对应的class对象的add方法-->
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.militaryShop.struts2.user.action.UserAction">
<result>/user_add_sucess.jsp</result>
</action>
</package>
</struts>


2.2 使用通配符,可以将配置量降到最低。不过,一定要遵守“约定优于配置”的原则。
2.2.1
<struts>
<constant name="struts.personMode" value="true"/>
<!-- 会调用对应的class对象的add方法-->
<package name="actions" extends="struts-default" namespace="/actions">
<!--method 里的{1}表示的是,比如有个action叫Useradd,这时候method的{1}就等于add。-->
<!--url为:http://localhost:8080/militaryShop/actions/Useradd-->
<action name="User*" class="com.militaryShop.struts2.action.UserAction" method="{1}">
<!--返回的页面是useradd_sucess.jsp-->
<result>/user{1}_sucess.jsp</result>
</action>


2.2.2

<!--{1}对应的是第一个*号,{2}对应第二个*号,便于模块化的区分-->
<!--url为:http://localhost:8080/militaryShop/actions/User_add,注意,这时候的类型就是UserAction类-->
 <action name="*_*" class="com.militaryShop.struts2.action.{1}Action" method="{2}">
  <!--返回iude页面是user_add_success.jsp-->
            <result>/{1}_{2}_success.jsp</result>     
        </action>
</package>

</struts>


开发中的约定:(一般由项目经理)

规定---项目名怎么定,项目里的Action名字怎么定,Action里增、删、改、查的方法名怎么定


1.当都能匹配时,首先匹配最精确的;精确度一样时,看前后顺序,匹配前面的

2.当有的模块需要单独做一些配置,比如Filter过滤器,可以做一些精确的配置,然后用通用的配置所有的。


如果有不对的地方,请朋友们指出来,谢谢!

0 0
原创粉丝点击