【菜鸟学框架】——Struts2自定义拦截器
来源:互联网 发布:网站怎么做优化 编辑:程序博客网 时间:2024/06/04 19:02
概念
拦截器
在AOP中用于在某个方法或字段被访问之前,进行拦截然后在之前或者之后加入某些操作。拦截是AOP的一种实现策略。
在webwork中解释是动态拦截action调用的对象。提供一种机制可以使开发者定义一个action执行的前后执行的代码,也可以在action执行前阻止其执行,同时也提供了一种可以提取action中可重用的部分的方式
拦截器栈
在struts2中存在拦截器栈Interceptor Stack,也可以称为InterceptorChain。就是讲拦截器按一定顺序联结成一条链。在访问拦截器的方法或字段的时候,拦截器联众的拦截器就会按顺序进行调用。
实现原理
大部分时候拦截器方法使用代理的方式来调用。Struts2中拦截器相对简单,请求到ServletDispatcher时,Struts2查询配置文件,根据配置实例化相对的拦截器对象,串成一个列表,然后按顺序调用表中的拦截器。
拦截器API
自定义拦截器有三个API,拦截器的生命周期:随项目启动而创建,随项目的关闭而销毁。
方式一:实现接口Interceptor
public class MyInterceptor implements Interceptor {@Override//初始化public void init() {}@Override//拦截器public String intercept(ActionInvocation arg0) throws Exception {return null;}@Override//销毁public void destroy() {}}
实现接口需要实现其中三个方法,如果init,destroy不是使用也需要实现,所以不推荐使用。
方式二:继承抽象的abstractInterceptor
public class Myinterceptor2 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation arg0) throws Exception {// TODO Auto-generated method stubreturn null;}}
本质是abstractInterceptor实现了Interceptor接口,把intercept()方法设置为抽象,并对里面的init()和destroy()进行空实现。子类继承abstractInterceptor相对接口要简单。
方式三:继承MethodFilterInterceptor
此种方式称为方法过滤拦截器
public class MyInterceptor3 extends MethodFilterInterceptor{@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stubreturn null;}}
本质继承abstractInterceptor,并且提供一种机制,可以指定action中某些方法进行拦截或者不拦截,相对于前两种更加灵活。
自定义拦截器
利用方式三编写自定义拦截器
public class MyInterceptor3 extends MethodFilterInterceptor{@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {//前处理System.out.println("MyInterceptor3的前处理"); //放行invocation.invoke();//后处理System.out.println("MyInterceptor3的后处理");return "success";}}配置文件struts.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="inter" namespace="/" extends="struts-default" ><!--注册拦截器--><interceptors><interceptor name="myInter3" class="cn.xiaojia.a_interceptor.MyInterceptor3"/><!-- 注册拦截器栈 --><interceptor-stack name="myStack"> <!-- 自定义拦截器引入(建议放在20个拦截器之前) --> <interceptor-ref name="myInter3"> <!-- 指定哪些方法是不拦截的 <param name="excludeMethods">add,delete</param>--> <!-- 指定哪些方法是拦截的 拦截和不拦截不能同时指定 --> <param name="includeMethods">add,delete</param> </interceptor-ref> <!-- 引用默认的拦截器栈(20个) --><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 指定默认拦截器栈 --><default-interceptor-ref name="myStack"></default-interceptor-ref> <action name="Demo1Action_*" class="cn.xiaojia.a_interceptor.Demo1Action" method="{1}"><!-- 为Action单独指定走哪个拦截器 <interceptor-ref name="myStack"></interceptor-ref>--><result name="success" type="dispatcher">/index.jsp</result></action></package></struts>测试类
public class Demo1Action extends ActionSupport{public String add() throws Exception {System.out.println("Demo1Action_add");return SUCCESS;}public String delete() throws Exception {System.out.println("Demo1Action_delete");return SUCCESS;}public String update() throws Exception {System.out.println("Demo1Action_update");return SUCCESS;}public String find() throws Exception {System.out.println("Demo1Action_find");return SUCCESS;}}执行结果
【总结】
- 【菜鸟学框架】——Struts2自定义拦截器
- 菜鸟学SSH(四)——Struts2拦截器
- 【菜鸟学框架】——Struts2全局把控
- 【菜鸟学框架】——Struts2快速上手
- struts2——自定义拦截器!!!
- struts2——自定义拦截器
- Struts2笔记——自定义拦截器
- Struts2拦截器—自定义拦截器验证用户登录
- 框架技术--struts2拦截器与自定义拦截器使用
- Struts2自定义拦截器实例—登陆权限验证+验证框架
- 【菜鸟学框架】——struts2结合框架分析执行流程
- 【跟我一步一步学Struts2】——拦截器
- .Java程序员从笨鸟到菜鸟之(四十七)细谈struts2(九)内置拦截器和自定义拦截器详解(附源码) 分类: 学习专区 框架Struts2 Java程序员从笨鸟到菜鸟 2012-05-08 12:
- struts2 自定义拦截器
- Struts2自定义拦截器
- Struts2自定义拦截器
- struts2自定义拦截器
- Struts2自定义拦截器
- cordova的Hybrid App开发环境搭建(Windows)
- 【Linux】awk命令详解
- VMWare12安装OS X 10.11
- 进制转换
- unityUGUI关于Text字体不清晰的解决方法
- 【菜鸟学框架】——Struts2自定义拦截器
- ftp被动模式访问的诡异问题
- Java基础笔记整理---【09】面向对象程序设计-上转型对象
- vue -去掉锚点 #/
- 两个Repeater嵌套使用
- 关于group()、group(int group)、groupCount()
- Centos7 samba的安裝
- python调用cmd命令
- java中break 、continue、return的用法作用