佐证了这样一个原则,package存在,但action没找到,就自动去默认空间去找。如果package不存在,则自动向上一级目录找,一级级倒到根目录。  根目录再没找到,再去默认目录找

网上对于命名空间一致的说法为:

如果请求为/test/search/get.action,系统首先查找/test/search命名空间下是否有get的Action,如果有,则使用该Action处理用户请求。否则系统进入默认命名空间中寻找是否含有get的Action,不会去子目录下找。

如果请求为/login.action,系统首先在根命名空间查找login的Action,如果有,则使用该Action处理用户请求。否则系统进入默认命名空间中寻找是否含有login的Action。

默认命名空间中Action可以处理任何命名空间下的Action,而根命名空间中的Action只能处理根命名空间下的Action。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

因为上述跟我实际做的有点不相符,然后经过不断的测试,终于弄明白了。也不能说上述说法错误,只是有个前提条件。

使用的版本为Struts2.5.8

首先我配置了很简单的3个包,第一个为默认命名空间,第二个为根命名空间,第三个为/book命名空间。

  1.  
    <package name="wxl1" extends="struts-default">
  2.  
    <action name="def">
  3.  
    <result>/WEB-INF/content/first.jsp</result>
  4.  
    </action>
  5.  
    </package>
  6.  
    <package name="wxl2" namespace="/" extends="struts-default">
  7.  
    <action name="def">
  8.  
    <result>/WEB-INF/content/second.jsp</result>
  9.  
    </action>
  10.  
    </package>
  11.  
    <package name="wxl3" namespace="/book" extends="struts-default">
  12.  
    <action name="def">
  13.  
    <result>/WEB-INF/content/third.jsp</result>
  14.  
    </action>
  15.  
    </package>

当请求为/book/def,毫无疑问显示的是/book下的视图。

测试1、当请求为/abc/def时,显示的却是根命名空间下second.jsp的视图。不是应该先去abc下找,找不到去默认命名空间吗,为什么显示的是根命名空间下的视图。

测试2、当请求为/book/abc/def时,显示的是/book命名空间下的视图。竟然跑进子目录里找到了。

一开始我以为是版本更新造成的,然后我又加上一个命名空间为/book/abc的包,但是不配置action。

  1.  
    <package name="wxl4" namespace="/book/abc" extends="struts-default">
  2.  
    </package>

当加上命名空间为/book/abc的包后,

同样请求为/book/abc/def,显示的是默认命名空间下的视图,不再是/book命名空间下的了。

这就遵从了文章开头的说法,/book/abc下没找到,然后跑默认的命名空间下找,并不会去/book下找。

造成上述的原因就是:请求的命名空间没有定义过。struts会把请求的命名空间去掉一层,再找,找不到再去掉一层,直到命名空间为/,也就是去根命名空间下找了(随便给个/dsjhfsd/dsfsdf/sdhf/def请求,显示的也是根命名空间下的视图,当然根下要有def的action,否则还是到默认命名空间)。所以测试1显示的是根命名空间,测试2显示的是/book空间,因为去掉一层就找到了。

由此得到结论:

当请求到来时,找actioon会分为2步

1、struts首先决定使用哪个命名空间的包,决定的原则就是上述,一层层剥离,找到最相近的。

2、只有决定了使用哪个包之后,才开始找action,找action的原则就是文章开头的说法。

Struts2关于命名空间的例子的更多相关文章

  1. struts2学习笔记之九:struts2的命名空间

    struts2的命名空间适用于多人开发,根据不同模块命名不同的命名空间,方便开发和管理 struts2如果没有配置命名空间,默认命名空间为"/",Struts2中Action的完整 ...

  2. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

  3. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

    转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html   Jbpm4.4+hibernate3.5.4+sprin ...

  4. 用Struts2搭建一个登录例子【本人亲测好用】

    今天尝试struts2的搭建,遇到不少的问题,终于一一解决,逛了很多地方,最终完成搭建 1.首先要下载struts2的一些组件,我下载的是版本2.3.4.1,Eclipse是4.6版本的.由于版本的不 ...

  5. Struts2之命名空间与Action的三种创建方式

    看到上面的标题,相信大家已经知道我们接下来要探讨的知识了,一共两点:1.package命名空间设置:2.三种Action的创建方式.下面我们开始本篇的内容: 首先我们聊一聊命名空间的知识,namesp ...

  6. Struts2学习笔记--Struts例子及开发流程

    参考资料:http://blog.csdn.net/hntyzgn2010/article/details/5547753 http://chenlh.iteye.com/blog/464341 入门 ...

  7. struts2的包和命名空间

    struts2提供了命名空间的功能,主要是为了处理同一个WEB应用中包含同名Action的情形.struts2以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空 ...

  8. struts2命名空间与访问路径

    比如项目deom的struts.xml中有如下片段 Java代码 <package name="demo" extends="struts-default" ...

  9. Struts2.0 xml文件的配置(package,namespace,action)

    struts.xml配置 struts.xml文件是整个Struts2框架的核心. struts.xml文件内定义了Struts2的系列Action,定义Action时,指定该Action的实现类,并 ...

随机推荐

  1. 为什么单个binlog会大于max_binlog_size设置

    查看参数设置mysql> show global variables like '%max_binlog_size%';+-----------------+------------+| Var ...

  2. websock(AMQ)通信-前端

    服务端和客户端之间的通信 前端开发经常会依赖后端,那么如果后端服务器还没做好推送服务器,那么前端该如何呢.最简单的就是自己模拟一个服务器,用node来搭建,这边只简单介绍搭建的过程 node搭建服务器 ...

  3. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  4. mac文本操作小技巧——2019年10月17日

    声明:看的别人博主写的,自己整理的,非原创,只是自用. mac文本操作技巧 官方指导文档:https://support.apple.com/zh-cn/HT201236 1.光标移动 1.1 行首. ...

  5. 10.Servlet简单介绍

    1.什么是Servlet * Servlet是javaweb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet种通常需要: ...

  6. vue cli3以上的项目中如何使用axois请求本地json文件

    首先明确一点,在vue cli3以上的版本中,存放静态资源的文件是public 我刚开始以为是和vue cli2一样需要放在static文件夹下,但是项目中没有这个文件夹,我就自己创建了一个,结果请求 ...

  7. ARGB色彩模式

    看到#ff ff ff 00 00这种 就是啦 .开头两位表示透明度.

  8. sql判断中文、数字、英文

    IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL DROP FUNCTION DBO.GET_NUMBER2 GO )) ) AS BEGIN BEGIN ,'' ...

  9. LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推

    题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大 ...

  10. Linux测试端口的连通性的四种方法

    目录 1.telnet 2.ssh 3.crul 4.wget 方法一.telnet telnet为用户提供了在本地计算机上完成远程主机工作的能力,因此可以通过telnet来测试端口的连通性,具体用法 ...