Struts2笔记_拦截器
a.拦截器是什么
--- interceptor:拦截器,起到拦截action的作用。
---filter:过滤器,过滤从客户端向服务器发送的请求。
---interceptor:拦截器,拦截是客户端对action的访问。更细粒度化的拦截。(拦截action中的具体的方法)。struts2框架核心的功能都是依赖拦截器实现。
b.struts2的执行流程
客户端向服务器发送一个action的请求,执行核心过滤器(dofilter)方法。在这个方法中,调用executeaction()方法,在这个方法内部调用dispatcher.serviceaction();在这个方法内部创建一个action代理,最终执行的是action代理中的execute(),在代理中执行的execute方法中调用actioninvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标action,根据action的返回的结果进行页面跳转。
c.拦截器入门
1.搭建struts2环境
2.编写拦截器类
--编写一个类实现interceptor接口或者继承abstractinterceptor。当然继承abstractinterceptor的子类methodfilterinterceptor更好,里面两个变量专门可以拦截或者放行某些方法。
自定义拦截器:
public class myinterceptor extends abstractinterceptor { @override public string intercept(actioninvocation invocation) throws exception { system.out.println("自定义拦截器开始执行"); string obj = invocation.invoke(); system.out.println("自定义拦截器执行结束"); return obj; } }
配置拦截器:
1.定义拦截器方式配置
<package name="struts" extends="struts-default"><interceptors> <!--配置自己的拦截器--> <interceptor name="myinterceptor" class="com.xxx.web.action.myinterceptor"/> </interceptors> <action name="upload" class="com.xxx.web.action.fileuploadaction"> <interceptor-ref name="myinterceptor"></interceptor-ref> <!--引入拦截器,让它生效--> <interceptor-ref name="defaultstack"></interceptor-ref> <result>/file/success.jsp</result> </action> </package>
2.自定义拦截器栈
<interceptors> <interceptor name="myinterceptor" class="com.xxx.web.action.myinterceptor"/> <interceptor-stack name="mystack"> <!--直接定义自己的拦截器栈,将所有需要的拦截器放进去,在action中直接放拦截器栈声明生效就行了--> <interceptor-ref name="myinterceptor"></interceptor-ref> <interceptor-ref name="defaultstack"></interceptor-ref> </interceptor-stack> </interceptors> <action name="upload" class="com.xxx.web.action.fileuploadaction"> <interceptor-ref name="mystack"></interceptor-ref> <result>/file/success.jsp</result> </action>
上面两种方式都有一个defaultstack,这是struts2框架的拦截器栈,如下图所示,里面有很多拦截器,如国际化,校验,文件上传等等,想要运行struts2,就需要该defaultstack拦截器栈,当然,如果你可以做出比他更好,功能更强的,那就用你自己的就行,只要配置了自定义拦截器栈,原先struts2的拦截器就不会生效,要想原先的生效,要加上defaultstack就行。
上一篇: SpringBoot学习笔记(一)入门
下一篇: 一个PHP验证码类代码分享(已封装成类)