struts2的Convention插件与“约定”支持

特点:
Convention插件主要特点是"约定优于配置"

引入Convention插件:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.1.6</version>
 </dependency>

Convention插件原理:
Convention插件会自动搜索位于action、actions、struts、struts2包下的所有Java类,将两种Java类当做Action处理:
1.所有实现了com.opensymphony.xwork2.Action接口的Java类
2.所有类名以Action结尾的Java类

关于扫描包的三个常量:
struts.convention.exclude.package:指定不扫描哪些包下的Java类,位于这些包结构下的Java类将不会被自动映射成Action
struts.convention.package.locators:以该常量指定的包作为搜索Action的根包。
struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action类,除了action、actions、struts、struts2四个包的类之外,还会扫描该常量指定的一个或多个包

扫描包找到合适的Action类之后,Convention插件会按约定部署这些Action,部署Action时,action、actions、struts、struts2四个包会映射到根命名空间,而这些包下的子包则被映射成对应的命名空间。由于Struts2的Action都是以package形式组织,package还有父package,对于采用Convention插件的应用而言,每个Action所处的package与其Action类所在包相似,映射Action的name属性遵循如下规则:
1.如果Action类名包含Action后缀,去掉Action
2.将Action类名类名的驼峰写法转成中划线写法(所有字母小写,单词与单词之间以中划线隔开)

按约定映射Result:
Action处理用户请求之后会返回一个字符串作为逻辑视图,该逻辑视图必须映射到实际的物理视图才有意义,Convention默认为逻辑视图和物理视图之间的映射提供了约定。默认情况下,Convention总会到Web应用的WEB-INF/content路径下定位物理资源,定位约定为:actionName+resultcode+suffix,当找不到对应视图资源时,Convention自动试图使用actionName+suffix作为物理视图资源

Action链约定:
如果希望一个Action处理结束后不是进入视图页面,而是进入另一个Action形成Action链,则通过Convention插件只需遵守如下三个约定即可:
1.第一个Action返回的逻辑视图字符串没有对应的视图资源
2.第二个Action与第一个Action处于同一个包下
3.第二个Action映射URL为:firstactionName+resultcode

自动重加载映射:
因为Convention插件是根据Action、JSP页面来动态生成映射,因此不管是Action改变,还是JSP页面改变,都需要Convention插件重新加载映射,为了自动重加载映射,只需要在web.xml,struts.xml或struts.properties文件配置两个常量即可:

<constant name="struts.devMode" value="true">
<constant name="struts.Convention.classes.reload" value="true">

Convention插件的相关常量:
Convention插件主要解决Action管理,Result管理等常见配置,但是应用中的各种全局配置,Bean配置,拦截配置等,依然需要配置文件

猜你喜欢

转载自blog.csdn.net/weixin_43638314/article/details/93162311