struts2拦截器_动力节点Java学院整理

Struts2 拦截器攻略

简介

Struts2 拦截器是一种非常重要的 Struts2 框架的组成部分,可以用来拦截请求并对请求进行处理,比如对请求的参数进行过滤和验证,或记录日志等。通过自定义拦截器,可以实现更加灵活和自定义的业务逻辑处理。

Struts2 拦截器的框架

Struts2 拦截器框架是由三个主要部分组成的:

  1. 拦截器接口(Interceptor Interface);
  2. 拦截器的配置参数(Interceptor Parameters);
  3. 拦截器栈(Interceptor Stack)。

拦截器接口

Interceptor 接口包含两个方法,分别是 init() 和 intercept(),其中 init() 方法用于进行拦截器的初始化操作,intercept() 方法用于对请求进行处理。

public interface Interceptor {
    public void init();
    public String intercept(ActionInvocation invocation) throws Exception;
}

拦截器配置参数

Struts2 允许在配置文件中,对每个拦截器进行配置参数的设置,这些配置参数可以通过 Interceptor 接口的 init() 方法在拦截器被调用之前进行初始化。

拦截器栈

Interceptor Stack 是所有拦截器的集合,可以使用一个栈的数据结构来表示。在 Struts2 中,拦截器栈由 Configuration 和 Interceptor 类型组成。配置文件中的每个 元素定义了一个拦截器栈,其中一个拦截器栈可以使用另一个拦截器栈定义的拦截器。最终,所有的拦截器栈都将包括一个默认的拦截器栈。

自定义 Struts2 拦截器

自定义 Struts2 拦截器,需要按照以下步骤进行:

  1. 实现 Interceptor 接口;
  2. 实现 init() 方法,进行拦截器的初始化;
  3. 实现 intercept() 方法,对请求进行处理;
  4. 在 struts.xml 中进行拦截器的配置。

示例一

假设我们需要实现一个拦截器,用于统计每个请求的执行时间,即计算用户提交请求到服务器最终响应所需的时间。我们可以基于 Struts2 拦截器框架,自定义一个 StopWatchInterceptor 统计器,并在 struts.xml 配置文件中,应用这个拦截器。

StopWatchInterceptor代码

StopWatchInterceptor.java

public class StopWatchInterceptor implements Interceptor {

    @Override
    public void destroy() {}

    @Override
    public void init() {}

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // 获取当前时间戳
        long startTime = System.currentTimeMillis();

        // 处理请求
        String result = invocation.invoke();

        // 计算请求处理时间
        long endTime = System.currentTimeMillis();
        long elapsed = endTime - startTime;

        // 输出日志
        System.out.println("Action [ " + invocation.getAction() 
            + " ] execute time : " + elapsed + "ms");

        return result;
    }
}

struts.xml配置

在 struts.xml 配置文件中,添加如下内容:

<package name="default" extends="struts-default">
    <interceptors>
        <interceptor name="stopWatch" class="com.example.StopWatchInterceptor"/>
        <interceptor-stack name="myStack">
            <interceptor-ref name="stopWatch"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="myStack"/>

    <action name="hello" class="com.example.HelloAction">
        <result name="success">hello.jsp</result>
    </action>
</package>

上面代码中:
- 在 <interceptors> 元素中,添加名称为 "stopWatch" 的自定义拦截器;
- 在 <interceptor-stack> 元素中,组合 stopWatch 拦截器和默认拦截器;
- 在 <default-interceptor-ref> 中指定要使用的拦截器栈;
- 在 <action> 元素中,增加了新拦截器。

示例二

假设我们需要实现一个拦截器,用于检查用户是否已经登录,如果没有登录,则跳转到登录页面。我们可以基于 Struts2 拦截器框架,自定义一个 LoginInterceptor,并应用到需要登录的页面上。

LoginInterceptor代码

LoginInterceptor.java

public class LoginInterceptor implements Interceptor {
    @Override
    public void destroy() {}

    @Override
    public void init() {}

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // 获取当前 SESSION 对象
        Map<String, Object> session = invocation.getInvocationContext().getSession();

        // 判断用户是否已经登录
        if (session.get("user") == null) {
            // 跳转到登录页面
            return "login";
        } else {
            // 用户已经登录,继续处理请求
            String result = invocation.invoke();

            return result;
        }
    }
}

struts.xml配置

在 struts.xml 配置文件中,添加如下内容:

<package name="default" extends="struts-default">
    <interceptors>
        <interceptor name="login" class="com.example.LoginInterceptor"/>
        <interceptor-stack name="myStack">
            <interceptor-ref name="login"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="myStack"/>

    <action name="login" class="com.example.LoginAction">
        <result name="success">index.jsp</result>
        <result name="login">login.jsp</result>
    </action>

    <action name="list" class="com.example.ListAction">
        <result name="success">list.jsp</result>
    </action>
