首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

Struts 二 自学之路: 3.2 名称空间(namespace)详解

2012-11-03 
Struts 2 自学之路: 3.2 名称空间(namespace)详解内容简介: 这篇文章将会通过实例详细介绍 struts.xml 文

Struts 2 自学之路: 3.2 名称空间(namespace)详解
内容简介:
这篇文章将会通过实例详细介绍 struts.xml 文件中 package 元素下 namespace 属性的作用
         
说在前面的话:
namespace的作用是控制相应package下的action的url地址,url地址在web编程中是基础中的基础
我们的程序不同的功能实际上就是对相应url地址的访问来触发的,这个要牢牢掌握,有点象java的classpath

需要注意的事项:
我修改了tomcat端口,所以你们看到的http://127.0.0.1:8888/里的8888,要以你自己的tomcat端口为准
修改了xml文件一定要重新启动tomcat或者重新热部署

第一部分
首先我还是废话一下这个基础,这些你都很清楚可以跳过前面这部分
先来看一下一些相对路径的不同写法在tomcat里的运行情况,这里我们使用表单的action来介绍

打开我们上次的工程,在WebRoot文件夹下新建一个目录namespace,然后在里面新建一个Jsp文件testurl.jsp,这里下载
其代码如下



运行上面的例子可以看到结果,从运行结果可以看出,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">
其余的都是一样的
action="url" 和 action="./url" 都表示当前路径
action="../" 表示上级路径

上面的表单实际上是被当作超链接来使用的(没有表单参数,只是跳转),超链接的实际访问效果和表单是一样的 action="test.jsp" 和
<a href="test.jsp"> 都是访问test.jsp,只是表单允许用户输入数据,而超链接办不到



第二部分
接下来就该进入正题了,先把工程以前在根目录的index.jsp,error.jsp和welcome.jsp复制到namespace文件夹里,然后修改其代码
再新建两个jsp文件,分别为 error1.jsp,welcome1.jsp,这两个同error.jsp和welcome.jsp一样,只要确认文本就ok
index.jsp


下面来确认error.jsp,welcome.jsp,error1.jsp及welcome1.jsp的body部分
http://127.0.0.1:8888/Struts2Study/到这里去找NameSpace.action,
如果剩下这部分/以前没有内容,就代表到默认名称空间去找
注意:namespace属性的值等于"/"代表根空间,""代表默认空间,只是默认情况下二者大致相当,指执行结果

为了明白什么是先查找指定名称空间,再查找默认名称空间,我们把namespace.xml的配置文件改动一下
把package元素里的namespace属性去掉(你也可以分别试着让namespace=""或namesapce="/"来看效果)



这样又回到一开始的配置了,然后我们来执行,会有两种url地址,但是两种地址都能正常运行
http://127.0.0.1:8888/Struts2Study/namespace/NameSpace.action
http://127.0.0.1:8888/Struts2Study/NameSpace.action
第二种情况还比较好理解,这个就是上面说的/以前没有内容,就代表到默认名称空间查找
第一种情况要复杂点,被FilterDispatcher拦截下来后,它先到namespace="/namespace"里面去找
,没有找到,然后又到namespace=""去查找,找到了,所以也执行了

接下来我们再来把配置文件的 namespace改回 namesapce="namespace"
修改配置文件以后http://127.0.0.1:8888/Struts2Study/NameSpace.action会报异常
原因是/以前没有内容,就代表到默认名称空间查找,而配置文件里根本没有配置有默认空间的package,所以肯定找不到
给index.jsp再添加一个表单,提交给一个更容易看明白的地址



这个表单提交到以下地址,报了异常
http://127.0.0.1:8888/Struts2Study/namespace1/NameSpace.action
这个被FilterDispatcher拦截下来后,先到namespace="/namespace1"里面去找,没有找到,然后又到namespace=""去查找
还是没有找到,所以还是报异常



最后我们来做一个同名action的试验来结束名称空间的讲解,看不同名称空间,同名action是某可以使用
修改namespace.xml如下
 太好了.太牛了    4 楼    clskkk2222    2007-12-28              讲得很清楚 辛苦了。    5 楼    new    2008-01-12              struts 2.0.DTD 很重要起关键作用!!!1 

热点排行