Struts2笔记_拦截器

A.拦截器是什么

--- Interceptor:拦截器,起到拦截Action的作用。

---Filter:过滤器,过滤从客户端向服务器发送的请求。

---Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。Struts2框架核心的功能都是依赖拦截器实现。

B.Struts2的执行流程

Struts2笔记_拦截器     Struts2笔记_拦截器

客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。

c.拦截器入门

  1.搭建Struts2环境

    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就行。

Struts2笔记_拦截器

 

上一篇:TortoiseSVN的bin目录下面没有svn.exe


下一篇:Azure IoT 技术研究系列2-起步示例之设备注册到Azure IoT Hub