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日

相关文章

  • spring集成httpclient配置的详细过程

    下面是spring集成httpclient配置的详细过程。 1. 引入依赖 首先在pom.xml中引入httpclient和httpasyncclient的依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>http…

    Java 2023年5月31日
    00
  • mybatis中mapper-locations的作用

    下面是关于”Mybatis中mapper-locations的作用”的详细攻略: 1. 什么是mapper-locations mapper-locations是Mybatis配置文件mybatis-config.xml中的一个节点,它的作用是指定Mybatis的mapper文件位置。 在mybatis-config.xml中,mapper-location…

    Java 2023年6月15日
    00
  • 什么是类加载的双亲委派模型?

    关于类加载的双亲委派模型,我们可以这样来详细讲解: 一、什么是类加载的双亲委派模型? 类加载器在加载类的过程中,会先将请求交给父类加载器去完成类加载。如果父类加载器无法完成类加载,才由自己来实现类的加载。这种按照一定顺序依次向上委托的模型,就是类加载的双亲委派模型。 在这个模型中,类加载器之间是存在父子关系的。一个类加载器在加载某个类的时候,如果它的父类加载…

    Java 2023年5月10日
    00
  • JS中showModalDialog 的使用解析

    JS中showModalDialog 的使用解析 简介 showModalDialog() 是 JavaScript 中的一个方法,用于打开模态对话框。模态对话框是一种对用户操作有限制的对话框,只有在对话框关闭之后,才能进行其他操作。 语法 showModalDialog (url, [argument1, argument2, …], [options…

    Java 2023年6月15日
    00
  • IDEA的下载和使用安装详细图文教程

    IDEA的下载和安装 下载 前往IntelliJ IDEA官网(https://www.jetbrains.com/idea/),下载适合自己操作系统的版本。 安装 双击安装包,选择语言后点击”Next”。 选择安装路径,如果不设置,则默认在Program Files(x86)路径下创建一个JetBrains的文件夹。 可以选择创建桌面图标以及启动菜单等选项…

    Java 2023年6月15日
    00
  • Java Property类使用详解

    Java Property类使用详解 在Java中,经常需要进行属性配置操作,而Java的Property类正是用来读写属性文件的。本文将详细讲解Java Property类的使用。 创建属性文件 属性文件通常以”.properties”为后缀,用于存储键值对的配置信息。我们可以用文本编辑器手动创建属性文件,格式如下: # This is a comment…

    Java 2023年6月15日
    00
  • MyBatis下SQL注入攻击的3种方式

    以下是MyBatis下SQL注入攻击的3种方式。 1.参数拼接 如下面的语句: @Select("SELECT * FROM user WHERE username = ‘" + username + "’ AND password = ‘" + password + "’") 其中 usernam…

    Java 2023年5月20日
    00
  • Java自学书籍Top 10

    下面我详细介绍一下“Java自学书籍Top 10”的攻略: 一、为什么要学Java? 在介绍Java自学书籍的攻略之前,我们先来了解一下为什么要学Java。Java是目前使用比较广泛的编程语言之一,它具有以下特点: Java是一种跨平台的语言,可以在不同操作系统上运行。 Java具有比较好的可读性和易于维护性。 Java拥有庞大的用户群体和丰富的开源库,方便…

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