欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2:拦截器

程序员文章站 2022-07-09 17:15:01
...

Struts2拦截器

struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面。

struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每次执行默认的拦截器。

在struts2-core包里面,可以找到struts-default.xml这个文件,它定义了Struts的所有拦截器。因为我们在启动服务器的时候会自动装载这个文件,因此我们才可以在Action中使用到Struts2为我们提供的功能,比如数据自动封装、文件上传等等。

在struts-default.xml中定义的拦截器就有32个之多,Struts2为了方便我们对拦截器的引用,提供了拦截器栈的定义。

<interceptor-stack name="defaultStack">
	<interceptor-ref name="exception" />
	<interceptor-ref name="alias" />
	<interceptor-ref name="servletConfig" />
	<interceptor-ref name="i18n" />
	<interceptor-ref name="prepare" />
	<interceptor-ref name="chain" />
	<interceptor-ref name="scopedModelDriven" />
	<interceptor-ref name="modelDriven" />
	<interceptor-ref name="fileUpload" />
	<interceptor-ref name="checkbox" />
	<interceptor-ref name="multiselect" />
	<interceptor-ref name="staticParams" />
	<interceptor-ref name="actionMappingParams" />
	<interceptor-ref name="params">
		<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
	</interceptor-ref>
	<interceptor-ref name="conversionError" />
	<interceptor-ref name="validation">
		<param name="excludeMethods">input,back,cancel,browse</param>
	</interceptor-ref>
	<interceptor-ref name="workflow">
		<param name="excludeMethods">input,back,cancel,browse</param>
	</interceptor-ref>
	<interceptor-ref name="debugging" />
</interceptor-stack>

也就是说:当我们要引用多个拦截器的时候,只要把拦截器都放在栈里头,在外边引用拦截器即可!

值得注意的是:Struts2默认执行的是默认拦截器栈,一旦用户有指定执行哪些拦截器,那么默认的拦截器栈就不会被执行!

拦截器在什么时候执行?

在action对象创建之后,action的方法执行之前

拦截器底层原理

拦截器底层使用两个原理

第一个AOP思想

AOP是面向切面(方面)编程,有基本功能,扩展功能,不通过修改源代码方式扩展功能

Struts2:拦截器

第二个责任链模式

责任链模式和过滤链很相似。

责任链模式:要执行多个操作,有添加、修改、删除三个操作。首先执行添加操作,添加操作执行之后 做类似于放行操作,执行修改操作,修改操作执行之后做类似于放行操作,执行删除操作。

过滤链:一个请求可有多个过滤器进行过滤,每个过滤器只有做放行才能到下一个过滤器。

Struts2:拦截器 

AOP思想和责任链模式如何应用到拦截器里面?

拦截器在action对象创建之后,action的方法执行之前执行。

在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作。

在执行拦截器时候,执行很多的拦截器,这个过程使用责任链模式。假如执行三个拦截器,执行拦截器1,执行拦截器1之后做放行操作,执行拦截器2,执行拦截器2之后做放行,执行拦截器3,执行拦截器3之后放行,执行action的方法。

Struts2:拦截器

过滤器和拦截器区别

过滤器:过滤器理论上可以任意内容,比如html、jsp、servlet、图片路径

拦截器:拦截器只可以拦截action