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日

相关文章

  • java开发AOP面向切面编程入门

    Java AOP面向切面编程入门攻略 什么是AOP编程 AOP(AspectOriented Programming),即面向切面编程,是OOP编程模式的一种补充。AOP编程是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 在传统的OOP编程中,我们将所有重复出现的代码封装到相应的模块或类中,实现代码复用。通过继承或组合等方式,可以将这些…

    Java 2023年5月19日
    00
  • JavaWeb工程web.xml基本配置过程解析

    JavaWeb工程中的web.xml文件是一个重要的配置文件,它用于配置JavaWeb应用程序的部署和运行参数。本文将对JavaWeb工程web.xml基本配置过程进行逐一解析。 引言 web.xml文件是JavaWeb工程的核心配置文件,它包含了所有的Servlet、Filter、Listener和JSP等组件的声明和配置信息。 web.xml文件中的所有…

    Java 2023年6月16日
    00
  • SpringBoot自动配置实现的详细步骤

    Spring Boot自动配置是Spring Boot框架的核心特性之一,它可以帮助开发人员快速构建应用程序,减少了很多繁琐的配置工作。在本文中,我们将详细讲解Spring Boot自动配置实现的详细步骤。 Spring Boot自动配置实现的详细步骤 Spring Boot自动配置实现的详细步骤如下: Spring Boot启动时,会扫描classpath…

    Java 2023年5月15日
    00
  • Javaweb mybatis接口开发实现过程详解

    下面是我对 “Javaweb mybatis接口开发实现过程详解” 的完整攻略,以及包含两条示例。 Javaweb mybatis接口开发实现过程详解 mybatis整合步骤 导入mybatis和数据库驱动:在pom.xml中导入功能需要的依赖包,例如: <dependency> <groupId>org.mybatis</gr…

    Java 2023年5月20日
    00
  • 详解Java Streams 中的异常处理

    详解Java Streams 中的异常处理 在 Java 8 中引入了 java.util.stream.Stream 对象,它为我们提供了一种基于lambda表达式的函数式编程方式,方便我们对集合、数组等数据进行快速处理。但是在使用 Stream 进行数据处理的过程中,我们也需要考虑一些异常问题,本文将详细讲解 Java Streams 中的异常处理方案。…

    Java 2023年5月27日
    00
  • struts2+spring+ibatis框架整合实现增删改查

    搭建struts2+spring+ibatis框架整合需要考虑以下几个步骤: Maven配置和相关依赖 数据库配置和数据源配置 配置Spring与Mybatis整合 配置Spring与Struts2框架整合 下面将逐步为您演示搭建struts2+spring+ibatis框架整合的完整攻略,并提供2条示例。 1. Maven配置和相关依赖 在pom.xml文…

    Java 2023年5月20日
    00
  • Java连接Oracle数据库并查询

    下面将详细讲解“Java连接Oracle数据库并查询”的完整攻略。 准备工作 在连接Oracle数据库之前,我们需要完成以下几项准备工作: 确保已经安装了 Java Runtime Environment(JRE),并设置了系统环境变量。 下载并安装 Oracle 数据库。 启动 Oracle 数据库,并创建一个测试用户。我们假设该用户的用户名为 testu…

    Java 2023年5月19日
    00
  • MyBatisPlus TypeHandler自定义字段类型转换Handler

    下面是”MyBatisPlus TypeHandler自定义字段类型转换Handler”的完整攻略: 什么是 MyBatisPlus TypeHandler MyBatisPlus TypeHandler是MyBatis用于处理Java的JDBC类型与数据库的JDBC类型相互转换的接口。 MyBatisPlus为我们提供了很多预定义的TypeHandler,…

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