Struts2拦截器详解:功能增强与Action协作

需积分: 0 2 下载量 27 浏览量 更新于2024-08-18 收藏 539KB PPT 举报
在Struts2框架中,截拦器(Interceptor)是一个核心概念,其与Action之间的关系紧密且重要。Struts2充分利用AOP(面向切面编程)思想,使得约80%的功能可以通过截拦器实现,从而实现解耦和功能扩展,降低了Action类的复杂性并提高了代码的重用性。 1. **截拦器的作用和意义** - 截拦器允许在Action执行前后执行特定的操作,如参数验证、日志记录、权限检查等,无需修改Action代码,保持其简洁。 - 提高框架的灵活性和可维护性,开发者可以在不改变原有架构的基础上增加新功能。 2. **截拦器的定义与配置** - 截拦器是一个继承自`AbstractInterceptor`抽象类或者实现了`Interceptor`接口的类,需要覆盖的方法包括`init()`(初始化)、`destroy()`(销毁)以及`intercept()`(核心截拦操作),`intercept()`方法接收`ActionInvocation`对象,决定下一步操作流程。 3. **默认截拦器** - 当没有为Action明确指定截拦器时,`defaultStack`作为默认栈,负责处理基础功能如参数封装、文件上传、类型转换异常处理等。 - 一旦Action有了自定义截拦器,系统会跳过默认截拦器,需要开发者显式指定默认截拦器。 4. **与Action的关系** - 将功能如参数校验、文件处理和错误处理放在截拦器中,有助于简化Action类,使其专注于核心业务逻辑,提高代码的可读性和可维护性。 5. **截拦器工作原理** - Struts2底层通过动态代理模式来实现截拦器,使得拦截操作在Action调用链中透明进行。 - `ActionInvocation`对象传递了Action的引用,通过`invoke()`方法逐级调用截拦器或执行Action的`execute()`方法。 6. **关键代码示例** - 示例代码展示了如何创建一个简单的截拦器类,重写`intercept()`方法,进行自定义逻辑,如添加日志、计时等功能。 7. **使用截拦器栈(Interceptor Stack)** - Struts2支持配置多个截拦器,它们按照栈的方式顺序执行,每个截拦器的执行顺序可通过配置文件调整。 Struts2中的截拦器是架构设计的核心组成部分,通过合理利用和配置,可以增强应用的可扩展性和代码组织结构,使开发更高效。理解并掌握截拦器的使用和配置,对于有效管理Struts2项目至关重要。

我用Spring5的aop应用时报这个错误Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\ecliple\web5\WEB-INF\applicationContext.xml]; nested exception is java.nio.file.NoSuchFileException: WEB-INF\applicationContext.xml,他说我的applicationContext.xml文件不存在,可是我明明有这个文件,另外我的web.xml需要更改吗<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation </param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <display-name>Struts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>

2023-05-30 上传