把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,那么选择最后一个执行。
上面这几点是我通过多次测试总结出来的,不知道是否概括到了所有可能的情况,纰漏之处,还请指正。
相关推荐
在Struts2中,命名空间(Namespace)是一个重要的概念,用于组织和分隔应用程序的不同部分,使得配置更加清晰和模块化。文件上传功能则是Struts2提供的一种方便用户上传文件的机制,对于处理如图片、文档等上传需求...
### Struts2中命名空间的使用 #### 一、引言 在开发Web应用程序时,随着项目的扩大,可能会出现多个具有相同名称的动作(Action)。为了有效地管理和区分这些动作,Struts2框架引入了命名空间的概念。本文将详细...
总的来说,Struts2 Action包的命名空间和Servlet API的结合使用,使得开发者能够灵活控制请求的处理流程,通过拦截器实现通用功能,同时利用视图组件创建丰富的用户界面。通过对框架核心类的了解,可以更深入地掌握...
2. **空间名(Namespace)**:在Struts2中,命名空间用于区分不同的URL路径,每个Action都可以关联一个或多个命名空间。空间名通常与包名保持一致,但并不强制。例如,如果Action类位于`com.example.myapp.actions`...
是一个简单的struts2中阐明命名空间的实例
本篇文章将深入探讨Struts2中的三个关键概念:命名空间、模型驱动以及表单重复提交的处理,这些都是在实际开发中必不可少的知识点。 **命名空间(Namespace)** 命名空间在Struts2中扮演着路由和隔离的作用。它可以...
根据描述中的内容,我们可以进一步了解 Struts 2 中 Action 接口的应用及命名空间配置的相关知识点。 1. **Action 接口介绍** - **接口定义**:`com.opensymphony.xwork2.Action` 接口中定义了一系列的标准字符串...
Namespace是Struts2中用于组织Action的一种方式,可以看作是Action的命名空间。它有助于避免Action名称冲突,同时提供了更灵活的URL映射策略。 **四、标签** 标签在struts.xml中定义一个配置包,可以包含多个Action...
5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了Action的访问URL。默认为空字符串,可自定义如`/`、`/module1`等,帮助划分不同功能模块的Action。 6. **Action**:Struts2的一...
- **包结构**:Struts2对WebWork2的包结构进行了重新组织,将其纳入到Struts的命名空间下,这不仅仅是简单的名称更改,更是为了统一框架内部结构,便于开发者理解和使用。 - **社区与生态**:Struts2凭借其更广泛的...
- **命名空间(Namespace)**:Struts2中的命名空间是一个重要的概念,它可以用来组织Action,避免命名冲突。默认情况下,如果没有指定命名空间,则使用的是默认的空命名空间。 - **示例**: - 当命名空间为`/`时...
1. **Action配置**:在struts.xml或类似的配置文件中,Action元素会包含一个namespace属性,用于定义Action的命名空间。例如: ```xml <namespace>/admin <result>success.jsp ``` 2. **URL构造**:在JSP...
这里,`@Namespace`注解创建了一个名为"/users"的命名空间,而`@Action`注解的"value"属性定义了在这个命名空间内的动作名,即"create"。 Struts2还提供了`@Param`注解来处理请求参数。例如: ```java public ...
北京时间8月22日13时,Apache官方发布通告公布了Struts2中一个远程代码执行漏洞(cve-2018-11776)。该漏洞可能在两种情况下被触发,第一,当没有为底层xml配置中定义的结果设置namespace 值,并且其上层动作集配置...
关于命名空间配置,当需要在同一个Web应用中定义同名Action时,Struts2通过命名空间进行区分。通过为`package`元素设置`namespace`属性,可以为包下的所有Action指定共同的命名空间。例如,将上面的配置改为: ```...
1. 创建标签库描述文件(TLD,Tag Library Descriptor):这是定义自定义标签的关键文件,用于描述标签的属性、命名空间等信息。例如,`struts-tags.tld`。 2. 编写标签处理类(Tag Class):这个类负责处理标签的...
总之,解决Struts2跳转至404页面的问题需要对整个应用的配置进行仔细检查,从Action、命名空间、拦截器到结果类型、资源路径,甚至包括服务器和IDE的设置。理解Struts2的工作原理,结合日志信息,通常可以找出导致...
总结来说,Struts2的XML配置文件是定义应用程序行为的蓝图,它包括包、命名空间、Action和结果的配置,使得开发者可以通过声明式的方式控制请求的处理流程和页面的展示。熟练掌握XML配置是理解和使用Struts2框架的...
3. `@Namespace`:定义了动作的命名空间,可以用来组织和分隔不同的功能模块。例如: ```java @Namespace("/admin") public class AdminActions { // ... } ``` 所有在这个类中的动作都将位于`/admin`命名空间下。 ...