`
高成锋
  • 浏览: 52740 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2学习笔记【十一】 / Interceptor(1)

阅读更多

1. Interceptor拦截器

1.1. 拦截器简介

拦截器是struts2框架的核心,包括解析请求的参数,将请求参数赋值给action的属性,执行数据校验,文件上传等都是通过拦截器是实现的。Struts2设计的灵巧性更大得益于拦截器的设计,当需要扩展struts2功能时,只要提供相应的拦截器,并将其配置在struts2容器中就行了。若不需要这个功能,也只要取消其对应的拦截器配置就OK了。

Struts2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中,其中name就是拦截器的名字,也是访问调用拦截器的唯一性标识,class则指定了其实现类。如果我们定义的package继承了struts2默认的struts-default包,则可以自由使用其中定义的拦截器,否则就得自定义了。

接下来简要的介绍一下一些拦截器的功能。

1.2. 自定义拦截器

首先请大家先了解一下下面的几个类或接口。

Interceptor

AbstractInterceptor

MethodFilterInterceptor

 

类型一:

public class TestInterceptor extends AbstractInterceptor 

{

@Override

public String intercept(ActionInvocation invocation) 

throws Exception 

{

System.out.println("拦截器开始");

//查询API,了解一下invoke这个方法

String result = invocation.invoke();

System.out.println("拦截结束");

return result;

}

}

注:每个action在执行时都会调用拦截器,action执行结束后再调用一次。

 

类型二:

public class MethodInterceptor extends MethodFilterInterceptor 

{

@Override

protected String doIntercept(ActionInvocation invocation) 

throws Exception 

{

System.out.println("拦截器开始");

//查询API,了解一下invoke这个方法

String result = invocation.invoke();

System.out.println("拦截结束");

return result;

}

}

 

注:以上这两种创建的拦截器都需要在配置文件中进行配置后才能使用。

<interceptors>

<interceptor 

name="自定义名称" class="com.sun.TestInterceptor" />

<interceptor>

name="自定义名称" class="com.sun.MethodInterceptor">

//配置不需要拦截的方法

<param name="excludeMethods">方法名</param>

</interceptor>

</interceptors>

 

同样的,也可以设定需要拦截的方法--includeMethods,多个不同的方法之间用逗号隔开:

<interceptor>

name="自定义名称" class="com.sun.MethodInterceptor">

<param name="includeMethods">方法1,方法2,方法3</param>

</interceptor>

全局与局部发生冲突时,局部设置覆盖全局设置,includeMethods大于excludeMethods

 

1.3. 页面刷新

当后台设置了执行延迟或等待中,通过设置一个拦截器,给用户一个好的用户体验。

可以控制页面定时刷新:

一. 在页面头部上

 <% String path = request.getContext();

Response.setHeader("refresh","3;url=wait.jsp");

二. 在页面头部中

<meta http-equiv="refresh" content="3",url=wait.jsp">

Wait.jsp指代当前页面或是需要访问的action

 

配置拦截器【wait

 在指定的action中引用拦截器

<interceptor-ref  name="execAndWait" />

//因为defaultStack中没有,所有得手动引入。

<interceptor-ref  name="defaultStack" />

//因为手动引入了一个拦截器,同时还需要一些其他的拦截器,所以必须引用该拦截器

<result name="wait">wait.jsp</result>

//wait为系统自带常量,不可更改,给系统一个视图,用于显示。

 

注意:execAndWait必须在所有拦截器之后,否则会出错。

页面从后台action跳转过来如果很快,就没有必要设置wait拦截器了,可以进行判断选择性拦截。

<interceptor-ref  name="execAndWait">

<param name="delay">1000</param>

</interceptor-ref>

等待一秒后再显示提示页面,在1秒内如果等待结束,则显示成功页面

 

1.4. 令牌【token

一. 前台 

在正常的表单提交中多添加一个标签

<s:token></s:token>

二. 配置文件

在指定的需要访问的action中添加以下拦截器

<interceptor-ref  name="token" />

<result name="invalid.token">指定的指向</result>

<interceptor-ref name="defaultStack" />

//只要手动引入了一个拦截器,那么就需要引用默认的拦截器。

 

解释:

第一次访问的到页面时,服务器记录了令牌的随机数作为登录的sessionId,第一次提交时,比较这两者是否一致,一致则进行数据提交或是页面跳转,同时清空这个sessionId,再次刷新时,两者当然不会一致,拦截器会返回一个Invalid.token,进而根据用户在配置文件中的信息区进行处理。

 

除了根据Invalid.token去执行不同的页面外,还有一种始终指向成功页面的方法,需要在配置文件中配置如下:

<interceptor-ref  name="tokenSession" />

//服务器端存在的信息指向,始终返回数据提交后的页面

<interceptor-ref  name="defaultStack" />

分享到:
评论

相关推荐

    struts2学习笔记(完美总结)——转自OPEN经验库

    Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入理解MVC思想对于优化Struts2应用至关重要,因为MVC分离了模型、视图和控制器,使得代码更易于管理和...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    struts2学习笔记十一(第11讲.Struts2的核心 拦截器续)

    在本篇“Struts2学习笔记十一”中,我们将深入探讨Struts2的核心拦截器及其应用。 **1. 拦截器的概念** 拦截器是AOP(面向切面编程)的一部分,在Struts2中,它们作为一系列可插入的处理链,可以在Action执行前后...

    Struts2学习笔记

    本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...

    struts2学习笔记

    在深入探讨Struts2的学习笔记之前,先来理解它的核心概念。 **1. Struts2依赖的JAR包** Struts2的运行离不开一系列的依赖库,包括: - `struts2-core-2.1.6.jar`:这是Struts2的核心库,包含了Struts2框架的主要...

    【张冰Struts2学习笔记】0102_第一个Struts2实例

    【张冰Struts2学习笔记】0102_第一个Struts2实例 在Java Web开发领域,Struts2框架是十分重要的MVC(模型-视图-控制器)架构之一,它极大地简化了Web应用程序的开发流程。这篇学习笔记将带你入门Struts2,通过创建...

    struts 2 学习笔记

    在Struts2中,学习笔记通常会涵盖以下几个关键概念: 1. **源代码查看和Javadoc**:开发者可以通过查看源代码来理解Struts2的工作原理,而Javadoc则提供了API文档,帮助理解类和方法的功能。 2. **包(Package)和...

    Struts2学习笔记(一) 环境的搭建与HelloWorld程序

    在本篇学习笔记中,我们将聚焦于环境搭建和创建第一个"Hello, World!"程序。 首先,要开始学习Struts2,你需要确保你的开发环境中已经安装了以下基本组件: 1. **Java Development Kit (JDK)**:Struts2依赖于Java...

    Struts2学习笔记与心得

    在探讨Struts2的学习心得之前,我们先来分析一下Struts2与Struts1之间的区别。 ##### 1.1 架构设计 - **Struts1**:采用MVC(Model-View-Controller)架构模式,其中控制器是由`ActionServlet`来实现的,该控制器...

    struts2学习笔记.rar

    这个"struts2学习笔记.rar"文件很可能包含了关于Struts2框架的详细教程和实践案例,对于学习和理解Struts2的核心概念和技术是非常有帮助的。 首先,Struts2框架的引入是为了克服早期Struts1框架的一些局限性,提供...

    传智播客struts2全程学习笔记

    ### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...

    struts2学习笔记和源码

    这份"struts2学习笔记和源码"资源是学习这个框架的理想材料,特别适合初学者。 一、Struts2框架基础 Struts2是Apache软件基金会下的一个项目,它是Struts1的升级版,弥补了Struts1的一些不足,如动作映射和拦截器等...

    struts2详细学习笔记

    总的来说,学习Struts2需要理解这些基本配置元素的含义和用法,以及如何通过常量配置来调整框架的行为。此外,还需了解Action、Interceptor(拦截器)的概念,以及结果类型、异常处理、国际化支持等内容。熟练掌握...

    struts学习笔记

    Struts2 学习笔记-part2: 实现用户登录功能 在上一部分中,我们了解了构建一个基于Struts2的Java Web项目所需的基本库和配置文件。现在,我们将逐步实现一个简单的用户登录功能。 一、创建Action类 在Struts2框架...

Global site tag (gtag.js) - Google Analytics