Struts2中拦截器与过滤器的执行顺序

通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。

下面我们来验证一下:

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3.         xmlns= "http://java.sun.com/xml/ns/j2ee"
  4.         xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  5.         xsi:schemaLocation= "http://java.sun.com/xml/ns/j2ee
  6.         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
  7.   <welcome-file-list>
  8.     <welcome-file>login.jsp </welcome-file>
  9.   </welcome-file-list>
  10.  
  11.   <filter>
  12.         <filter-name>MyFilter </filter-name>
  13.         <filter-class>filter.MyFilter </filter-class>
  14.   </filter>
  15.   <filter-mapping>
  16.         <filter-name>MyFilter </filter-name>
  17.         <url-pattern>/* </url-pattern>
  18.   </filter-mapping>
  19.  
  20.   <filter>
  21.         <filter-name>struts2 </filter-name>
  22.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
  23.   </filter>
  24.   <filter-mapping>
  25.         <filter-name>struts2 </filter-name>
  26.         <url-pattern>/* </url-pattern>
  27.   </filter-mapping>
  28.  
  29. </web-app>

struts.xml 

  1. <!DOCTYPE struts PUBLIC
  2.          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  3.          "http://struts.apache.org/dtds/struts-2.0.dtd">
  4.   <struts>
  5.       <package name="default" extends="struts-default">
  6.          <interceptors>
  7.             <interceptor name="loginInterceptor" class="interceptor.LoginInterceptor" />
  8.             <interceptor-stack name="loginStack">
  9.                <interceptor-ref name="loginInterceptor" />
  10.                <interceptor-ref name="defaultStack" />
  11.             </interceptor-stack>
  12.          </interceptors>
  13.          <default-interceptor-ref name="loginStack"> </default-interceptor-ref>
  14.          <global-results>
  15.             <result name="login">/login.jsp </result>
  16.          </global-results>
  17.          <action name="Login" class="action.LoginAction">
  18.             <result>/index.jsp </result>
  19.          </action>
  20.       </package>
  21.   </struts>

login.jsp

  1. <%@ page language= "java" import="java.util.*" pageEncoding="ISO-8859-1"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>My JSP 'index.jsp' starting page</title>
  6.   </head>
  7.  
  8.   <body>
  9.     <h3>Login</h3>
  10.     <hr>
  11.     <form action= "Login.action" method= "POST">
  12.         Name: <input type= "text" name= "username" />
  13.         <input type= "submit" value= "submit" />
  14.     </form>
  15.   </body>
  16. </html>

index.jsp

  1. <%@ page language= "java" import="java.util.*" pageEncoding="ISO-8859-1"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>My JSP 'index.jsp' starting page</title>
  6.   </head>
  7.  
  8.   <body>
  9.     <h3>Login Success!</h3>
  10.   </body>
  11. </html>

filter.MyFilter

  1. package filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11.  
  12. public class MyFilter implements Filter {
  13.  
  14.         public void destroy ( ) {
  15.         }
  16.  
  17.         public void doFilter (ServletRequest request, ServletResponse response,
  18.                         FilterChain chain ) throws IOException, ServletException {
  19.                
  20.                 System. out. println ( "请求过滤" );
  21.                
  22.                 chain. doFilter (request, response );
  23.                
  24.                 System. out. println ( "返回过滤" );
  25.                
  26.         }
  27.  
  28.         public void init (FilterConfig arg0 ) throws ServletException {
  29.         }
  30.  
  31. }
  32.  

 interceptor.LoginInterceptor

  1. package interceptor;
  2.  
  3. import org.apache.struts2.ServletActionContext;
  4.  
  5. import com.opensymphony.xwork2.ActionInvocation;
  6. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  7.  
  8. public class LoginInterceptor extends AbstractInterceptor {
  9.  
  10.         private static final long serialVersionUID = -2796326480994355318L;
  11.  
  12.         @Override
  13.         public String intercept (ActionInvocation ai ) throws Exception {
  14.                
  15.                 System. out. println ( "请求拦截" );
  16.                
  17.                 if (! "YOYO". equals (ServletActionContext. getRequest ( ). getParameter ( "username" ) ) ) {
  18.                         return "login";
  19.                 }
  20.                
  21.                 String result = ai. invoke ( );
  22.                
  23.                 System. out. println ( "返回拦截" );
  24.                
  25.                 return result;
  26.         }
  27.  
  28. }

 action.LoginAction

  1. package action;
  2.  
  3. public class LoginAction {
  4.        
  5.         public String execute ( ) {
  6.                 System. out. println ( "登陆ACTION" );
  7.                
  8.                 return "success";
  9.         }
  10.  
  11. }
  12.  

部署好后打开login.jsp,输入任意非"YOYO"字符,控制台打印出

请求过滤
请求拦截
返回过滤

 说明拦截之后还会按照原路返回;

如果输入"YOYO",则打印出

请求过滤
请求拦截
登陆ACTION
返回拦截
返回过滤

由此可以验证它的执行顺序 = =。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值