struts的form标签的action是经过优化的
当html的form表单的action="/url"(以/开头的url地址)时,其会从http://127.0.0.1:8080这个根开始附加,我们要访问具体信息必需要加上项目的上下文(context),就是tomcat安装目录下wepapps/context(具体是你工程名字)这个文件夹名字,象这样 <form action="/Struts2Study/namespace/test.jsp" method="post" >
struts的form标签的action="/url"(以/开头的url地址)时,struts2帮我们作了优化,他会自动为我们在htpp://127.0.0.1:8080/后面加上
项目的上下文,再附加action后的url,而这也是我们开发时想要的本意,象这样<s:form action="/namespace/test.jsp">
注意:当访问有指定namespace的action默认方法时(不能带'.action')
<s:form action="login.action" namespace="/secure">无法访问
其余的都是一样的
action="url" 和 action="./url" 都表示当前路径
action="../" 表示上级路径
如何从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,那么选择最后一个执行。
分享到:
相关推荐
QT中的namespace机制是C++编程语言的一个特性,用于组织代码,避免命名冲突。在QT库中,`namespace`被广泛使用,尤其是`QT_NAMESPACE`和`Ui`这两个关键的命名空间。 `QT_NAMESPACE`通常被定义为`Qt`,这是QT库的...
在C++编程语言中,`namespace` 是一个重要的组织代码的工具,它允许程序员在一个命名空间内定义标识符(如变量、函数、类等),而不会与其他命名空间内的相同标识符冲突。`namespace` 提供了一种避免全局作用域污染...
在C++编程语言中,命名空间(namespace)是一种组织代码的方式,它可以帮助避免名字冲突问题。当多个程序或库在同一个程序中使用相似的变量名或函数名时,命名空间可以将这些元素分隔开,使得相同的名字在不同的命名...
### C++命名空间(namespace)详解 #### 命名空间概览 在C++编程语言中,`namespace`(命名空间)是一个关键的概念,用于管理标识符的作用域,避免命名冲突,尤其是在大型项目和库使用场景下。命名空间提供了一种...
在C++编程语言中,名空间(namespace)是一种重要的特性,其主要目的是解决标识符(如类、对象、函数等)的命名冲突问题。当多个库或模块使用相同的标识符时,名空间允许程序员在不引起冲突的情况下复用这些名称。...
首先,`Qt`命名空间的引入通常在C++源文件中通过`using namespace Qt;`来完成,这使得文件内的所有代码可以直接使用Qt中的类和函数,而无需每次都写上`Qt::`前缀。然而,这种做法在大型项目中可能会导致全局命名空间...
Namespace在Struts2中的作用至关重要,它是Action配置的一个关键部分,用于组织和隔离Action,使得一个大型项目中的多个Action能够有序地管理。 Namespace主要功能: 1. **URL映射**:Namespace可以看作是Action的...
【NSExtAddDelFld-MS Namespace Shell Extension范例】是一个示例项目,旨在展示如何使用Microsoft的Namespace Shell Extension技术创建虚拟目录和子目录,并且包括了添加和删除这些虚拟目录或文件的功能。Namespace...
本例主要解释了为什么不用using namespace std;,因为如果这么使用了,在其它地方如果用到了标准库中的标识符(那么多标识符,不能保证都记住),就会报错,如果程序工程很复杂,可能会查找冲突很麻烦,因此在实际...
### Namespace概念与应用 #### 一、Namespace简介 在C++中,`namespace`是一个非常重要的概念,用于解决标识符的命名冲突问题。随着软件规模的不断扩大和代码库的复杂化,不同模块之间可能会出现相同的标识符(如...
本文将详细探讨为什么在使用`<iostream>`时通常需要添加`using namespace std;`语句,以及这一做法背后的原理和技术细节。 ### C++命名空间概述 在深入讨论之前,首先了解下C++中的命名空间概念。命名空间是C++...
在编程领域,尤其是在C++这样的强类型语言中,命名空间(namespace)是一种组织代码的重要机制,它用于避免全局作用域内的名字冲突。本实战指南将深入探讨如何在QT框架下利用命名空间实现接口与实现的分离,从而提高...
"Solid-namespace"是一个专为前端项目设计的开源库,它专注于实体命名空间,尤其在处理RDF(Resource Description Framework)数据时显得尤为重要。 RDF是一种用于描述网络资源的标准模型,它使用URI(Uniform ...
在本教程中,我们将深入探讨JAXB的使用,并解决关于namespace prefix自定义的问题。 首先,让我们了解JAXB的基本工作原理。JAXB允许你通过注解或者XML绑定文件(.xjb)将Java类映射到XML Schema定义的元素和属性。...
在C++编程语言中,命名空间(namespace)是一种组织代码的重要机制,它的主要目的是解决标识符的命名冲突问题。在大型项目或者多个库之间,不同的开发者可能会使用相同的名字来定义变量、函数或类,这就会导致编译...
在C++编程语言中,`using namespace std` 是一个非常常用的指令,特别是在Visual C++ (VC++)环境中。这个指令允许程序员在代码中直接使用标准库(Standard Template Library, STL)中的函数、对象和类型,而无需每次...
Namespace Extensions是Windows操作系统中的一种高级特性,它允许开发者扩展Windows资源管理器(即Shell)的文件系统视图,为用户提供自定义的查看和操作方式。这些扩展通常表现为资源管理器中的虚拟文件夹,用户...
在Android开发中,Namespace、样式(Style)和主题(Theme)是构建用户界面的重要组成部分,它们为应用提供了统一的外观和感觉。这篇博客将深入探讨这些概念,以便开发者更好地理解和运用。 首先,让我们来理解...
在课件的第07讲中,可能详细讨论了如何定义和使用`namespace`,包括嵌套`namespace`、匿名`namespace`的用法,以及如何在多个文件间管理`namespace`。文档`doc07`可能包含了更多关于`namespace`的实际应用示例和最佳...
标题“CSS_namespace_thrift接口文档”提示我们,这个文档可能涉及到Thrift在CSS(可能是“Custom Service System”或“Cascading Style Sheets”的缩写,但在此场景下前者更合理)项目中的应用,尤其是在命名空间...