Struts2实现对action请求对象的拦截操作方法

  1. Struts2的拦截器机制

Struts2采用拦截器机制来对用户发出的请求进行拦截、处理和响应。拦截器是一组批处理过程,你可以在任何一个拦截器中编写你自己的代码,来处理对应的请求。例如,对于用户登录请求,可以通过拦截器机制进行身份验证。

  1. 实现对action请求对象的拦截操作

通过写一个继承自Interceptor抽象类的拦截器,并实现intercept方法,来实现对action请求对象的拦截操作。

以下是实现拦截器的步骤:

  1. 创建一个类并继承Interceptor抽象类。
  2. 实现intercept方法。在该方法中,可以获取当前的ActionContext上下文,然后从中获取请求对象和响应对象,并对其进行相应的操作。
  3. struts.xml配置文件中,配置拦截器及其拦截范围。

下面是一个示例,在Struts2中,实现对请求中的参数进行身份验证:

public class AuthenticationInterceptor implements Interceptor {
    public void destroy() {}

    public void init() {}

    public String intercept(ActionInvocation invocation) throws Exception {
        Map<String, Object> session = invocation.getInvocationContext().getSession();
        User user = (User) session.get("user");

        if (user == null) {
            return "login";
        } else {
            ActionProxy proxy = invocation.getProxy();
            String method = proxy.getMethod();
            Object action = invocation.getAction();
            String[] parameterNames = ((HandlerMethodAction) action).getParameters();  //获取请求参数

            /*对请求中的参数进行验证*/
            if (parameterNames != null && parameterNames.length > 0) {
                for (String paramName : parameterNames) {
                    String paramValue = invocation.getInvocationContext().getParameters().get(paramName)[0];
                    if (!StringUtils.isNumeric(paramValue)) {
                        return "error";  // 非法参数
                    }
                }
            }

            return invocation.invoke();
        }
    }
}

struts.xml配置文件中,配置拦截器及其拦截范围:

<interceptors>
    <interceptor name="authentication"
                 class="com.example.AuthenticationInterceptor"/>
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="authentication"/>
        <interceptor-ref name="params"/>  // 需要先执行params拦截器,才能获取到请求参数
        <interceptor-ref name="prepare"/>
        <interceptor-ref name="modelDriven"/>
        <interceptor-ref name="fileUpload"/>
        <interceptor-ref name="checkbox"/>
        <interceptor-ref name="validation"/>
        <interceptor-ref name="workflow"/>
    </interceptor-stack>
</interceptors>

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

<action name="foo" class="com.example.FooAction">
    <interceptor-ref name="defaultStack"/>
    <result name="success">/result.jsp</result>
</action>

另一个示例,可以实现对请求进行日志记录:

public class LoggingInterceptor implements Interceptor {
    public void destroy() {}

    public void init() {}

    public String intercept(ActionInvocation invocation) throws Exception {
        long startTime = System.currentTimeMillis();  // 记录开始时间

        /*在action执行前的逻辑*/
        String result = invocation.invoke();

        /*在action执行后的逻辑*/
        long endTime = System.currentTimeMillis();  // 记录结束时间
        long executeTime = endTime - startTime;  // 计算action执行时间

        String className = invocation.getAction().getClass().getName();
        String methodName = invocation.getProxy().getMethod();

        System.out.println(String.format("Class %s, Method %s, Execute Time: %dms", className, methodName, executeTime));

        return result;
    }
}

struts.xml配置文件中,配置拦截器及其拦截范围:

<interceptors>
    <interceptor name="logging"
                 class="com.example.LoggingInterceptor"/>
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="logging"/>
        <interceptor-ref name="params"/>
        <interceptor-ref name="prepare"/>
        <interceptor-ref name="modelDriven"/>
        <interceptor-ref name="fileUpload"/>
        <interceptor-ref name="checkbox"/>
        <interceptor-ref name="validation"/>
        <interceptor-ref name="workflow"/>
    </interceptor-stack>
</interceptors>

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

<action name="foo" class="com.example.FooAction">
    <interceptor-ref name="defaultStack"/>
    <result name="success">/result.jsp</result>
</action>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2实现对action请求对象的拦截操作方法 - Python技术站

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

