Struts2学习(三):namespace属性的使用

简介:

struts.xml文件中的package元素有一个namespace属性,这个属性有什么用呢,加了这个属性之后我们的url又该怎么写了,还是亲自实践一把吧,^_^。

我现在把struts.xml文件修改如下:

<!DOCTYPE struts PUBLIC   

     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   

     "http://struts.apache.org/dtds/struts-2.0.dtd">  

<struts>

   <package name="tutorial" extends="struts-default" namespace="/test">

      <action name="HelloWorld" class="tutorial.HelloWorld">

        <result>HelloWorld.jsp</result>

      </action>

   </package>

</struts>  

其它文件的内容都不变,和上一篇文章中一样,这是我在sayHello.jsp文件中点击提交,页面报错:The requested resource (/Struts/HelloWorld) is not available。下面做如下一些尝试:

1.将sayHello.jsp中form的action改为test/HelloWorld

   报错:The requested resource (/Struts/test/HelloWorld) is not available

2.将sayHello.jsp中form的action改为test/HelloWorld.action

   报错:The requested resource (/Struts/test/HelloWorld.jsp) is not available,这表明action已经找到,只是执行action之后找不到所转向的页面HelloWorld.jsp

3.将struts.xml中result标签改为<result>/HelloWorld.jsp</result>

   OK,测试通过!

因此,在设置了package的namespace属性之后,标准的访问url应该是:

http://webserver/webPrefix/namespace/actionname.action

实际上FilterDispatcher对url进行映射的方式非常复杂,我在上篇文章里面所做的推测

针对的只是一种最简单的情况而已,因为我做了很多BT的测试,得到了一些让我吃惊的结果。比如说我再加一个package:

    <package name="tutorial1" extends="struts-default">

        <action name="HelloWorld" class="tutorial.HelloWorld">

           <result>/HelloWorld.jsp</result>

        </action>

</package>

这个包和之前那个唯一的差别就是没有namespace属性,当然包名肯定是不同的咯,现在我将sayHello.jsp的action进行修改,我发现无论怎么改,只要它是以HelloWorld.action结尾,测试都是通过的,例如111/222/HelloWorld.action,aaa/bbb/HelloWorld.action,这些都能得到正确的答案。看来FilterDispatcher到底是怎么映射url的只能到源码里面去找答案了。但是在具体的开发中,我们只要严格按照http://webserver/webPrefix/namespace/actionname.action这个规则来配置url肯定是不是错的咯。










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/569965,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Kubernetes Nacos 数据中心
k8s(9)Namespace(命名空间)
Namespace(命名空间)
105 0
|
6月前
|
编译器 C语言 C++
【C++】命名空间 ( namespace )
【C++】命名空间 ( namespace )
|
1月前
|
编译器 数据安全/隐私保护 C语言
C++ 之命名空间namespace【详解】
C++ 之命名空间namespace【详解】
|
8月前
|
算法 C语言 C++
【C++技能树】NameSpace --命名空间的使用
我在这段代码中想使用rand这个变量名字.这是正常的行为.
64 0
|
9月前
|
编译器 程序员 C++
【C++】--- namespace命名空间
【C++】--- namespace命名空间
60 0
|
10月前
|
C++
【C++知识点】namespace命名空间的使用
【C++知识点】namespace命名空间的使用
66 0
|
10月前
|
存储 小程序 编译器
C++之命名空间(namespace)
C++之命名空间(namespace)
120 0
|
11月前
|
C语言 C++
详解C++中的命名空间(namespace)
详解C++中的命名空间(namespace)
219 0
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
2584 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
SQL Java 数据库连接
解释一下MyBatis中命名空间(namespace)的作用
在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件中的每个SQL语句就成了定义在这个命名空间中的一个ID。
1908 0