convention插件与"约定"支持

1.约定优于配置

        convention插件,感觉很高大上的样子,据说支持零配置,不需要struts.xml,也不需要使用Annotation,而是由Struts根据约定来自动配置。其实也就那么回事。在项目中加入struts2-convention-plugin-2.2.1.jar类库,就口以了。

2.Action的搜索和映射约定

       在web.xml中设置让struts2的核心Filter拦截请求后,按照以往的经验,得弄一个struts.xml文件,指定下发送请求向action对应的Action处理类,然后这个Action处理类,对请求进行操作处理。那么现在使用了convention插件后,不需要了这个struts.xml文件了~(当然Action类还是需要的。。不然没法处理了~哈哈),那么我们发送的请求,怎么才能找到对应的类呢!

       别急,convention插件就这么约定了,约法三章!它会自动搜索位于action、actions、struts、sturts2包下的所有Java类。当遇到以下两种情况的Java类时,就会把它当成Action处理:

        1.所有实现了com.opensymphony.xwork2.Action的Java类。

        2.所有类名以Action结尾的Java类。

        扯了一大堆,具体是个什么情况呢~?就是当然发送一个请求时,action="×××"时,怎么去找action对应的Action嘞。在所有包名为*.action,*actions,*struts、*sturts2下面去找,比如有一个是*.action.×××Action(Action结尾),那没错了,就是它了。而当有一个*.actions.×××,时而他继承了com.opensymphony.xwork2.Action,那么没错!找的就是他!(当然这个找。。不需要你去找,自动约定找啦~方便不!)

        到这里,那么问题来了,如果不是这种*.action.×××Action形式的 ,而是*.action.??.×××Action那么他对应的action是啥类,就是??/×××,而又规定了当×××Action类名是多个个单词时:AaaBbbAction对应a-b.action。

        突然又想到如果在同一个包名下,有2个类,一个是×××Action,另一个是×××但是实现了com.opensymphony.xwork2.Action的Java类,找的是谁呢~可以试试,事实证明。。找的是×××。那么问题又来了如果在不同包名下,一个是*.action,一个是*actions,有相同的是×××Action,找的又是谁!?情况变的复杂了。

3.按约定映射result

        能找到对应的Action,处理的问题是解决了~那么返回结果,找谁去~木有struts.xml呀。别急,这个也约定了~当Action处理用户请求后返回一个字符串作为逻辑视图,Convention默认也为逻辑视图和物理视图之间的映射提供了约定。默认的情况下是到Web应用的WEB-INF/content路径下定位物理资源,约定是actionName+resultcode+suffix找不到时,就视图使用actionName+resultcode+suffix。具体情况不在赘述,赋表一张仅供参考。

convention插件与

4.config-browser插件

       为了看到Struts2应用里Action等各种资源的映射情况,可以使用Config Browser插件,使用起来也很简单。只需在项目中加入struts2-config-browser-plugin-2.2.1.jar类库即可。然后在浏览器中输入:http://localhost:8888/Convention/config-browser/showConfig.action各种情况,一目了然!

你可能感兴趣的:(J2EE学习杂记,J2EE,convention插件,约定,映射)