struts2 零配置(一)

来源:互联网 发布:rsa算法c语言实现 编辑:程序博客网 时间:2024/05/22 11:39

  第一天到公司上班,看看代码吧。发现配置文件里找不到一个Action,页面如何跳转也看不到。好奇怪,第一反应就是肯定用了注解。找找注解,可发现注解也只有一些@Result,只有这些是远远不够的。跟着代码慢慢发现了规律:...coordinate!list.action,这样是访问coordinateAction下的list方法,也发现页面的命名分隔符前面coordinate-list.jsp和Action前面的一样等等类似的。然后去网上找了一些资料,才知道这是struts2的零配置。

  struts2 零配置其实并不是我们学习struts2的一个重点,但是这个必须要知道。零配置不是真的没有配置文件,只是配置文件很少,充分发挥了一条原则:约定大于配置(Convention over Configration)。 要想使用它,我们先引入jar包:struts2-convention-plugin-2.3.16.2.jar。

  先看一个我们不使用convention-plugin插件之前的action配置:struts.xml

 <struts>  <package name="login" namespace="/" extends="struts-default">   <action name="user_*" class="org.wu.struts.action.UserAction" method="{1}">    <!—- {1}表示取得在name中出现的第一个*,填写到method值中  -->    <result name="suc">/suc.jsp</result>    <result name="input">/index.jsp</result>   </action>  </package> </struts>

  如果使用convention-plugin插件,原理是一样的,该有的配置一样都不能少,只不过是换成一些约定。


1.action的定位,如何知道哪些类是action.

  对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所有java类,Convention插件会把如下两种java类当成Action处理:

  一、所有实现了com.opensymphony.xwork2.Action的java类 ;

  二、所有类名以Action结尾的java类。

  Convention插件还允许设置如下两个常量:

  struts.Convention.exclude.packges :指定不扫描哪些包下的java类,位于这些包结构下的java类将不会自动映射成Action;

  struts.convention.package.locators :Convention插件使用该常量指定的包作为搜寻Action的根包。比如:

<constant name="struts.convention.package.locators" value="web" />

 那么把web作为搜寻Action的根包。如下图:


 对于web.dispatch.report.coordinate.CoordinateAction类,按约定原本应映射的命名空间为/dispatch/report/coordinate;如果将该常量设为report,则该Action将会映射到/coordinate


2.映射Action的name

 正如我们之前的配置,每个Action类都对应一个name,以前是我们自己命名,不重复即可,现在采用映射,我们必须有一个约定。

 1)如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。
 2)将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开)
 如:LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee


3. jsp页面的定位

  默认情况下,Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的试图资源时,Convention会自动视图使用ActionURL+suffix作为物理视图资源。

  如:web.dispatch.report.coordinate.CoordinateAction 返回list字符串时,Convention优先考虑使用WEB-INF/content/dispatch/report/coordinate目录下的coordinate-list.jsp作为视图资源。如果找不到该文件,coordinate.jsp也可作为对应的试图资源。如果返回input字符串,Convention会将WEB-INF/content/dispatch/report/coordinate里面查找coordinate-input.jsp.看下图:



  Convention的Annotation,下篇详解。

  具体的阐述请参考官网上的文档http://struts.apache.org/2.1.6/docs/convention-plugin.html


0 0