struts2的零配置

零配置(zero configuration)的意思是不使用任何配置文件部署struts2应用,如struts.xml、struts.properties等。零配置并不是真的“零配置”,只是没有传统的配置文件struts.xml了,但是仍然需要使用@Annotation配置。@Annocation翻译为@注解、@标注,有些资料也翻译为@注释。

1、通过@注解实现Actin零配置

在@注解大行其道的今天,基本所有的框架都提供了@注解支持,例如Spring框架、Hibernate框架、EJB框架、Tomcat服务器等。

struts2也提供了@注解配置。零配置的原理是在Action类中使用@注解定义Action资源,如@Namespace定义命名空间,一般不常用。@Results定义结果集,可以包括多个@Result。@Result定义一个结果集。例如:

action方法:

package com.lmb.struts2.action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;

@Namespace(value="/test") //命名空间

@Results({   //结果集
             //三个结果页面
    @Result(name="success",location="/success.jsp"),
    @Result(name="redirect",location="/redirect.jsp",type="ServletRedirectResult.class"),
    @Result(name="login",location="/login.jsp") 
})

public class AnnotatedAction extends ActionSupport{

    public String execute(){
        return "login";
    }

    public String add() {
        return "success";
    }

    public String login() {
        return "login";
    }
}

代码使用标注定义了namespace为/test,定义了3个Result,其中一个是重定向页面。struts2并没有提供配置Action访问名称的注解。该action可以使用默认的名称/struts2/annotated.action访问,即去掉类名中的Action,同时首字母小写。如果访问其中的add()方法,可以用
/struts2/annotated!add.action。如果配置了namespace=”/test”,则必须以/struts2/test/annotated.action访问。注意namespace必须以“/”开头。

2、web.xml中指定Action目录

零配置时必须在web.xml的Filter中指定被@注解标注的Action包的位置。参数actionPackages指定被@注解标注的Action所在的Package,否则会默认到struts.xml中加载Action配置。零配置时只加载有@注解的Action,不会加载没有@注解的Action。例如:

  <!-- struts2的Filter,所有的请求都被映射到struts2上 -->
   <filter>
    <filter-name>struts2</filter-name>
                            <!-- Filter分发器实现 -->
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>actionPackages</param-name><!-- 零配置Action所在的包 -->
        <param-value>com.lmb.struts2.action</param-value> <!-- 包名 -->
    </init-param>
  </filter>

struts加载时会自动部署本package吓得送油Action。如果某个Action位于本package下的另一个package下面,例如:com.lmb.struts2.action.test,则“/test”会被当成该Action的namespace。默认的“/test”也可以用@Namespace标注覆盖。

如果声明了actionPackages参数,则struts.xml中的配置会失效。目前,struts2只允许使用一种配置方式,要么使用struts.xml,要么使用零配置。未来版本中应该可以同时使用,请查阅室及使用的struts2版本。

更多更详细的struts2零配置请参看struts2的文档和其他博客:
http://struts.apache.org/docs/convention-plugin.html#ConventionPlugin-Annotationreference

http://www.cnblogs.com/fpjason/archive/2009/08/01/1536671.html

3、零配置的Action访问方式

目前,零配置时只能用action!method.action即“类名!方法名.action”的形式访问Action的方法。例如运行PersonAction的login()方法可以使用
http://localhost:8080/struts2/person!login.action.

你可能感兴趣的:(注解,annotation,struts2,零配置)