论文部分内容阅读
摘 要:拦截器是Struts2框架的灵魂,它完成了Struts2框架的绝大部分功能。开发者既可以自由选择内建拦截器随意组合应用,又可以开发自定义的拦截器来实现特定的功能。本文较详尽地解析了如何开发和配置拦截器。
关键词:Struts2框架 拦截器 开发和配置 Interceptor接口
一、引言
在早期的Struts1框架中,很多基本的通用控制逻辑都固化在系统的核心控制器中,灵活性和扩展性都比较差。Struts2改变了这种做法,它把大部分核心控制器需要完成的工作按功能定义成一个个独立的拦截器,开发者可以自由选择,随意组合,极大地提高了灵活性和扩展性。
拦截器体系是Struts2框架的一个重要组成部分,大量的内建拦截器完成了这个框架的大部分操作。Struts2的拦截器在使用上非常简单方便,只要在配置文件中应用拦截器,就可以直接使用,不需要使用的时候在配置中取消即可。Struts2的拦截器由struts-default.xml、struts.xml等配置文件来管理,开发者可以很容易开发和配置自己的拦截器。
二、配置和使用拦截器
拦截器的定义过程很简单,只需要在struts.xml文件中为拦截器类指定一个拦截器名。定义拦截器使用 元素,其基本格式如下:
上述格式可以实现大多数情况下的拦截器配置。如果需要在配置拦截器时传入参数,可以在 元素中使用子元素。
此外,如果有多个拦截器常常一起使用,还可以将它们连在一起组成拦截器栈,使用时就可以直接调用这个拦截器栈。定义拦截器栈使用 元素。
定义了拦截器(包含拦截器栈)之后,就可以使用这个拦截器来拦截Action了,在Action的execute方法执行之前将会先执行拦截器的拦截行为。
通过 元素可以在Action内使用拦截器,配置语法与配置拦截器栈时引用拦截器的语法是一样的。
系统中使用多个拦截器时,拦截器的执行顺序与配置顺序有很大的关系。通常认为,先配置的拦截器会先执行,但实际上,在Action的控制逻辑方法执行之前,位于拦截器链前面的拦截器将先发生作用,在Action的控制逻辑逻辑方法执行之后,位于拦截器链前面的拦截器将后发生作用。因此,开发时需要根据实际执行要求合理进行配置。
三、配置默认拦截器
配置一个包时,可以给它指定默认拦截器(栈),一经指定,如果该包中的Action没有显式指定拦截器,则默认的拦截器将会起作用。而一旦为该包中的Action显式指定了某个拦截器,则默认的拦截器不会起作用,如果需要使用则必须手动配置。
配置默认拦截器使用 元素,在 子元素中使用,表明为该包下所有的Action配置默认的拦截器。每个包只能指定一个默认拦截器,如果想要使用多个拦截器,可以先把它们配置成一个拦截器栈。
四、实现拦截器类
虽然Struts2框架提供了大量的内置拦截器来实现Web应用的通用功能,但开发者在软件开发时可能还有一些系统逻辑相关的通用功能需要通过自定义的拦截器来实现。开发者在定义自己的拦截器类时,需要实现Interceptor接口,该接口包含3个方法:
init方法主要用于初始化资源,在该拦截器被实例化之后执行拦截之前执行且只执行一次。destroy方法用于关闭或销毁在init方法里打开的资源,在拦截器实例被销毁之前执行。intercept方法是开发者需要实现的拦截操作,它返回一个字符串作为逻辑视图。该方法的ActionInvocation参数包含了被拦截的Action的引用,通过调用该方法的invoke方法将控制权转给下一个拦截器或Action的execute方法。这个参数可以获得被拦截的Action实例,可以实现将HTTP请求中的参数解析出来,设置成Action属性,也可以直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action。
五、拦截方法的拦截器
在默认情况下,如果某个Action定义了拦截器,这个拦截器会拦截该Action中的所有方法。如果不希望拦截所有方法,可以使用拦截器的方法过滤。
实现支持方法过滤的拦截器类,需要继承MethodFilterInter-ceptor类。该类是AbstractInterceptor类的子类,它重写了intercept方法,实现了对Action的拦截行为,但是只实现了方法的过滤,至于真正的拦截逻辑还需要开发者在另外提供的一个doIntercept方法中实现。
在MethodFilterInterceptor类中增加了两个方法用来指定需要或不需要被拦截的方法:
1.setExcludeMethods方法:设置“不拦截名单”,所有在参数中列出的方法都不会被拦截。
2.setIncludeMethods方法:设置“拦截名单”,所有在参数中列出的方法都会被拦截。
由于MethodFilterInterceptor类包含了这两个方法,所以它的子类也会获得这两个方法,可以在配置文件中指定需要拦截或不需要拦截的方法。
参考文献:
[1]李刚.轻量级Java EE企业应用实战——Struts2+Spring+ Hibernate整合开发.电子工业出版社,2010
[2]陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战.清华大学出版社,2012
[3]清华大学计算机与信息管理中心.轻量级Java EE体系架构程序开发.中国铁道出版社,2010
作者简介:林海菁(1975-),女,江西南昌人,副教授,计算机应用专业硕士。
关键词:Struts2框架 拦截器 开发和配置 Interceptor接口
一、引言
在早期的Struts1框架中,很多基本的通用控制逻辑都固化在系统的核心控制器中,灵活性和扩展性都比较差。Struts2改变了这种做法,它把大部分核心控制器需要完成的工作按功能定义成一个个独立的拦截器,开发者可以自由选择,随意组合,极大地提高了灵活性和扩展性。
拦截器体系是Struts2框架的一个重要组成部分,大量的内建拦截器完成了这个框架的大部分操作。Struts2的拦截器在使用上非常简单方便,只要在配置文件中应用拦截器,就可以直接使用,不需要使用的时候在配置中取消即可。Struts2的拦截器由struts-default.xml、struts.xml等配置文件来管理,开发者可以很容易开发和配置自己的拦截器。
二、配置和使用拦截器
拦截器的定义过程很简单,只需要在struts.xml文件中为拦截器类指定一个拦截器名。定义拦截器使用
上述格式可以实现大多数情况下的拦截器配置。如果需要在配置拦截器时传入参数,可以在
此外,如果有多个拦截器常常一起使用,还可以将它们连在一起组成拦截器栈,使用时就可以直接调用这个拦截器栈。定义拦截器栈使用
定义了拦截器(包含拦截器栈)之后,就可以使用这个拦截器来拦截Action了,在Action的execute方法执行之前将会先执行拦截器的拦截行为。
通过
系统中使用多个拦截器时,拦截器的执行顺序与配置顺序有很大的关系。通常认为,先配置的拦截器会先执行,但实际上,在Action的控制逻辑方法执行之前,位于拦截器链前面的拦截器将先发生作用,在Action的控制逻辑逻辑方法执行之后,位于拦截器链前面的拦截器将后发生作用。因此,开发时需要根据实际执行要求合理进行配置。
三、配置默认拦截器
配置一个包时,可以给它指定默认拦截器(栈),一经指定,如果该包中的Action没有显式指定拦截器,则默认的拦截器将会起作用。而一旦为该包中的Action显式指定了某个拦截器,则默认的拦截器不会起作用,如果需要使用则必须手动配置。
配置默认拦截器使用
四、实现拦截器类
虽然Struts2框架提供了大量的内置拦截器来实现Web应用的通用功能,但开发者在软件开发时可能还有一些系统逻辑相关的通用功能需要通过自定义的拦截器来实现。开发者在定义自己的拦截器类时,需要实现Interceptor接口,该接口包含3个方法:
init方法主要用于初始化资源,在该拦截器被实例化之后执行拦截之前执行且只执行一次。destroy方法用于关闭或销毁在init方法里打开的资源,在拦截器实例被销毁之前执行。intercept方法是开发者需要实现的拦截操作,它返回一个字符串作为逻辑视图。该方法的ActionInvocation参数包含了被拦截的Action的引用,通过调用该方法的invoke方法将控制权转给下一个拦截器或Action的execute方法。这个参数可以获得被拦截的Action实例,可以实现将HTTP请求中的参数解析出来,设置成Action属性,也可以直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action。
五、拦截方法的拦截器
在默认情况下,如果某个Action定义了拦截器,这个拦截器会拦截该Action中的所有方法。如果不希望拦截所有方法,可以使用拦截器的方法过滤。
实现支持方法过滤的拦截器类,需要继承MethodFilterInter-ceptor类。该类是AbstractInterceptor类的子类,它重写了intercept方法,实现了对Action的拦截行为,但是只实现了方法的过滤,至于真正的拦截逻辑还需要开发者在另外提供的一个doIntercept方法中实现。
在MethodFilterInterceptor类中增加了两个方法用来指定需要或不需要被拦截的方法:
1.setExcludeMethods方法:设置“不拦截名单”,所有在参数中列出的方法都不会被拦截。
2.setIncludeMethods方法:设置“拦截名单”,所有在参数中列出的方法都会被拦截。
由于MethodFilterInterceptor类包含了这两个方法,所以它的子类也会获得这两个方法,可以在配置文件中指定需要拦截或不需要拦截的方法。
参考文献:
[1]李刚.轻量级Java EE企业应用实战——Struts2+Spring+ Hibernate整合开发.电子工业出版社,2010
[2]陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战.清华大学出版社,2012
[3]清华大学计算机与信息管理中心.轻量级Java EE体系架构程序开发.中国铁道出版社,2010
作者简介:林海菁(1975-),女,江西南昌人,副教授,计算机应用专业硕士。