相关文章

  • base64_encode和base64_decode的JAVA实现

    下面是“base64_encode和base64_decode的JAVA实现”的完整攻略。 什么是Base64? 在计算机科学领域,Base64是一种用64个字符来表示任意二进制数据的方法,通常用于在HTTP协议下可读性较高的传输数据。Base64的具体实现方式是将二进制数据流每6位一组,补0凑满6位后,转化成十进制,根据十进制对应的数值,在Base64字符…

    Java 2023年5月20日
    00
  • Java使用正则表达式检索、替换String中特定字符和正则表达式的一切

    Java中使用正则表达式进行字符串的检索、替换等操作主要依靠Java.util.regex包中提供的类和方法。下面将从如下几个方面,介绍Java使用正则表达式进行检索、替换操作的完整攻略: 正则表达式的基础知识 在使用Java进行正则表达式操作之前,我们需要先了解一些正则表达式的基础知识,包括常用的正则表达式符号/语法、匹配模式等。下面给出一个简单的正则表达…

    Java 2023年5月27日
    00
  • 从0开始学习大数据之java spark编程入门与项目实践

    从0开始学习大数据之Java Spark编程入门与项目实践攻略 前言 在大数据时代,数据量和数据处理的复杂性不断增加,需要更加高效和灵活的处理方式。Apache Spark作为当前最流行的大数据处理框架之一,优化了Hadoop MapReduce的不足,支持复杂的数据处理,具有高效、可扩展、易用、友好的API等特点,因此成为很多企业和个人的选择。本文将详细介…

    Java 2023年5月19日
    00
  • 文件格式有哪些,常见文件格式种类大全(中英对照)

    文件格式有哪些,常见文件格式种类大全(中英对照) 在计算机中,不同的文件格式对应着不同的数据类型。每种数据类型所使用的文件格式也会不同。本文将列举一些常见的文件格式并进行简要介绍和中英对照。 图片文件格式 JPEG (.jpg, .jpeg) JPEG全名为Joint Photographic Experts Group,是一种带有损压缩的图像格式,被广泛应…

    Java 2023年6月15日
    00
  • 关于表格的正则表达式讨论(表格)

    关于表格的正则表达式讨论(表格) 在正则表达式中,我们可以使用表格来匹配特定格式的文本。表格通常由多行组成且使用特定的分隔符将每个单元格分开。以下是表格的正则表达式讨论的完整攻略。 表格中的分隔符 在表格中,必须指定其分隔符,以便正则表达式可以正确匹配表格。常用的分隔符包括制表符(\t),逗号(,),管道符(|)等等。以下是使用制表符分隔符的表格示例: Na…

    Java 2023年6月15日
    00
  • Windows下搭建Tomcat HTTP服务并发布外网远程访问

    以下是Windows下搭建Tomcat HTTP服务并发布外网远程访问的完整攻略: 1. 安装Java环境 首先需要在本地安装好Java环境,可以到Java官网下载安装包进行安装。 2. 下载Tomcat并解压缩 可在Tomcat官网下载对应版本的Tomcat,下载完成后解压缩到本地的目录,比如:D:\Java\Tomcat。 3. 配置Tomcat 3.1…

    Java 2023年6月15日
    00
  • 解析Tomcat的启动脚本–catalina.bat

    下面是对“解析Tomcat的启动脚本–catalina.bat”的完整攻略: 1. 什么是catalina.bat catalina.bat是Tomcat的启动脚本之一,是用于启动Tomcat服务器的批处理文件,位于Tomcat的bin目录下。该脚本通过执行一系列命令和设置环境变量的操作来启动Tomcat服务器。 2. catalina.bat的主要内容 …

    Java 2023年5月19日
    00
  • Java Spring Boot消息服务万字详解分析

    Java SpringBoot消息服务万字详解分析 在Java SpringBoot中,我们可以使用消息服务来实现异步通信和解耦。本文将详细讲解Java SpringBoot消息服务的完整攻略,并提供两个示例。 1. 消息服务概述 消息服务是一种异步通信机制,它可以将消息发送到消息队列中,然后由消费者从队列中获取消息并进行处理。消息服务可以实现系统之间的解耦…

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