以上的教程都是基于XML进行配置的,除此之外,Struts还能够基于注解进行配置
- jar
1. 为了使struts支持注解,需要用到struts2-convention-plugin-2.1.7.jar 这个jar包
2. 下载好了之后,放在WEB-INF/lib 下
3. 不仅如此,还要在项目导入jar,以使得eclipse能够编译通过
- 注释掉struts.xml
接着就把struts.xml中的配置信息注释掉,以确保最后生效的是注解方式
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="basicstruts" extends="struts-default"> <!-- <action name="showProduct" class="com.how2java.action.ProductAction" method="show"> --> <!-- <result name="show">show.jsp</result> --> <!-- </action> --> </package> </struts>
- 添加注解
然后就是在ProductAction类上面添加注解
1. 在类前面添加3个注解
表示访问路径,如果是@Namespace("/test"),那么访问的时候,就需要写成http://127.0.0.1:8080/struts/test/showProduct@Namespace("/")
与配置文件中的struts-default相同,表示使用默认的一套拦截器@ParentPackage("struts-default")
预先定义多个results, "show" 返回"/show.jsp" , "home" 返回 "/index.jsp".@Results({ @Result(name="show", location="/show.jsp"), @Result(name="home", location="/index.jsp")})
注: 这里并没有用到"home",写出来的目的是为了演示这种定义多个result 的代码风格。
2. 在show方法前加上注解:
表示当访问路径是showProduct的时候,就会调用show方法@Action("showProduct")
package com.how2java.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.how2java.bean.Product; @Namespace("/") @ParentPackage("struts-default") @Results({@Result(name="show", location="/show.jsp"), @Result(name="home", location="/index.jsp")}) public class ProductAction { private Product product; @Action("showProduct") public String show() { product = new Product(); product.setName("iphone7"); return "show"; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } }
- 运行测试
访问如下路径
http://127.0.0.1:8080/struts/showProduct
- 其他常用注解
Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。(一个结果的映射)
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。(映射一个声明异常)
ExceptionMappings:一级声明异常的数组。
InterceptorRef:拦截器引用。
InterceptorRefs:拦截器引用组。
一般说来,不是所有的注解都会用到,真正用到哪个的时候再来查一下就知道怎么回事了。 - 总结
可以看出来,注解方式,就是把本来做在struts.xml里的事情,搬到了Action类里面来做。
那么到底应该用注解还是配置呢?从个人经验来讲,小项目适合用注解,大项目因为其复杂性,采用注解会导致配置信息难以维护和查询,更适合采用xml配置方式。