首页 > 代码库 > Struts2基于注解的Action配置

Struts2基于注解的Action配置

1· 既然我们开发的是web项目所以web.xml文件时必不可少的

在web.xml 中配置拦截用户请求的 filter拦截用户的所有的请求并且初始化 struts.xml文件

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>

</filter-mapping>


2·使用注解的方式配置struts就需要引入一个jar包

虽然说是零配置但是struts.xml还是少不了的配置如下:

    <!-- 指定由spring负责action对象的创建 -->
    <constant name="struts.objectFactory" value=http://www.mamicode.com/"spring" />
    <!-- 所有匹配*.action的请求都由struts2处理,可以扩展 -->
    <constant name="struts.action.extension" value=http://www.mamicode.com/"action" />
    <!-- 是否启用开发模式,上线时一般不需要开启,开发时获取更多的日志信息 -->
    <constant name="struts.devMode" value=http://www.mamicode.com/"true" />
    <!-- struts配置文件改动后,是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value=http://www.mamicode.com/"true" />
    <!-- 设置浏览器是否缓存静态内容 -->
    <constant name="struts.serve.static.browserCache" value=http://www.mamicode.com/"false" />
    <!-- 请求参数的编码方式 -->
    <constant name="struts.i18n.encoding" value=http://www.mamicode.com/"utf-8" />
    <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
    <constant name="struts.i18n.reload" value=http://www.mamicode.com/"true" />
    <!-- 文件上传最大值 -->
    <constant name="struts.multipart.maxSize" value=http://www.mamicode.com/"104857600" />
    <!-- 让struts2支持动态方法调用,在调用时使用userAction !login .action方式进行调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value=http://www.mamicode.com/"true" />

    <!-- Action名称中是否还是用斜线 -->
    <constant name="struts.enable.SlashesInActionNames" value=http://www.mamicode.com/"false" />
    <!-- 允许标签中使用表达式语法 -->
    <constant name="struts.tag.altSyntax" value=http://www.mamicode.com/"true" />
    <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
    <constant name="struts.dispatcher.parametersWorkaround" value=http://www.mamicode.com/"false" />


3·action类的注解:

@ParentPackage("basePackage")  //指定父包
@Namespace("/user")   //指定命名空间

//   @Results( { @Result(name = "success", location = "/main.jsp"), @Result(name = "error", location = "/error.jsp") })   全局的实现跳转的页面

@Action("userAction")  //指定action的访问url                                       
public class UserAction extends BaseAction implements ModelDriven<User> {

    

     private User user = new User();

    @Override
    public User getModel() {
        return user;
    }

    private UserServiceI service;
    
    public UserServiceI getService() {
        return service;
    }
    @Autowired    // spring注解
    public void setService(UserServiceI service) {
        this.service = service;
    }
             // @Action(value = http://www.mamicode.com/"reg", results = { @Result(name = "success", location = "/index.jsp") }) 另一种方式localhost:8080/struts_demo/user/userAction/reg
    public void reg(){
        JSON j = new JSON();
        try {
            service.addUser(user);
            j.setSuccess(true);
            j.setMessage("注册成功");
        } catch (Exception e) {
            j.setMessage("注册失败");
            e.printStackTrace();
        }
        super.writeJson(j);
    }


}

上面的1.2使用的是实现ModalDriven<User>(模型驱动的方式)方便接收页面传递过来的值

以前我们是把页面上所有的传值写一个类级变量然后定义其getter / setter方法

这样的话如果变量过多会很麻烦,所以我们实现模型驱动实现其getModal方法即可,在modal层建立实例写入getter/setter方法

总结:

Namespace:指定命名空间。

ParentPackage:指定父包。

Result:提供了Action结果的映射。(一个结果的映射)

Results:“Result”注解列表

ResultPath:指定结果页面的基路径。

Action:指定Action的访问URL。

Actions:“Action”注解列表。

ExceptionMapping:指定异常映射。(映射一个声明异常)

ExceptionMappings:一级声明异常的数组。

InterceptorRef:拦截器引用。

InterceptorRefs:拦截器引用组。


4.  调用:localhost:8080/struts_demo/user/userAction!reg .action  即可