Struts2 Action搜索顺序解析

需积分: 11 0 下载量 178 浏览量 更新于2024-08-23 收藏 318KB PPT 举报
"本文主要介绍了Struts2框架中Action名称的搜索顺序,以及Struts2相较于Struts1的优势。在Struts2中,Action的搜索遵循特定的命名空间层次,从具体的URI路径逐级向上搜索,直到找到匹配的Action或到达默认命名空间。此外,文章提到了Struts2的无侵入式设计、拦截器、类型转换器、多视图支持、输入校验和国际化资源管理等核心特性。" 在Struts2框架中,Action名称的搜索顺序是一个关键的概念,这涉及到请求路由到正确处理方法的过程。当一个HTTP请求被发送到如`http://server/struts2/path1/path2/path3/test.action`这样的URL时,Struts2会按照以下步骤来定位对应的Action: 1. 首先,系统会尝试查找与URI路径 `/path1/path2/path3` 相匹配的命名空间(namespace),即检查是否存在一个定义了该命名空间的package。如果找到,它会在该package中寻找名为`test`的Action。 2. 若在当前命名空间找不到Action,系统会回退到上一级命名空间 `/path1/path2`,再次尝试寻找`test` Action。此过程持续到顶级命名空间 `/`,并且每次找不到Action时,都会跳转到默认命名空间(通常是空字符串)。 3. 如果在默认命名空间仍然找不到匹配的Action,系统将返回错误提示,表示无法找到Action。 Struts2是基于WebWork发展起来的MVC框架,相比Struts1,它引入了许多改进和增强。以下几点体现了Struts2的主要优势: 1. **无侵入式设计**:Struts2的应用不再紧密依赖ServletAPI和StrutsAPI,降低了代码的耦合度。比如,传统的Struts1中的Action类需要继承自`Action`类,而在Struts2中,Action类可以是任何实现了`Action`接口或标记了`@Action`注解的类。 2. **拦截器(Interceptors)**:Struts2引入了拦截器机制,允许开发者实现AOP(面向切面编程),如权限控制、日志记录等功能,增强了代码的可复用性和灵活性。 3. **类型转换器(Type Converters)**:Struts2内置了类型转换器,可以自动将请求参数转换为需要的类型,简化了数据绑定的处理。 4. **多视图技术支持**:Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,为开发者提供了更多的选择。 5. **输入验证(Validation)**:Struts2的验证机制允许针对特定方法进行,而不是局限于整个Action,提供了更细粒度的控制,并且解决了Struts1中验证的局限。 6. **国际化(Internationalization, i18n)管理**:Struts2提供了对全局、包级别和Action级别的国际化资源文件的支持,方便了多语言应用的开发。 要搭建Struts2的开发环境,开发者通常需要获取相关的jar文件,配置Struts2的配置文件(如struts.xml),并在`web.xml`中添加Struts2的初始化参数,以便让Web应用能够识别和处理Struts2的请求。这些步骤是构建基于Struts2的应用的基础工作。

192.168.85.1 - - [26/Jun/2022:06:07:07 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 24 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 12925 192.168.85.1 - - [26/Jun/2022:06:07:11 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 200 14 192.168.85.1 - - [26/Jun/2022:06:08:06 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 15 192.168.85.1 - - [26/Jun/2022:06:08:16 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 1227 192.168.85.1 - - [26/Jun/2022:06:10:15 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 79 192.168.85.1 - - [26/Jun/2022:06:13:25 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 404 752 192.168.85.1 - - [26/Jun/2022:06:16:42 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:16:57 -0400] "GET //struts2-showcase/hhh.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:18:55 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:19:02 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 35 192.168.85.1 - - [26/Jun/2022:06:19:09 -0400] "GET //struts2-showcase/hhh1.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:19:34 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 400 192.168.85.1 - - [26/Jun/2022:06:20:37 -0400] "POST /struts2-showcase/index.action HTTP/1.1" 500 5 192.168.85.1 - - [26/Jun/2022:06:20:42 -0400] "GET //struts2-showcase/hhh1.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:20:46 -0400] "GET //struts2-showcase/hhh.jsp HTTP/1.1" 403 642 192.168.85.1 - - [26/Jun/2022:06:20:51 -0400] "GET /struts2-showcase/hhh.jsp HTTP/1.1" 403 642

2023-07-12 上传