Struts2 下拦截器的简单使用

GitHub 地址

访问GitHub下载最新源码:https://github.com/JYG0723/Struts2_Action


简介:

环境与基本配置与上一篇一致。这里简单的利用一个拦截器拦截一个对 Aciton 的请求,计算了一下访问一次该 Action 所花费的时间。拦截器的作用还请自行百度


第一个拦截器实例:访问 Action 时间记录

TimerAction

public class TimerAction extends ActionSupport {

    @Override
    public String execute() throws Exception {

        for (int i = 0; i < 10000; i++) {
            System.out.println("I LOVE IMOOC");
        }
        return SUCCESS;
    }
}

TimerInteceptor

public class TimerInterceptor extends AbstractInterceptor {

    // 执行 Action 的时候,会自动调用该方法
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        // 执行 Action 之前,获取当前系统时间
        long start = System.currentTimeMillis();

        // 执行下一个拦截器,如果已经是最后一个拦截器,则执行目标 Action
        String result = actionInvocation.invoke();

        // 执行 Action 之后,获取当前系统时间
        long end = System.currentTimeMillis();

        System.out.println("执行Action花费的时间: " + (end - start));
        return result;
    }

}

struts.xml


    
    
        
    

    
        
        
        /success.jsp
    

index.jsp

点击计算访问一次 Action 所花费的时间

Struts2 内建拦截器

  • params 拦截器
    • 负责将请求参数设置为 Action 属性
  • staticParams 拦截器
    • 将配置文件中 action 元素的子元素 param 参数设置为 Action 属性
  • servletConfig 拦截器
    • 将源于 Servlet API 的各种对象注入到 Action,必须实现对应接口
  • fileUpload 拦截器
    • 对文件上传提供支持,将文件和元数据设置到对应的 Action 属性中
  • exception 拦截器
    • 捕获 Struts2 中发生的异常, 并且将异常映射到用户自定义的页面
  • validation 拦截器
    • 调用验证框架进行数据验证

struts-default.xml




































可以看到 Struts2 的内建拦截器有很多。当然有的我们会用到,有的不会用到。但其还为我们声明了许多的拦截器栈,方便我们以组合的形式来使用。默认的,只要你的struts.xml文件中的package标签的extends="struts-default"。那么下面的defaultStack默认拦截器栈已经被你这个包下的所有 Action 所使用。

defaultStack


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        input,back,cancel,browse
    
    
        input,back,cancel,browse
    
    

注意:

需要注意的就是,当为包中的某个 Action 显示的指定了某个拦截器,则默认的拦截器将不再起作用。

struts.xml


    
    
    
    
    /success.jsp


第二个拦截器实例:权限验证

LoginAction

public class LoginAction extends ActionSupport implements SessionAware {

    private String username;
    private String password;
    // 封装了 session 的 Map 集合,需要实现 SessionAware 接口
    private Map session;

    public void setSession(Map session) {
        this.session = session;
    }

    // getter/setter

    /**
     * 处理登录请求
     */
    public String login() {
        if ("admin".equals(username) && "admin".equals(password)) {
            session.put("loginInfo", username);
            return SUCCESS;
        } else {
            session.put("loginError", "用户名和密码不正确");
            return ERROR;
        }
    }
}

AuthInterceptor

public class AuthInterceptor extends AbstractInterceptor {

    public String intercept(ActionInvocation actionInvocation) throws Exception {

        ActionContext actionContext = ActionContext.getContext();
        Map session = actionContext.getSession();

        if (session.get("loginInfo") != null) {
            String result = actionInvocation.invoke();
            return result;
        } else {
            return "login";
        }
    }
}

struts.xml


    
    

    

        
            
            
            
                
                
            
        

        
         
            
            
            /WEB-INF/page/admin.jsp
            /login.jsp
        
        
        
        
            /WEB-INF/page/admin.jsp
            /login.jsp
        

    

login.jsp

${loginError}
用户名: 密码:

你可能感兴趣的:(Struts2 下拦截器的简单使用)