Struts中的拦截器
来源:互联网 发布:如何报考网络大学 编辑:程序博客网 时间:2024/05/01 06:51
拦截器是动态拦截Action调用的对象,它定义一个action执行前后执行的代码,可以提取action中可重用部分的方式。拦截器可以在不修改源码的基础上,对动作方法进行增强。
拦截器VS过滤器
拦截器:是Struts2框架的,只有使用了Struts2框架才可以使用它;进入Struts2核心内部才起作用;多次调用。
过滤器:是Servlet规范的一部分,任何javaweb工厂都可以使用它;对所有要访问字段都拦截,容器初始化调用一次
拦截器执行机制
在访问Struts2核心内部时,在动作方法执行前正序执行,执行完动作方法和结果视图后,再倒序执行。
Strut.xml文件配置
在包里声明拦截器,同时在Action标签中引用拦截器
<struts><!-- 开启开发者模式 --><constant name="struts.devMode" value="true"></constant><package name="p" extends="struts-default"><!-- 声明拦截器 --><interceptors><interceptor name="MyInterceptor1" class="com.itheima.interceptors.MyInterceptor1"></interceptor><interceptor name="MyInterceptor2" class="com.itheima.interceptors.MyInterceptor2"></interceptor></interceptors><action name="demo1" class="com.itheima.web.action.Demo1Action" method="demo1"><!-- 引用拦截器1 2 --><interceptor-ref name="MyInterceptor1"></interceptor-ref><interceptor-ref name="MyInterceptor2"></interceptor-ref><!-- 视图回显 --><result name="success">/success.jsp</result></action></package></struts>
动作方法
public class Demo1Action extends ActionSupport {public String demo1(){System.out.println("Demo1Action类中的demo1方法执行了");return SUCCESS;}}
拦截器1:
public class MyInterceptor1 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("拦截器1:执行动作方法之前");//进入拦截器2中String str=invocation.invoke();//打印拦截器中String内容System.out.println(str);System.out.println("拦截器1:执行动作方法之后");return str;}}
拦截器2:
public class MyInterceptor2 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("拦截器2:执行动作方法之前");//进入动作方法Demo1Action的demo1()方法中String str=invocation.invoke();//打印拦截器中String内容System.out.println(str);System.out.println("拦截器2:执行动作方法之后");return str;}}
success.jsp页面:
<%System.out.println("success.jsp执行了"); %>
当访问demo1.action时控制台显示: 执行图为:
注意:当我们是使用自己定义的拦截器的时候,struts2给我们提供的拦截器就失效了,所以需要将默认拦截器添加
<!-- 引入默认拦截器 --><interceptor-ref name="defaultStack"></interceptor-ref>
设置默认拦截器:
<!-- 声明拦截器 --><interceptors><interceptor name="MyInterceptor1" class="com.itheima.interceptors.MyInterceptor1"></interceptor><interceptor name="MyInterceptor2" class="com.itheima.interceptors.MyInterceptor2"></interceptor><!-- 将新定义的拦截器和默认的拦截器组合成新的拦截器 --><interceptor-stack name="myDefaultStack"><interceptor-ref name="MyInterceptor1"/><interceptor-ref name="MyInterceptor2"/><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 设置为默认拦截器 --><default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
参数传递:
<param name="excludeMethods">login</param><param name="includeMethods">add,del</param>
解释:excludeMethods拦截器拦截的方法,includeMethods拦截器方式的方法
拦截器很大一部分是用在登录页面上,就像有时候我们在再未登录状态下访问网站内部信息,这个时候就会跳出登录页面让我们进行的登录操作。感觉越学到后面,很多内容都是和配置文件、反射有关的知识,所以我们需要把这些框架的内部逻辑搞清楚。
0 0
- Struts中的拦截器
- Struts中的拦截器
- struts中的拦截器验证登录
- Struts中的拦截器学习笔记
- Struts中的拦截器机制 --- 可插拔式设计
- Struts中的拦截器以及自定义拦截器
- struts中拦截器拦截Action中的execute方法后的具体拦截流程
- Struts中的拦截器——登录验证实例
- Struts中的拦截器未登录的session配置
- 关于Struts框架中的拦截器之极其不解
- Struts 2.0 拦截器
- struts拦截器
- struts 拦截器
- Struts 2拦截器
- Struts拦截器
- Struts 2拦截器
- struts拦截器
- Struts之拦截器
- ASCII 码表
- C++ I/O
- ConstraintLayout 简介
- C++ Strings(字符串)
- C++ Double Ended Queues(双向队列)
- Struts中的拦截器
- C++ Bitsets
- C++ Maps 映射
- C++ Priority Queues(优先队列) and C++ Queues(队列)
- Java enum枚举类型基础
- C++ Stacks(堆栈)
- 交叉编译zlib库
- C++ Sets
- C++ Vector 动态数组