1. ActionMapping的处理过程
1.1. org.apache.struts2.dispatcher.mapper.DefaultActionMapper.getMapping()方法:
1.1.1. 创建新的ActionMapping对象
1.1.2. 获取uri(在处理ActionMapping之前, struts对request对象进行了一次封装, 那个时候已经对uri进行了处理)
1.1.3. 处理分号, 如果uri中有分号, 会将分号及其后面的部分过滤
1.1.4. 删除后缀: 这里删除的是配置的url规则中的后缀, 比如*.action
1.1.5. namespace和name处理: DefaultActionMapper.parseNameAndNamespace()方法:
1.1.5.1. 判断最后一个/的位置,
1.1.5.2. 处理namespace和name
1.1.5.2.1. 如果uri中没有/, 说明是访问根路径, 返回的namespace是””, action名字就是uri自身
1.1.5.2.2. 如果uri中只有一个/, 则namespace是”/”, action名字则会认为是uri的剩余部分
1.1.5.2.3. 如果配置了struts.mapper.alwaysSelectFullNamespace常量, 就始终认为最后一个/之前的部分是namespace, 剩下的部分是action名称
1.1.5.2.4. 如果不是上面的情况, 就会读取所有的package的namespace配置, 寻求与当前的uri匹配程度最大(相同的内容最长)的package, 并以其namespace作为当前的namespace, 剩余部分作为action的name
1.1.5.3. 如果配置了struts.enable.SlashesInActionNames常量, 在这里处理Action的name中的斜杠/
1.1.5.4. 为ActionMapping对象设置namespace和name属性
1.1.6. 处理特殊参数: DefaultActionMapper.handleSpecialParameters()方法:
1.1.6.1. 在struts中有4种特殊的参数前缀, 分别是: method:, action:, redirect:, redirect-action:. 每个前缀会对应一个在DefaultActionMapper.prefixTrie这个容器中的一个处理接口, 其中, 四种前缀的含义分别为:
1.1.6.1.1. method: 将调用同Action中的指定方法处理
1.1.6.1.2. action: 如果允许动态方法调用, 并且action:后面的内容中包含!, 那么会按照动态方法调用方式设置action和method, 否则, 直接将action:后面的内容设置为action
1.1.6.1.3. redirect: 直接跳转到指定的url
1.1.6.1.4. redirect-action: Action跳转
1.1.6.2. 创建一个空HashSet: uniqueParameters
1.1.6.3. 获取到原生的request对象的所有参数的Map: parameterMap
1.1.6.4. 迭代parameterMap, 在保证每个名字的参数只处理一次的前提下, 将所有需要特殊处理的参数进行处理, 并添加到uniqueParameters这个HashSet中
1.1.7. 处理Action的名字: 这里主要是处理动态方法调用的情况
分享到:
相关推荐
在Struts2项目中,它们可以用来管理依赖、执行构建任务,确保项目的标准化和可重复性。此外,IDE如Eclipse、IntelliJ IDEA也有自动生成代码的功能,例如从数据库表生成实体类和DAO。 3. **数据库逆向工程**: 这个...
在Struts框架中,有几个核心的关键对象,它们是构建基于MVC(模型-视图-控制器)架构的应用程序的关键组件。下面将详细解释这些对象及其作用: 1. **ActionServlet**: ActionServlet是Struts框架的核心控制器,它...
在Struts2中,ActionMapping由框架自动管理,开发者通常不需要直接操作。 3. **Interceptor(拦截器)**:拦截器是Struts2的一大亮点,它们可以插入到Action调用链中,对请求进行预处理和后处理。拦截器可以实现...
8. **异常处理**:Struts2提供了全局的异常处理机制,可以捕获并处理Action执行过程中的异常,提高程序的健壮性。 通过这个"Struts2项目代码"实例,你可以学习如何配置Struts2框架,编写Action类,使用拦截器,理解...
2. **配置文件**:struts-config.xml是核心配置文件,包含了Action、ActionMapping、FormBean和Result的定义,这些定义指导了请求如何被处理并跳转到相应视图。 3. **Tiles框架**:Struts1可以与Tiles框架结合使用,...
1. **Action接口**:Struts1中的Action类需要实现Action接口,而在Struts2中,可以实现Action接口或直接使用ActionSupport类,后者提供了默认的行为。 2. **请求处理**:Struts1通过Servlet的service方法处理请求,...
在Struts2中,ActionMapping通常由框架自动创建,基于struts.xml配置文件中的设置。 4. **拦截器(Interceptors)**: - 拦截器是Struts2的重要特性,它们允许在Action执行前后插入额外的逻辑,如权限检查、日志记录...
#### 一、理解MVC思想 & Struts2中拓展的MVC思想 **1. 传统的MVC思想:** - **客户端向服务器发起请求(View):** 用户通过浏览器或其他客户端软件向服务器发送请求,请求可能包含用户希望查看的数据或进行的操作...
在Struts2中,模型由Java对象实现,视图通常是JSP页面,控制器则由Struts2框架处理。通过这种方式,开发者可以专注于业务逻辑的实现,而无需关心展示层的细节。 三、Struts2架构 Struts2的核心组件包括Action、...
2. **Action类和ActionMapping**:在Struts2中,Action类是业务逻辑的载体,负责处理用户请求并返回结果。ActionMapping则定义了Action与URL的映射关系,实现请求与处理的对应。 3. **OGNL(Object-Graph ...
以上只是Struts2框架的部分核心知识点,实际学习过程中还需要结合具体的项目实践,理解和掌握每个概念的用法和应用场景。通过这个教学课件,你可以系统地学习Struts2的各个方面,为Java web开发打下坚实的基础。
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它极大地简化了在Java EE平台上构建动态Web应用的过程。这个压缩包文件中的"Struts2-6"、"Struts2-5"和"Struts2-4"可能是不同阶段...
Struts2是一款基于MVC设计模式的Java Web框架,它为开发者提供了构建应用程序的强大工具,提高了开发效率并简化了Web应用的复杂性。这个压缩包包含的"src_java_xwork"和"src_java_struts2"是Struts2的核心源码,分别...
Struts2是Java Web开发中的一个强大框架,它在MVC(Model-View-Controller)设计模式的基础上,为开发者提供了一种高效、灵活且可扩展的解决方案。本篇文档将深入探讨Struts2的核心概念、架构以及实际应用,旨在帮助...
2. **全局变量(Global Variables)**:在Struts2中,全局变量通常是指在struts.xml配置文件中定义的可全局访问的对象,如常量、拦截器栈和结果类型。这些配置可以提高代码的复用性和可维护性。 3. **Action转化...
为了更好地理解Struts2的工作原理,下面我们来详细介绍一下Struts2中的几个关键接口和类: 1. **ActionMapper**:该接口用于根据请求的URL查找是否存在对应Action调用。它是请求处理流程的第一步,决定了后续流程的...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、结构清晰的MVC(Model-View-Controller)架构的Web应用。本讲义详细介绍了Struts2框架的各个方面,帮助开发者从基础到进阶全面掌握其用法。 1. **...
Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性和可扩展性高的Web应用的工具。这份"最新Struts2开源实例代码以及Struts2源码"包含了Struts2...
1. **Action类和ActionMapping**:在Struts2中,Action类是业务逻辑的主要载体,它处理用户请求,并通过ActionMapping来映射URL到特定的Action。 2. **拦截器(Interceptors)**:拦截器是Struts2的一个强大特性,...
OGNL(Object-Graph Navigation Language)是Struts2中用于访问和操作这些对象的表达式语言。 现在,我们来看这个"struts2day04"和"struts2day04CRUD"案例,它们很可能是关于创建、读取、更新和删除(CRUD)操作的...