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" />
分享到:
相关推荐
Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入理解MVC思想对于优化Struts2应用至关重要,因为MVC分离了模型、视图和控制器,使得代码更易于管理和...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
在本篇“Struts2学习笔记十一”中,我们将深入探讨Struts2的核心拦截器及其应用。 **1. 拦截器的概念** 拦截器是AOP(面向切面编程)的一部分,在Struts2中,它们作为一系列可插入的处理链,可以在Action执行前后...
本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...
在深入探讨Struts2的学习笔记之前,先来理解它的核心概念。 **1. Struts2依赖的JAR包** Struts2的运行离不开一系列的依赖库,包括: - `struts2-core-2.1.6.jar`:这是Struts2的核心库,包含了Struts2框架的主要...
【张冰Struts2学习笔记】0102_第一个Struts2实例 在Java Web开发领域,Struts2框架是十分重要的MVC(模型-视图-控制器)架构之一,它极大地简化了Web应用程序的开发流程。这篇学习笔记将带你入门Struts2,通过创建...
在Struts2中,学习笔记通常会涵盖以下几个关键概念: 1. **源代码查看和Javadoc**:开发者可以通过查看源代码来理解Struts2的工作原理,而Javadoc则提供了API文档,帮助理解类和方法的功能。 2. **包(Package)和...
在本篇学习笔记中,我们将聚焦于环境搭建和创建第一个"Hello, World!"程序。 首先,要开始学习Struts2,你需要确保你的开发环境中已经安装了以下基本组件: 1. **Java Development Kit (JDK)**:Struts2依赖于Java...
在探讨Struts2的学习心得之前,我们先来分析一下Struts2与Struts1之间的区别。 ##### 1.1 架构设计 - **Struts1**:采用MVC(Model-View-Controller)架构模式,其中控制器是由`ActionServlet`来实现的,该控制器...
这个"struts2学习笔记.rar"文件很可能包含了关于Struts2框架的详细教程和实践案例,对于学习和理解Struts2的核心概念和技术是非常有帮助的。 首先,Struts2框架的引入是为了克服早期Struts1框架的一些局限性,提供...
### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...
这份"struts2学习笔记和源码"资源是学习这个框架的理想材料,特别适合初学者。 一、Struts2框架基础 Struts2是Apache软件基金会下的一个项目,它是Struts1的升级版,弥补了Struts1的一些不足,如动作映射和拦截器等...
总的来说,学习Struts2需要理解这些基本配置元素的含义和用法,以及如何通过常量配置来调整框架的行为。此外,还需了解Action、Interceptor(拦截器)的概念,以及结果类型、异常处理、国际化支持等内容。熟练掌握...
Struts2 学习笔记-part2: 实现用户登录功能 在上一部分中,我们了解了构建一个基于Struts2的Java Web项目所需的基本库和配置文件。现在,我们将逐步实现一个简单的用户登录功能。 一、创建Action类 在Struts2框架...