把namespace单独拉出来讲一方面是因为它实际上不是一个element,而只是一个attribute,前面已经说了,它是package的一个attribute;另外一方面是因为这个属性是我接触Struts2的时候第一个研究的,印象很深,鉴于这两个原因我决定单独说一下它。
在struts1中是没有命名空间这个概念的,通过命名空间我们可以将所有的action配置划分为一个个逻辑单元,每个单元都有它自己的标识前缀。命名控件可以避免action命名的冲突。每个命名空间下有可以有一个叫做”help”的action,并且有着各自不同的实现,当然在同一个命名空间下最好是不要出现两个名字一样的action。当命名空间的前缀出现在浏览器的URI中时,标签会意识到命名空间,因此我们不必将命名空间嵌套在表单和链接中。
默认的命名空间是空字符串””,也就是不设置namespace属性时候的命名空间。我们在匹配一个action的时候,先到它指定的命名空间中去找,如果没有再到这个默认的命名空间中去找。Struts2还支持根命名空间(“/”),当一个request直接请求context path下面的资源时,struts2会首先到跟命名空间下去寻找匹配的action,例如请求是http://server/myapp/bar.action,那么我们首先会去”/”命名空间下去寻找这个action,下面给给出了一个namespace的样本:
<package name="default">
<action name="foo" class="mypackage.simpleAction>
<result name="success" type="dispatcher">greeting.jsp</result>
</action>
<action name="bar" class="mypackage.simpleAction">
<result name="success" type="dispatcher">bar1.jsp</result>
</action>
</package>
<package name="mypackage1" namespace="/">
<action name="moo" class="mypackage.simpleAction">
<result name="success" type="dispatcher">moo.jsp</result>
</action>
</package>
<package name="mypackage2" namespace="/barspace">
<action name="bar" class="mypackage.simpleAction">
<result name="success" type="dispatcher">bar2.jsp</result>
</action>
</package>
关于如何从URI映射到一个action中我做了一些测试,发现可以遵循如下的一条规则:
1.获得请求路径的URI,例如url是:http://server/myapp/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在
这个package中寻找名字为test的action,若找到则执行,否则报错;如果不存在这
个package则转步骤3;
3.寻找namespace为/path1/path2的package,如果存在这个package,则在这个package
中寻找名字为test的action,若找到则执行,否则报错;如果不存在这个package
则转步骤4;
4.寻找namespace为/path1的package,如果存在这个package,则在这个package中寻
找名字为test的action,若找到则执行,否则报错;如果仍然不存在这个package,
就去namaspace为空字符串的package下面去找名字为test的action,如果还是找不
到,页面提示找不到action。
这里有几点特殊的情况要说明一下,如下所示:
1.如果匹配到了多个package,比如上述流程中有多个namespace为/path1/path2/path3
的package,此时按照package出现的顺序从后向前的顺序查找action,直至找完为止。
2.如果在一个package中有多个name属性相同的action,那么执行追有一个action。比如上述流程中,有一个namespace为/path1/path2/path3的package,它里面含有多个名字为test的action,那么选择最后一个执行。
上面这几点是我通过多次测试总结出来的,不知道是否概括到了所有可能的情况,纰漏之处,还请指正。
转自:http://blog.csdn.net/cmtobby/article/details/1775190
相关推荐
接着,我们将进行以下步骤来配置Struts2: 1. **添加Struts2库** - 下载Struts2的核心库,包括struts2-core、struts2-convention-plugin等依赖包。 - 在Eclipse中,右键点击项目 -> Build Path -> Configure ...
本篇学习笔记将深入探讨Struts2的入门与配置,继续上一讲的内容。 首先,Struts2的基础入门涉及到以下几个核心概念: 1. **Action类**:在Struts2中,业务逻辑通常封装在Action类中。Action类是处理用户请求的主体...
本篇将深入讲解Struts2的基础知识和配置过程,帮助初学者快速入门。 首先,理解Struts2的核心概念是至关重要的。Struts2框架基于拦截器模型,通过一系列拦截器堆栈来处理HTTP请求,这些拦截器负责执行如验证、异常...
本篇文章将带你逐步学习如何搭建Struts2的基础开发环境,让你顺利入门。 首先,我们需要了解Struts2的核心组件和工作原理。Struts2框架主要由以下部分组成: 1. **FilterDispatcher**:这是Struts2的前端控制器,...
本篇文章将详细介绍如何在NetBeans环境下配置Struts2插件,以便更好地利用该框架进行开发。 首先,我们需要理解Struts2的核心概念。Struts2框架基于Action和Result,通过DispatcherServlet进行请求分发。Action类...
本入门篇主要涵盖了Struts2的基础配置、通配符使用、参数注入以及内置对象的获取,非常适合初学者进行学习。 1. **基础配置**:在Struts2中,基础配置主要通过`struts.xml`文件完成。这个文件定义了Action(动作)...
5. **配置Struts2**:在src/main/resources目录下创建`struts-default.xml`和`struts.xml`文件。在`struts-default.xml`中引入Struts2的默认配置。在`struts.xml`中配置你的Action,如下: ```xml <!DOCTYPE ...
这篇学习笔记将带你入门Struts2,通过创建第一个实例来理解其核心概念和基本配置。 首先,了解Struts2框架的结构至关重要。Struts2的核心组件包括Action、Result、Interceptor等,它们协同工作,处理HTTP请求并呈现...
本篇文章将深入探讨Struts2的基础知识,包括其核心概念、工作原理、主要特性以及如何创建一个简单的Struts2应用。 首先,我们来理解一下Struts2的核心概念。Struts2框架整合了Struts1和WebWork的优势,提供了一个...
本篇文章将围绕"Struts2学习初设系列(一)之环境搭建"这一主题,详细介绍如何配置和建立一个基本的Struts2开发环境。 首先,我们需要了解Struts2的基础知识。Struts2的核心是Action,它负责处理HTTP请求并返回响应...
本篇学习笔记将深入探讨Struts2.0的核心概念和配置,帮助你理解和掌握这个框架。 **一、Struts2的作用** Struts2的主要目标是提供一种结构化的开发方式,它整合了请求处理、视图展示和业务逻辑的交互。通过使用...
接下来,我们将按照以下步骤在Eclipse中配置Struts2: 步骤1:创建Java Web项目 在Eclipse中,选择"File" -> "New" -> "Dynamic Web Project",填写项目名并配置相关设置,如目标运行环境。 步骤2:添加Struts2库 ...
本篇文章将带你踏上Struts 2的自学之旅,首先从准备工作开始,然后通过一个简单的“Hello, World”程序来熟悉基本操作。 准备工作: 1. **环境配置**:首先确保你的计算机上已经安装了Java Development Kit (JDK)...
这篇博客文章“Struts2与Ext4.0的json交互”可能会探讨如何在Struts2中配置和使用JSON来与前端的Ext4.0框架进行通信。 首先,我们来看Struts2中的JSON插件。这个插件允许我们在Action类中直接返回JSON对象,无需...
本篇文章将深入探讨如何在IntelliJ IDEA开发环境中,利用Maven构建一个基本的Struts2项目。 首先,我们需要理解Maven,它是一个项目管理和综合工具,可以帮助我们管理项目的构建、依赖关系和配置。在IntelliJ IDEA...
本篇文章将带你入门Struts2,通过创建一个简单的"HelloWorld"示例来理解其核心概念。 首先,了解Struts2框架的基本组成: 1. **Action类**:这是业务逻辑的入口点,处理用户请求并返回结果。在我们的"HelloWorld...
本篇将深入讲解如何在Struts2中自定义拦截器,并通过提供的源代码进行分析。 拦截器是Struts2框架的核心组件之一,它允许我们在请求到达Action之前或离开Action之后执行一些额外的操作,如日志记录、权限验证、性能...
这篇博客文章可能探讨了在Struts2环境下处理文件下载的步骤和技术。 在Struts2中,`DownloadAction.java`很可能是一个关键的控制器类,它负责处理用户请求并提供文件下载。这个类通常会包含以下方法: 1. **预处理...
在搭建Struts2环境时,确保正确地在`web.xml`文件中配置了Struts2的核心过滤器(`org.apache.struts2.dispatcher.FilterDispatcher`或`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`,在...
这篇经典笔记主要涵盖了Struts2的核心概念,包括过滤器配置、命名空间、动作配置以及Action路径的问题。 首先,配置Struts2过滤器是启动框架的关键步骤。在`web.xml`文件中,你需要定义一个名为`struts2`的过滤器,...