【Struts2】:Interceptor的配置和使用

原创 2016年05月31日 15:50:15

        在之前的博客中,介绍了Struts2的内建拦截器和自定义拦截器的一些内容,但是有了这些自带和自定义的拦截器之后,如何去配置和使用,还没有跟大家详细说明,接下来我们就一起学习一下,Struts2中Interceptor的配置和使用。


        Struts2框架里的拦截器配置信息是写在配置文件struts.xml里的,通常我们只需为拦截器类指定一个拦截器名称,就完成了拦截器的定义。定义拦截器使用<interceptor…/>元素来定义,其最简单的格式如下;

<span style="font-size:18px;">        <!-- 通过指定拦截器名称和拦截器实现类来定义拦截器 -->
<span style="white-space:pre">	</span><interceptor name="拦截器名" class="拦截器实现类">

	</interceptor></span>

        如果还需要在配置拦截器的时候传入参数,则需要在<interceptor…/>元素中使用<param…/>子元素进行参数设置,这种方式设置的是拦截器参数的默认参数值。具体格式如下;
<span style="font-size:18px;"><span style="white-space: pre;">	</span><!-- 通过指定拦截器名和拦截器实现类来定义拦截器 -->
	<interceptor name="拦截器名" class="拦截器实现类">
	<!-- 为拦截器指定参数值 -->
		<param name="参数名">参数值</param>
	</interceptor></span>

        除此之外,还可以把多个拦截器放在一起组成一个“拦截器栈”,比如,如果在Action执行之前想要同时做登录检查、安全性检查以及日志记录等等操作,则可以把这三个操作对应的拦截器组成一个拦截器栈。定义拦截器栈使用<interceptor-stack…/>元素,拦截器栈是由多个拦截器组成的,因此需要在<interceptor-stack…/>元素中使用<interceptor-ref…/>元素来定义多个拦截器的引用,即该拦截器栈由多个<interceptor-ref…/>元素指定的拦截器组成。


        如何理解拦截器栈呢?单从结构上来看,拦截器栈是由多个拦截器组成的,但是从功能上来看,拦截器和拦截器栈都是一样的,都是完成对Action的拦截,在Action的execute方法执行之前自动执行,其实,拦截器栈就是一个更大的拦截器而已。拦截器栈的配置信息如下:

<span style="font-size:18px;"><span style="white-space: pre;">	</span><interceptor-stack name="拦截器栈名">
		<interceptor-ref name="拦截器一"/>
		<interceptor-ref name="拦截器二"/>
		<!-- 还可以配置更多的拦截器-->
		...
	</interceptor-stack></span>

        上文我们提到了拦截器栈和拦截器本质上是一种东西,因此拦截器栈里也可以再嵌套或者说是包含拦截器栈,比如下面的配置信息就示例了拦截器栈二引用了拦截器栈一:
<span style="font-size:18px;"><span style="white-space:pre">	</span><interceptor-stack name="拦截器栈1">
		<interceptor-ref name="拦截器一"/>
		<interceptor-ref name="拦截器二"/>
		<!-- 还可以配置更多的拦截器-->
		...
	</interceptor-stack>
			
	<interceptor-stack name="拦截器栈2">
		<interceptor-ref name="拦截器一"/>
		<interceptor-ref name="拦截器栈1"/>
		<!-- 还可以配置更多的拦截器-->
		...
	</interceptor-stack></span>
        这样做的一个做大好处是软件复用,按照软件需求将拦截器分类,组成不同的拦截器栈,然后在程序开发中根据不同的需求去直接调用响应的拦截器栈即可,这样就不用同时调用那么多的拦截器了,灵活组合即可。

        一旦定义了拦截器和拦截器栈之后,就可以使用这个拦截器或者拦截器栈来拦截Action了,拦截器的拦截行为将会在Action的execute方法执行之前执行。通过<interceptor-ref…/>元素可以在Action内使用拦截器,其配置语法和在拦截器栈里面引用拦截器是一样的。如下示例,说明了如何在Action中配置拦截器和拦截器栈。

<span style="font-size:18px;"><span style="white-space: pre;">	</span><!-- 配置本系统所使用的包 -->
	<package name="lee" extends="struts-default">
		<!-- 应用所需使用的拦截器都在该元素下配置 -->
		<interceptors>
			<!-- 配置mySimple拦截器 -->
			<interceptor name="mySimple"
			class="org.ljw.app.interceptor.SimpleInterceptor">
				<!-- 为拦截器指定参数值 -->
				<param name="name">简单拦截器</param>
			</interceptor>
		</interceptors>

		<action name="login" class="org.ljw.app.action.LoginAction">
			<result name="error">/WEB-INF/content/error.jsp</result>
			<result>/WEB-INF/content/welcome.jsp</result> 
			<!-- 配置系统的默认拦截器 -->
			<interceptor-ref name="defaultStack"/>
			<!-- 应用自定义的mySimple拦截器 -->
			<interceptor-ref name="mySimple">
				<param name="name">改名后的拦截器</param>
			</interceptor-ref>
		</action>
		<action name="*">
			<result>/WEB-INF/content/{1}.jsp</result>
		</action>
	</package></span>


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

struts2 Interceptor详解

(Interceptors) 拦截器是Struts2 的核心技术之一,或许以前对Struts2 中的某些实现感到不可思议,比如说类型转化 校验 国际化 等...

Struts2 拦截器(Interceptor )原理和配置

一、Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成一个列...
  • voins
  • voins
  • 2016年08月05日 17:10
  • 2718

Struts2自定义Interceptor

1.继承类AbstractInterceptor import javax.servlet.http.HttpServletRequest; import org.apache.struts2...
  • unei66
  • unei66
  • 2013年07月11日 15:22
  • 4982

Struts2 拦截器(Interceptor )原理和配置

一、Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成...

Spring mvc interceptor配置拦截器

xml代码: http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...

struts2 -- interceptor(如何配置Interceptor)

1.interceptor的配置方法1. 普通配置法struts>    package name="struts2" extends="struts-default">        interce...

Struts2中Interceptor拦截器的使用

1 Struts2中拦截器的原理
  • ghuiL
  • ghuiL
  • 2014年11月11日 13:52
  • 1029

struts2注解总结----@InterceptorRef

写在前面: 本文主要讲的是注解方式的拦截器的使用,所以xml文件的不会细讲,文中的代码也比较简单,没有什么权限控制啊,拦截信息之类的代码,重点还是说明注解方式的使用方法,了解了使用方法之后,内容可以自...

struts2的Interceptor配置说明(一)

struts2的配置说明

Struts2 利用拦截器 interceptor 控制登陆和访问权限

最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Struts2】:Interceptor的配置和使用
举报原因:
原因补充:

(最多只允许输入30个字)