注解

发表时间:2017-05-16 15:46:03 浏览量( 25 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

struts2除了提供xml的方式配置action外,还可以使用注解的方式进行配置,这样我们就可以实现“零配置”了,当然struts.xml这个总配置文件还是需要的。

一、导入注解的插件包

struts2-convention-plugin-2.3.16

二、使用注解

注解的功能和使用xml配置的功能是一样的,只不过是换了一种写法而已,struts2的常用的主机功能如下:

@ParentPackage,这个注解对应了xml文件中的package节点extends属性,继承父包,一般我们使用struts-default。

@Namespace,命名空间,也就是xml文件中<package>的namespace属性。

@Action,这个注解对应<action>节点。这个注解可以应用于action类上,也可以应用于方法上。这个注解中有几个属性:

    value,表示action的URL,也就是<action>节点中的name属性。

    results,表示action的多个result;这个属性是一个数组属性,因此可以定义多个Result。

    interceptorRefs,表示action的多个拦截器。这个属性也是一个数组属性,因此可以定义多个拦截器。

    params,这是一个String类型的数组,它按照name/value的形式组织,是传给action的参数。

    exceptionMappings,这是异常属性,它是一个ExceptionMapping的数组属性,表示action的异常,在使用时必须引用相应的拦截器。

    @Result,这个注解对应了<result>节点。这个注解只能应用于action类上。这个注解中也有几个属性:

        name,表示action方法的返回值,也就是<result>节点的name属性。

        location,表示view层文件的位置。

        type,是result的类型,比如redirect、redirectAction等等

        params(),是一个String数组。也是以name/value形式传送给result的参数。

我们可以新建一个GoodsAction类,实现代码如下:

//继承的父包和命名空间的配置
@ParentPackage("struts-default")
@Namespace("/goods")
public class GoodsAction extends ActionSupport {

       //最简单的配置
	@Action("listgoods")
	public String listGoods() {
		System.out.println("listgoods");
		return SUCCESS;
	}

	//result的使用
	@Action(value = "addgoods", results = {
			@Result(name = "success", location = "/success.jsp", type = "redirect", params = {
					"abc", "liubao" }),
			@Result(name = "error", location = "/error.jsp") })
	public String addgoods() {
		System.out.println("listgoods");
		return SUCCESS;
	}

	//拦截器的引用
	@Action(value = "updategoods", results = {
			@Result(name = "success", location = "/success.jsp", type = "redirect", params = {
					"abc", "liubao" }),
			@Result(name = "error", location = "/error.jsp") }, interceptorRefs = {
			@InterceptorRef("timer"), @InterceptorRef("defaultStack") })
	public String updategoods() {
		System.out.println("listgoods");
		return ERROR;
	}

}

这样,我们就不需要为在xml配置文件中定义了。

三、注解和使用XML配置那个更好

注解和XML那个好一点?其实这是一个见仁见智的问题,完全是个人喜好。虽然使用配置文件可以使用通配符的方式实现零配置,但是不好维护;我们也可以使用<include>标签导入外部文件来实现模块化,但是配置起来还是显得有点麻烦。所以,我个人感觉注解使用起来相对容易一点,不用每一次写action类的时候都需要打开一个xm写l配置信息。

但是,struts.xml还是需要的,我们自定义的拦截器和resultType等等这些扩展功能还是需要在struts.xml中定义的。其他建议使用注解的方式。