您的位置:首页 > 编程语言 > Java开发

Struts框架学习之拦截器

2015-06-08 17:03 483 查看
为什么用拦截器?
Struts是基于mvc模式的开发框架。任何框架,都会预先实现一部分功能。struts框架自带功能的实现,是通过一个个拦截器完成的。

Struts早起版本中,核心功能是通过一个类完成的,这个类叫做核心过滤器。

Struts2.0之后的版本,每一个拦截功能,都由一个单独的类实现,形成一个独立的拦截器,用户可以自由组合这些拦截器来完成自己想要的功能。

有了拦截器,我们的开发就类似于组装电脑配件。带来的好处:解耦。

拦截器简介:

Struts2预定义了一些拦截器,实现了某些功能,如文件上传等,默认的拦截器在struts-default.xml文件中配置。

如果使用struts2的相应功能,可以一个个引用拦截器! 也可以定义拦截器栈,包含多个拦截器!开发中就直接使用拦截器栈即可!

struts2定义了默认执行的拦截器栈!

拦截器可以对action请求进行拦截, 从而执行一些预处理操作,预处理操作完成后,控制权进入到action!

action处理请求完成,又回到拦截器!

注意:

如果struts自带的拦截器完成不了需要,用户也可以自定义拦截器!

如果用户自定义了拦截器,并使用,struts2默认的拦截器就不会调用!

自定义拦截器的时候,要引用默认的拦截器!(defaultStack)

<interceptors>

// 拦截器定义

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法时, 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">

</interceptor>

// 执行拦截器

<default-interceptor-ref name="defaultStack"/>

</interceptors>

拦截器与过滤器区别

共同点:都可以对请求进行拦截! 处理一些公用的操作!

区别:

1.作用范围

拦截器是struts2的概念!(只在struts中用)

过滤器是servlet中技术!(在servlet/struts中都可以使用!)

2. 拦截区域

拦截器,拦截的是action中方法的执行!

过滤器,可以拦截任何请求!

Struts2自定义拦截器实现

1、定义一个类实现Interceptor接口

2、实现生命周期方法

3、声明和引用自定义拦截器

Interceptor接口

com.opensymphony.xwork2.interceptor.Interceptor

所有的自定义拦截器都需要实现该接口,且以单例运行。

init: 创建后初始化时被调用, 它在拦截器的生命周期内只被调用一次。

interecept: 每拦截一个动作请求, 该方法就会被调用一次。

destroy: 拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.





Struts2自带的拦截器



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: