【郑州校区】Interceptor拦截器
1. Interceptor介绍 Struts2中的interceptor它是基于spring aop思想,而aop思想它本质上是通过动态代理来实现。我们strtus2的拦截器它主要是拦截Action的操作,在action的执行前或执行后进行一些其它的功能操作。 拦截器链(拦截器栈)简单说,就是可以将多个拦截器形成一个链,在访问它们时依次访问。 以下是struts2的执行流程图 执行的过程: 当我们发送请求访问Action时,会被StrutsPrepareAndExecuteFilter拦截 在其doFilter方法内执行了 execute.executeAction(request, response, mapping); 这个代码执行后 dispatcher.serviceAction(request, response, mapping); serviceAction方法执行 在这个方法执行过程中会创建Action代理对象 ActionProxy proxy = getContainer().getInstance(ActionProxyFactory.class).createActionProxy( namespace, name, method, extraContext, true, false); 通过proxy去执行了proxy.execute(); 在execute方法内 return invocation.invoke(); invocation它是ActionInvocation一个对象 在invoke方法内 会去加载我们的配置文件,将配置文件中所有的interceptor得到进行遍历。 在struts-default.xml文件中定义了默认加载的拦截器栈 defaultStack 在每一个拦截器的interceptor方法内,又调用了DefaultActionInvocation的invoke方法,其实就是递归调用。 2. Interceptor作用与自定义Interceptor我们使用intercep[tor可以在action执行前后进行处理工作。例如,完成权限控制。 问题:如何定义Interceptor? 所有的Interceptor都要实现一个接口 com.opensymphony.xwork2.interceptor.Interceptor 在配置文件中声明Interceptor 我们也可以将多个interceptor封装成一个stack 可以在Action的配置中引入自己的interceptor 在使用时name也可以引入一个interceptor stack. 注意:当我们显示的引入了一个自定义的Interceptor,那么默认的defaultStack就不会在导入,需要手动导入。 3. Interceptor练习如果用户没有登录,不可以查看所有的商品信息。 创建一个Interceptor 在struts.xml文件中声明,并在指定的action中引用 完成功能 修改登录action中操作 将用户存储到session中。 在interceptor中完成权限控制 问题1:如何在login指定的视图页面上展示错误信息,例如权限不足。 问题2:我们在struts.xml文件中配置action时,可以使用*通配置符,这时它可以处理多个方法,你指定的interceptor只想拦截某一个方法,怎样处理? 我们可以使用Interceptor接口的一个实现类来完成操作 在配置时,就可以指定哪些方法拦截,哪些方法不拦截 传智播客·黑马程序员郑州校区地址 河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话0371-56061160 / 61/62 来校路线地铁一号线梧桐街站A口出
|