Struts2——Annotation

从struts2.1开始,struts2不再推荐用CodeBehind作为零配置插件,而是使用Convention插件来支持零配置。

Struts2的Convention插件的特点是“约定优于配置”

1、使用Convention插件

将struts2-convention-plugin.jar放置到应用的/WEB-INF/lib下即可。

对于Convention插件而言,他会自动搜索位于action,actions,struts和struts2包下的java类,将两种java类当做Action来处理:

    1)所有实现了Action接口的java类

    2)所有以Action结尾的java类

Convention插件有三个常量,分别为:

    1)struts.convention.exclude.packages:指定不扫描哪些包下的java类,这些包下的Java类不会被映射成Action

    2)struts.convention.package.locators:使用该常量指定的包作为搜寻Action的根包。例如:对于action.lee.LoginAction类,按约定原本应该映射到/lee/login,如果设置该常量为lee,那Action将会被映射到/login

    3)struts.convention.action.packages:struts2除了会扫描action,actions,struts和struts2包之外,还会以该常量指定的包作为根包来搜索Action。

2、映射Action的约定

2.1 命名空间

    action,actions,struts,struts2被映射成根命名空间,这些包下的子包被命名成相应的命名空间。例如com.hy.cc.actions.book.GetBooks映射的Action的命名空间就是/book

    Action的name属性,根据类名来映射,遵循两步原则:

    1)如果该Action类名包含Action后缀,则将Action类名的Action后缀去掉,否则不做任何处理。

    2)将Action类名的驼峰写法转换成中线写法(所有字母小写,单词和单词之间以中画线隔开)。

    例如:LoginAction映射成login,GetBooks映射成get-books,AddEmployeeAction映射成add-employee。

3、映射Result的映射

    默认情况下,Convention总会到WEB-INF/content路径下定位物理资源,定位资源的约定是:actionurl+resultcode+suffix,如果找不到对应的视图资源,Convention会试图用actionurl+suffix作为物理资源视图。

   例如:actions.lee.LoginAction返回success字符串时,Convention优先考虑使用/WEB-INF/content/lee目录下的login-success.jsp作为视图资源,如果找不到,login.jsp也可以作为视图资源。

 

4、Aciton链的约定

   如果一个Action结束后,不进入视图页面,而是进入另外一个Action,形成Action链,需要遵守三个约定:

   1)第一个Action返回的逻辑视图没有对应的视图资源

   2)第二个Action和第一个Action放在同一个包下。

   3)第二个Action映射的地址为:firstactionurl+resultcode

 

前面的配置虽然简单,但是只能映射Action和Result,无法映射如拦截器、异常处理等信息,Convention使用Annotation来管理这些信息,并且可以用Annotation来管理Action和Result,从而覆盖Convention的约定

 

5、Annotation

    5.1 Action相关的Annotation

    @Action修饰Action类里的方法,用于将该方法映射到指定的URL。

    @Action可以指定一个value值,用于指定该Action映射的URL

    @Action可以指定一个params属性,用于指定参数名和参数值。

    @Actions也用于修饰Action类里的方法,将该方法映射成多个URL

 

    5.2 Result相关的Annotation

   与Result配置相关的三个Annotation分别是@Result,@Results和@ResultPath

   @Result用于定义逻辑视图和物理视图之间的关系,属性包括:

   1)name:必选。相当<result/>中的name属性的作用。

   2)type:可选。相当<result/>中的type属性的作用。

   3)location:可选。相当于<result></result>中间部分的内容,用于指定实际物理视图的位置。

   4)params:可选,参数设置。

 

   @Result的两种用法:

   1)Action级的Result映射。

   2)方法级别的Result映射。

 

   @Results:用于组织多个@Result。

   @ResultPath:用于修饰包和Action类。

   例子:

image

 

  5.3 包和命名空间相关的Annotation

  @Namespace:修饰Action及所在包的命名空间。

  @Namespaces:组织多个Namespace。

  @ParentPackage:指定Action所在包的父包。

  

   5.4异常处理相关的Annotation

   @ExcepitonMapping 和 @ExceptionMappings

  

   5.5 拦截器相关的Annotation

   @InterceptorRef 和 @InterceptorRefs

你可能感兴趣的:(annotation)