扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下Struts2中拦截器机制与自定义拦截器的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
成都创新互联专注于网站建设|成都网站维护公司|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖搬家公司等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身策划品质网站。
前言
拦截器体系是Struts2框架的重要组成部分,不夸张的说,没有拦截器体系,也就没有这么好用的Struts2框架了。在Struts2框架中,大量的拦截器完成了很多基础的功能,比如,params拦截器负责解析HTTP请求的参数,并设置Action的属性;servlet-config拦截器直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action;fileUpload拦截器则负责解析请求参数中的文件域,并将一个文件域设置成Action的三个属性......这一切的一切都是由内建的拦截器来完成的。所以,掌握了Struts2中拦截器的使用原理与方式,也就把握住了Struts2框架的“命脉”。
但是学习Struts2到现在,除了在web.xml中配置了一个StrutsPrepareAndExecuteFilter过滤器外,还没有接触其它的什么拦截器,那为什么我们的应用能够很好的运行呢?实际上,Struts2已经默认启用了大量通用的拦截器,只要配置Action的package继承了struts-default包,这些拦截器就会起作用。下面来看看Struts2内建的拦截器。
Struts2内建的拦截器
在Struts2框架中有很多内建的拦截器,这些拦截器几乎完成了Struts2框架70%的工作,包括解析请求参数,将请求参数赋值给Action属性等,Struts2这种灵巧的设计,很大程度上得益于拦截器的设计;当需要扩展Struts2功能时,只需要提供对应拦截器,并将它配置在Struts2容器中即可。
这些内建的拦截器以name-class对的形式配置在struts-default.xml文件中,其中name是拦截器名字,就是以后使用该拦截器的唯一标识;class则指定了该拦截器的实现类。对于这些内建的拦截器的详细介绍,请参见官方文档。
配置拦截器
在Struts.xml文件中定义拦截器只需为拦截器类指定一个拦截器名,就完成了拦截器定义。定义拦截器使用
参数值
除此之外,还可以把多个拦截器连在一起组成拦截器栈,在拦截器中使用
...
从程序结构上来看,拦截器栈由多个拦截器组成;但是从程序功能上来说,拦截器栈和拦截器是一样的,它们包含的方法都会在Action的execute方法执行之前自动执行。所以,我们完全可以把拦截器栈当成一个更大的拦截器。
由于拦截器栈和拦截器是一致的,所以拦截器栈中又可以包含拦截器栈,例如:
使用拦截器
一旦定义了拦截器栈和拦截器后,就可以使用这个拦截器栈或拦截器来拦截Action了,拦截器的拦截行为将会在Action的execute方法执行之前被执行。
通过使用
/error.jsp /welcome.jsp 动态参数
这样配置完成以后,在执行DownloadAction之前,这三个拦截器都会起作用。
配置默认拦截器
当配置一个包时,可以为其指定默认拦截器。一旦为某个包指定了默认的拦截器,如果该包中的Action没有显式指定拦截器,则默认的拦截器将会起作用。但是,一旦我们为该包中的Action显式应用了某个拦截器,则默认的拦截器不会起作用;如果该Action需要使用该默认拦截器,则必须手动配置该拦截器的引用。
只有当Action中没有显式应用拦截器时,该Action所在包的默认拦截器才会生效。
配置默认拦截器使用
也可以为默认拦截器指定参数,例如:
参数值
在struts-default.xml文件中,配置了一个名为struts-default的抽象包,在该包中定义了名为defaultStack的默认拦截器引用。当我们定义的包继承struts-default包时,也继承了它的默认拦截器栈:defaultStack,这也意味着,如果我们不为Action显式地应用拦截器,则defaultStack拦截器栈会自动生效。
自定义拦截器
1>.添加一个类,让它继承AbstractInterceptor类,或者实现Interceptor接口
public class TimeInterceptor extends AbstractInterceptor { /** * 拦截器的核心方法intercept的返回值是一个字符串 */ @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub return "login"; } }
2>.在struts.xml的package中添加interceptors子节点,并在它下面添加Interceptor节点
3>.在想被拦截的action节点下添加子节点interceptor-ref
/pages/Category/list.jsp
以上是“Struts2中拦截器机制与自定义拦截器的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流