`
wuhaidong
  • 浏览: 357736 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Struts2入门--namespace属性详解

阅读更多

  namespace 将action 分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用namespace可以有效地避免action重名的冲突,例如每一个package 都可以有自己独立的menu 和 help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace 的不同向服务器提交不同的package的action 请求。

 

"/" 表示根 namespace ,所有直接在应用程序上下文环境上的请求(Context)都在这个package 中查找。

 

""  表示默认 namespace ,当所有的namespace 中都找不到的时候就在这个namespace 中寻找。

 

struts2 的基本流程:

 

struts2的基本流程,当客户发生请求以后,触发struts2 的 FilterDispatcher 过滤器(默认配置是所有请求都会触发)。如果请求是以 .action 结尾,FilterDispatcher会去 struts.xml 里面查找action 元素的name属性配置,找到匹配的,然后运行其class属性指定的类。

 

(我的尝试:如果不是以.action 结尾,就会出错了: 如form 无namespace 属性,或者 namespace="",则生成的JSP 文件里action 没有后缀)

 

在strtus2 基本流程里是这样说明的,现在补充一点,匹配的不光是name 属性,还要package 的namespace属性。

 

定义并生成Action:

 

在一个Struts2 应用程序中,一个指向Action 的链接通常有 Struts Tag 产生,这个Tag 需要指定Action 名字,Struts框架会自动添加,诸如后缀等的扩展,例如:

 

<s:form action="Hello"> 
<s:textfield label="Please enter your name" name="name"/> 
<s:submit/> 
</s:form> 

 

将产生一个如下的链接的请求:http://hostname:post/appname/Hello.action

在定义Action 的名字的时候不要使用.和/ ,最好使用英文字母和下划线。

 

 

Struts框架接受请求及匹配action:

 

每当struts2框架接受到一个请求的时候,它会去掉Host,Application和后缀等信息,得到Action 的名字,例如如下的请求将得到Welcome 这个action 。http://www.planetstruts.org/struts2-mailreader/Welcome.action

 

Struts2 在匹配一个action 的时候,先到它指定的命名空间中去找,如果没有再到这个默认的命名空间中去找。

 

Struts2 还支持跟命名空间("/"),当一个request 直接请求context path 下面的资源时,struts2 会首先到跟命名空间下去寻找匹配的action,例如请求是http://server/myapp/bar.action,那么我们首先会去”/”命名空间下去寻找这个action。 

 

如何从URL映射到一个action中:

 

关于如何从URL映射到一个action 中我做了一些测试,发现可以遵循如下的一个规则:

 

1. 获得请求路径的URL,例如url 是:http://server/myapp/path1/path2/path3/test.acton

 

2. 首先寻找namespace 为/path1/path2/path3 的package。如果存在这个package ,则在这个package中寻找名字为test的action ,若找到则执行,否则报错; 如果不存在这个package 则转步骤3。

 

3.寻找namespace为/path1/path2/path2 的package。如果存在这个package ,则在这个package 中寻找名字为test的action,若找到则执行,否则报错,如果不存在这个package 则转步骤4;

 

4.寻找namespace 为/path1 的package,如果存在这个package ,则在这个package 中寻找名字为test 的action,若找到则执行,否则报错;

 

如果仍然不存在这个package ,就去namespace为空字符串的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入门实例教程详解

    ### Struts2入门实例教程详解 #### 一、环境搭建与基本配置 在开始学习Struts2框架之前,首先需要确保开发环境的正确搭建。根据提供的文档,所使用的开发工具为MyEclipse6,Web服务器为Tomcat6,Struts版本为...

    struts2入门小案例源码

    本入门案例主要涵盖了Struts2的基础环境搭建和配置文件的使用,帮助初学者快速理解和掌握Struts2的核心概念。 在开始之前,确保你已经安装了Java开发工具包(JDK)和Apache Maven或Apache Ant,这些都是开发Java ...

    Struts2 json插件入门指南.pdf

    ### Struts2 JSON插件入门知识点详解 #### 1. 依赖包 - **Struts2 必需的 6 个 jar 包** - `commons-fileupload-1.2.2.jar`: 提供了文件上传功能的支持。 - `commons-io-2.0.1.jar`: 用于处理I/O操作,简化输入...

    Struts2框架笔记

    #### Struts2入门案例 入门案例通常涉及到简单的请求处理流程,从创建项目结构到配置web.xml文件,并定义struts.xml中的业务逻辑。以下是对入门案例中几个关键部分的详细介绍: 1. **web.xml配置**: 在Struts2应用...

    Struts2入门级HelloWord

    这篇入门级教程将帮助初学者理解Struts2的基本概念和工作原理。 在Struts2中,HelloWorld程序是一个标准的起点,它展示了框架的基本配置和控制器的工作方式。首先,我们需要在项目中添加Struts2的依赖库,这通常...

    struts简单实例详解

    以上就是一个简单的Struts2入门实例。通过这个例子,你可以了解到Struts如何处理用户请求,如何组织Action和Result,以及如何与视图进行交互。随着对Struts框架的深入学习,你可以掌握更多高级特性,如拦截器、国际...

    Struts2技术笔记(个人总结的,都有代码示例)

    #### 二、Struts2执行流程详解 Struts2的执行流程主要分为以下几个步骤: 1. **用户请求**:当用户通过浏览器发起请求时,请求首先会被送到Struts2的前端控制器`StrutsPrepareAndExecuteFilter`。 2. **过滤器处理...

    Struts入门教程

    本教程将引导初学者逐步了解如何入门Struts 2。 **核心组件详解** 1. **配置文件**:Struts 2 的核心配置文件包括`struts.properties`和`struts.xml`。`struts.properties`是全局属性文件,用于存储系统运行时的...

    Struts2的第一个入门实例(一)

    **Struts2第一个入门实例详解** Struts2是一款强大的MVC框架,用于构建Java Web应用程序。这个入门实例将引导我们逐步了解如何配置和使用Struts2框架创建一个简单的Web应用。我们将从创建项目结构、配置Struts2核心...

    struts学习笔记

    ### Struts2框架详解 #### 一、Struts2框架介绍 Struts2是一个基于MVC模式的开源Java Web框架,它提供了丰富的功能用于构建Web应用程序。与Struts1相比,Struts2的设计思想和架构有着根本的不同。Struts2的核心是...

    传智播客struts2框架2016版视频教程笔记

    #### Struts2配置详解 ##### Package - **作用**:用来组织Action,类似于Java中的包的概念。 - **属性**: - `name`:包的名称。 - `extends`:继承的包。默认情况下继承`struts-default`。 - `namespace`:...

    Strut2入门例子

    ### Struts2入门案例详解 #### 一、项目背景与目的 本案例旨在通过一个简单的登录功能演示Struts2框架的基本用法。Struts2是一个用于开发Java Web应用程序的开源框架,它支持多种编程模式,如MVC模式,并提供了一...

    struts2笔记

    ### Struts2框架详解 #### 一、Struts2框架简介 Struts2是一个基于Java的Web应用程序开发框架,它遵循MVC(Model-View-Controller)架构模式。相较于Struts1,Struts2在很多方面进行了改进和完善,特别是在控制器...

    Struts2.1+Spring3.0+JPA1.0 .pdf

    以上知识点涵盖了Struts2框架的基本概念、搭建步骤以及核心功能的应用,对于初学者来说是一个很好的入门指南。随着实践经验的积累,开发者还可以探索更多高级特性,如类型转换、文件上传下载、防止重复提交等功能,...

    Strits2.0的框架的搭建

    ### Struts2.0框架搭建详解 #### 一、引言 随着Web应用程序的发展,越来越多的企业选择使用MVC(Model-View-Controller)架构模式来构建应用系统,以提高代码的可维护性和可扩展性。Struts2作为一款基于Java的开源...

    struts2.0的简单例子

    ### Struts2.0入门示例详解 #### 一、简介 本文将通过构建一个简单的登录系统来介绍Struts2框架的基本用法。Struts2是Apache Struts的一个升级版本,它采用MVC架构模式,使得Java Web应用程序的开发变得更加简单...

Global site tag (gtag.js) - Google Analytics