• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java中的Struts2拦截器详解

java中的Struts2拦截器详解

作者:心似猛虎细嗅蔷薇 字体:[增加 减小] 来源:互联网 时间:2017-05-28

心似猛虎细嗅蔷薇 通过本文主要向大家介绍了java struts2教程,java struts2框架,java web struts2,java ee struts2,java struts2等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

1、拦截器是什么?

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

2、拦截器的作用:

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

3、拦截器的原理:

  

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

4、定义拦截器:

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

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

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

Interceptor接口声明了三个方法

public interface Interceptor extends Serializable {
 
  void destroy();
 
  void init();
 
  String intercept(ActionInvocation invocation) throws Exception;
}
</div>

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;
  }

</div>

注册拦截器:

<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>
</div>

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

拦截器参数:

配置参数:

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

有两种配置方式:

<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
</div>

或者

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java进阶:Struts多模块的技巧
  • java中的Struts2拦截器详解

相关文章

  • 2017-05-28SpringBoot初始教程之统一异常处理详解
  • 2017-05-28彻底理解Java中的ThreadLocal
  • 2017-05-28Java多线程 实例解析
  • 2017-05-28关于多线程常用方法以及对锁的控制(详解)
  • 2017-05-28详解Spring+Hiernate整合
  • 2017-05-28数据库基本操作语法归纳总结
  • 2017-05-28SWT(JFace)体验之图片的动态渐变效果
  • 2017-05-28详解Java从后台重定向(redirect)到另一个项目的方法
  • 2017-05-28Java编程实现中英混合字符串数组按首字母排序的方法
  • 2017-05-28SpringBoot+Shiro学习之密码加密和登录失败次数限制示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MyBatis的嵌套查询解析
    • 深入理解Java注解类型(@Annotation)
    • Spring Boot(四)之使用JWT和Spring Security保护REST API
    • Java通过wait()和notifyAll()方法实现线程间通信
    • Java使用正则表达式实现找出数字功能示例
    • java 中如何获取字节码文件的相关内容
    • Java多线程并发编程(互斥锁Reentrant Lock)
    • Java 变量类型及其实例
    • Java数据结构之队列(动力节点Java学院整理)
    • Collections工具类_动力节点Java学院整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有