你好,游客 登录 注册 搜索
背景:
阅读新闻

Struts2拦截器浅解

[日期:2017-03-07] 来源:Linux社区  作者:TigerandRose [字体: ]

最近在学习struts的拦截器,现在来总结一下。

1、拦截器是什么?

  拦截器相当于过滤器:就是将不想要的去掉,想要的留下。拦截器抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。通俗地讲就是一张网,过滤掉不需要的沙子,留下水。

2、拦截器的作用:

  拦截器可以构成特定的功能。比如权限认证、日志记录和登陆判断。

3、拦截器的原理:

  

其每一个Action请求都在拦截器中,每一个action可以将操作转交给下面的拦截器,也可以直接退出到界面上。

4、定义拦截器:

  (1)自定义一个实现Interceptor接口(不过我初学者一般直接实现框架中的Interceptor)

  (2)在struts.xml中注册定义的拦截器

  (3)可以需要的action中引用拦截器

Interceptor接口声明了三个方法

1 public interface Interceptor extends Serializable {
2  
3     void destroy();
4  
5     void init();
6  
7     String intercept(ActionInvocation invocation) throws Exception;
8 

  Init方法是在action作用之前调用,就是开始给烂机器的初始化操作。

  Destory方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。

  interceptor方法是拦截器的主要操作。如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。

  现在对用户登录进行拦截,代码如下:

public String intercept(ActionInvocation invocation) throws Exception {
        
        System.out.println("在action执行之前");
        ActionContext actionContext=invocation.getInvocationContext();
        Map<String,Object> session=actionContext.getSession();
        
        Object currentUser=session.get("currentUser");
        String result=null;
        if(currentUser!=null){
            result=invocation.invoke();
            
        }else{
            
            HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
            request.setAttribute("error", "请先登录");
            result="error";
        }
        System.out.println("result+"+result);
        System.out.println("在action执行之后");
        return result;
    }

  注册拦截器:

<interceptors>
             <interceptor name="myInterceptor"
             class="com.fangchao.interceptor.MyInterceptor"></interceptor>
             <interceptor name="loginInterceptor"
             class="com.fangchao.interceptor.LoginInterceptor"></interceptor>
             
             <interceptor-stack name="myStack">
                 <interceptor-ref name="loginInterceptor"></interceptor-ref>
                 <interceptor-ref name="defaultStack"></interceptor-ref>    
             </interceptor-stack>
         </interceptors>

  上述代码中的interceptor-stack是个拦截器栈。到目前为止,就是在下面引用时,比较方便。一般来讲,每个action都会使用defaultStack。

  拦截器参数:

 配置参数:

  excludeMethods:过滤掉不使用拦截器的方法

  includeMethods:使用拦截器的方法。

有两种配置方式:

  【1】

<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
或者
<interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">myValidationExcludeMethod</param>
    <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

推荐阅读:

Struts中异步传送XML和JSON类型的数据 http://www.linuxidc.com/Linux/2013-08/88247.htm

Struts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2学习笔记-Value Stack(值栈)和OGNL表达式  http://www.linuxidc.com/Linux/2015-07/120529.htm 

struts2文件上传(保存为BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

在Struts2中使用ModelDriven action http://www.linuxidc.com/Linux/2017-03/141203.htm

Struts2实现ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm

遇到的Struts2文件下载乱码问题 http://www.linuxidc.com/Linux/2014-03/98990.htm

Struts2数据验证机制  http://www.linuxidc.com/Linux/2016-10/135995.htm

struts2简单示例 http://www.linuxidc.com/Linux/2016-11/137146.htm

Struts2绑定对象数组  http://www.linuxidc.com/Linux/2017-01/139080.htm

Struts2 s:if标签以及 #,%{},%{#}的使用方法  http://www.linuxidc.com/Linux/2016-11/137188.htm

Struts 的详细介绍请点这里
Struts 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-03/141473.htm

linux
本文评论   查看全部评论 (1)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 筑梦之路会员 发表于 2017/3/7 8:48:47
中间缺少注释,不够详细具体