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

来源:互联网 发布:淘宝店铺找人装修 编辑:程序博客网 时间:2024/05/14 11:38
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>

复制代码

filter.MyFilter

  1. package filter;

  2. import java.io.IOException;

  3. import javax.servlet.Filter;

  4. import javax.servlet.FilterChain;

  5. import javax.servlet.FilterConfig;

  6. import javax.servlet.ServletException;

  7. import javax.servlet.ServletRequest;

  8. import javax.servlet.ServletResponse;

  9. public class MyFilter implements Filter {

  10. public void destroy() {

  11. }

  12. public void doFilter(ServletRequest request, ServletResponse response,

  13.    FilterChain chain) throws IOException, ServletException {

  14.   

  15.   System.out.println("请求过滤");

  16.   

  17.   chain.doFilter(request, response);

  18.   

  19.   System.out.println("返回过滤");

  20.   

  21. }

  22. public void init(FilterConfig arg0) throws ServletException {

  23. }

  24. }

复制代码

interceptor.LoginInterceptor

  1. package interceptor;

  2. import org.apache.struts2.ServletActionContext;

  3. import com.opensymphony.xwork2.ActionInvocation;

  4. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

  5. public class LoginInterceptor extends AbstractInterceptor {

  6. private static final long serialVersionUID = -2796326480994355318L;

  7. @Override

  8. public String intercept(ActionInvocation ai) throws Exception {

  9.   

  10.   System.out.println("请求拦截");

  11.   

  12.   if(!"YOYO".equals(ServletActionContext.getRequest().getParameter("username"))){

  13.    return "login";

  14.   }

  15.   

  16.   String result = ai.invoke();

  17.   

  18.   System.out.println("返回拦截");

  19.   

  20.   return result;

  21. }

  22. }

复制代码

action.LoginAction

  1. package action;

  2. public class LoginAction {

  3. public String execute(){

  4.   System.out.println("登陆ACTION");

  5.   

  6.   return "success";

  7. }

  8. }

复制代码

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>

复制代码

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="OST">

  12.      Name: <input type="text" name="username" />

  13.      <input type="submit" value="submit" />

  14.     </form>

  15.   </body>

  16. </html>

复制代码

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

请求过滤

请求拦截

返回过滤

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

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

请求过滤

请求拦截

登陆ACTION

返回拦截

返回过滤

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

原创粉丝点击