</package>

上面代码中:
- 在 <interceptors> 元素中,添加名称为 "login" 的自定义拦截器;
- 在 <interceptor-stack> 元素中,组合 login 拦截器和默认拦截器;
- 在 <default-interceptor-ref> 中指定要使用的拦截器栈;
- 在 <action> 元素中,增加了 login 拦截器和新的拦截器。

总结

  • Struts2 拦截器是 Struts2 的重要组成部分,用于拦截请求并对请求进行处理。
  • Struts2 拦截器框架分为拦截器接口、拦截器的配置参数和拦截器栈三个部分。
  • 可以通过自定义拦截器来实现更加灵活和自定义的业务逻辑处理,自定义拦截器需要实现 Interceptor 接口。
  • 在配置 struts.xml 文件时,可以使用自定义拦截器并对其进行配置,可以实现对请求进行处理的业务逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2拦截器_动力节点Java学院整理 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JavaWeb Struts文件上传功能实现详解

    JavaWeb Struts文件上传功能实现详解 简介 本文将详细讲解如何在 JavaWeb Struts 框架中实现文件上传功能,其中包括前端页面的设计和后端逻辑的实现。 设计前端页面 前端页面是实现文件上传功能的基础。在这里,我们将使用HTML和JavaScript来设计一个简单的上传页面。 示例一:HTML 代码 <!DOCTYPE html&g…

    Java 2023年5月20日
    00
  • java字符串中常用的十个方法总结

    Java字符串中常用的十个方法总结 Java字符串是非常常用的一种数据类型,本文将总结Java字符串中常用的十个方法,以帮助初学者更好地掌握Java字符串的使用。 1. charAt(int index) 该方法返回指定索引处的字符,索引从0开始计数。 示例: String str = "Hello, World!"; char firs…

    Java 2023年5月26日
    00
  • Java简单实现银行ATM系统

    Java简单实现银行ATM系统攻略 本文将带领读者一步步完成 Java 简单实现银行 ATM 系统的攻略,希望对需要学习 Java 开发的读者有所帮助。 系统功能 本系统实现了以下功能: 登录系统并输入银行卡号和密码。 成功登录后,可以查看余额和最近的交易记录。 可以进行存款和取款操作。 用户可以修改密码或退出系统。 实现步骤 步骤1:创建项目和主类文件 创…

    Java 2023年5月19日
    00
  • Java面试题冲刺第五天–基础篇2

    Java面试题冲刺第五天–基础篇2 一、问题1:数组的长度、容量和元素个数有什么区别? 答案 数组的长度(length):数组长度是确定且不可改变的,是数组定义的时候就确定好的,可以通过引用名称加.length获得。 数组的容量:数组容量和数组长度没有什么关系,当数组被初始化后,容量一旦被确定就无法更改。数组容量大小是指JVM为了让数组能够并发访问而在内存…

    Java 2023年5月26日
    00
  • java网络之基于UDP的聊天程序示例解析

    下面是关于 “java网络之基于UDP的聊天程序示例解析” 的完整攻略: 一、背景介绍 在Java编程过程中,网络编程是非常重要的一部分。UDP协议是Java中常用的一种协议,其具有数据传输快、连接简单等特点,非常适合一些及时性要求不高的网络应用,比如聊天室程序等。本篇攻略就是针对基于UDP协议的聊天程序的编写,进行详细的解析。 二、程序设计思路 本程序的设…

    Java 2023年5月30日
    00
  • Java中的传值与传引用实现过程解析

    标题:Java中的传值与传引用实现过程解析 传值 Java中的基本数据类型,如int、double等,都是通过传值的方式传递给方法或函数。传值就是将参与传递的变量的值复制一份给方法或函数使用,即在方法或函数内部修改该变量的值并不会影响到方法或函数外的变量。具体实现过程如下: 代码示例1: public class PassByValue { public s…

    Java 2023年5月26日
    00
  • Java基本类型和运算符(面试题)

    下面我将详细讲解一下“Java基本类型和运算符(面试题)”的完整攻略。 Java基本类型 Java基本类型共有8种,分别为:byte、short、int、long、float、double、char、boolean,其对应的基本类型在内存中占用的空间及范围不同。具体的描述如下表所示: 类型 字节数 取值范围 byte 1 -128到+127 short 2 …

    Java 2023年5月26日
    00
  • eclipse+maven+spring mvc项目基本搭建过程

    下面是使用Eclipse、Maven和Spring MVC搭建Web项目的基本过程: 步骤一:安装Eclipse和Maven 首先,需要安装Eclipse和Maven。可以从官方网站下载并安装最新版本的Eclipse和Maven。 步骤二:创建Maven项目 在Eclipse中,选择File -> New -> Other,然后在弹出的对话框中选…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部