根据struts reference中所说的
Namespaces are not a path!
Namespace are not hierarchical like a file system path. There is one namespace level. For example if the URL /barspace/myspace/bar.action is requested, the framework will first look for namespace /barspace/myspace. If the action does not exist at /barspace/myspace, the search will immediately fall back to the default namespace "". The framework will not parse the namespace into a series of "folders". In the Namespace Example, the bar action in the default namespace would be selected.
但是我在实践中发现如果请求http://localhost:8080/StrutsTest/RefLink/deap/login.action,这样的url,我的struts.xml中:
<package name="TestNamespace2" extends="struts-default" namespace="">
<action name="login" class="com.struts2.test.LoginDefault">
<result name="got">/login.jsp</result>
</action>
</package>
<package name="TestNamespace4" extends="struts-default" namespace="/RefLink">
<action name="login" class="com.struts2.test.LoginTest">
<result name="got">/login.jsp</result>
</action>
</package>
<package name="TestNamespace3" extends="struts-default" namespace="/RefLink/deap/leaf">
<action name="login" class="com.struts2.test.LoginLeaf">
<result name="test">/login.jsp</result>
</action>
</package>
如果按照reference所说的应该是找不到对应的namespace后,直接查找namespace为“”的,但是我实际试验中发现它调用LoginTest,这个情况和wdl13的http://wdl123.iteye.com/blog/340709所说的一样,难道reference错了,还是我的英语有问题
明白了,struts的寻找方法是这样的:引自wdl13的http://wdl123.iteye.com/blog/340709
1.获得请求路径的URI,例如url是:http://server/myapp/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,若找到则执行,否则报错;如果不存在这个package则转步骤3;
//问题的关键在这里:如果在寻找namespace的时候,没能找到符合的namespace,例如/path1/path2/path3,则一切如wdl123所写的,逐次往上目录当做namespace找,但是一旦存在/path1/path2/path3这样的namespace,那么如果在这个namespace下没能找到test.action,则他不会再逐次往上级目录匹配namespace,而是直接转向了namespace为""的去寻找action。
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。
更新后的<package name="TestNamespace2" extends="struts-default" namespace="">
<action name="login" class="com.struts2.test.LoginDefault">
<result name="got">/login.jsp</result>
</action>
</package>
<package name="TestNamespace4" extends="struts-default" namespace="/RefLink">
<action name="login" class="com.struts2.test.LoginTest">
<result name="got">/login.jsp</result>
</action>
</package>
<package name="TestNamespace5" extends="struts-default" namespace="/RefLink/deap">
<action name="loginNO" class="com.struts2.test.LoginTestDeap">
<result name="got">/login.jsp</result>
</action>
</package>
这次 http://localhost:8080/StrutsTest/RefLink/deap/login.action,直接在namespace="/RefLink/deap"下没有找到login.action,就不再是往/RefLink下找action了,而是直接去了namespace="", 调用了com.struts2.test.LoginDefault。
分享到:
- 2009-08-19 22:47
- 浏览 2189
- 评论(0)
- 论坛回复 / 浏览 (0 / 2676)
- 查看更多
相关推荐
在Struts2中,`struts.xml`是核心配置文件,它定义了应用的各个组件,如动作(Actions)、结果(Results)、拦截器(Interceptors)等。本篇文章将深入探讨如何使用Dom4j这个XML处理库来解析`struts.xml`,以便...
下面将详细介绍Struts.xml文件中的关键元素和它们的作用。 1. **<struts>根元素**: - `<struts>` 是整个配置文件的起始标签,包含了所有其他配置元素。 2. **元素**: - `<package>` 定义了一个包,可以看作是...
"Struts2 中 Struts.xml 配置文件详解" Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、...
比如在大型项目中,可以将用户管理、商品管理和订单管理等不同的功能模块分别配置在不同的xml文件中(如user.xml、goods.xml和order.xml),然后通过struts.xml中的标签将这些模块配置文件引入主配置文件中。...
在Struts2中,配置文件`struts.xml`扮演着核心角色,它定义了动作(Action)、包(Package)和结果(Result)等关键组件的行为。为了方便地解析和处理这些配置,开发者常常会创建自定义的包装类(Wrapper Class),...
这篇博文详细介绍了如何理解和配置Struts2框架中的struts.xml文件,以实现MVC(Model-View-Controller)设计模式的高效应用。 在Struts2框架中,struts.xml文件主要包含以下几个部分: 1. **包(package)定义**:...
在深入探讨Struts2.0框架中的`struts.xml`配置文件之前,我们先来了解一下Struts2.0框架的基本概念。Struts2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用...
现在,当用户访问匹配Action的URL时,Struts2框架会解析`struts.xml`文件中的配置,执行对应的Action,然后根据结果类型返回相应的视图。你可以在此基础上扩展配置,比如添加更多的Action、结果类型、拦截器,以满足...
在Struts框架中,`struts.xml`配置文件扮演着极其重要的角色。它主要用于定义应用中的各种配置信息,包括但不限于包(Package)、拦截器(Interceptor)、Action以及结果(Result)等。 #### 二、Struts配置文件的...
以下是关于`struts.xml`的详细说明: 1. **文件结构**: `struts.xml`遵循特定的XML结构,它以`<struts>`作为根元素,包含了多个`<package>`元素,每个`<package>`元素代表一个独立的包,可以看作是Action的分组。...
在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...
在Struts2框架中,配置文件`struts.xml`和`web.xml`是核心部分,它们定义了应用程序的行为和路由规则。随着版本的更新,配置方式也会有所改变。以下是Struts2.5版本中`struts.xml`和`web.xml`配置的更改方法: **1....
在Struts2中,`struts.xml`文件是核心配置文件,用于定义应用的行为、动作映射、结果类型、拦截器等。这篇博文主要探讨了`struts.xml`文件的元素结构,下面我们将详细解析这些关键元素。 首先,`struts.xml`文件...
`struts-default.xml`通常包含了Struts2的默认配置,包括一些预定义的拦截器和Action。 4. **package标签**: `<package>`定义了一个行为模块,它是一系列Action的集合。每个`package`都需要一个唯一的名字,通过`...
以下是关于Struts.xml配置文件各个元素的详细说明: **Bean配置** 在Struts.xml中,`<bean>`标签用于定义Java Bean实例。以下是它的主要属性: 1. **class**: 必填属性,指定了Bean的实现类。例如,`class=...
标题"S2H action+struts.xml+jsp"表明这是一个关于使用Struts框架进行Web开发的话题。Struts是Apache软件基金会的Jakarta项目中的一个开源框架,主要用于构建基于Java的、MVC(Model-View-Controller)模式的Web应用...
Struts.xml 文件是 Apache Struts 2 框架的核心配置文件,用于定义应用程序的行为、组织 Action、拦截器以及结果页面等。以下是该文件的主要组成部分和相关知识点的详细解释: 1. **DOCTYPE 声明**: DOCTYPE 声明...
在Struts2中,XML配置文件(通常命名为struts.xml)是整个框架的基石,它负责设置Action、拦截器、结果页面以及其他关键组件。 **1. 包配置(Package Configuration)** 包在Struts2中扮演着组织和管理的角色,它...
Struts.xml 文件是 Apache Struts 2 框架的核心配置文件,用于定义应用程序的行为、组织Action、拦截器以及结果页面等。以下是该文件中关键元素的详细解释: 1. **DOCTYPE声明**: - 第一行的DOCTYPE声明指定...
在案例的文件名"struts2Study"中,我们可以推测这可能是一个包含了整个Struts2应用的源码结构,包括Struts2的配置文件(struts.xml)、Action类、DAO层的实现以及可能的JPA实体类和数据库配置等。这些文件将帮助我们...