验证struts2中action的查找路径

以前看网上struts2的视频讲解时,其中讲解到action的查找路径时,该讲师说action的查找是依次向上一级查找的,例如有一个请求为/a/b/UerAction.action时,首先会到/a/b的命名空间里查找UserAction的Action,如果找不到就到/a的命名空间里查找UserAction的Action,如果还没有找到,以此类推,直到找到默认的命名空间,如果还没有找到,程序就会抛异常。可是近来我看见一本书中却是这样讲解的,还是这个请求/a/b/UerAction.action,首先会到/a/b的命名空间里查找UserAction的Action,如果找不到就到默认的命名空间里查找UserAction的Action,而不是到/a的命名空间里去找。显然这两种说法存在出入。今天就拿代码证明之。

1.首页核心代码

(请求的路径是/a/b/user)

 

  1. <s:form action="/a/b/user" >
  2. <s:textfield label="username" name="name"/>
  3. <s:submit></s:submit>
  4. </s:form>

2.写上三个简单的跳转之后的页面success.jsp success1.jsp success2.jsp,核心代码分别为:

 

  1. <h1>success</h1>
  1. <h1>SUCCESS1</h1>
  1. <h1>SUCCESS2</h1>

3.struts.xml的核心配置代码为:

  1. <struts>
  2. <!-- 默认命名空间 -->
  3. <package name="a" namespace="" extends="struts-default">
  4. <action name="user" class="com.easyteam.action.UserAction">
  5. <result >
  6. /success2.jsp
  7. </result>
  8. </action>
  9. </package>
  10. <!-- 命名空间为/a -->
  11. <package name="b" namespace="/a" extends="struts-default">
  12. <action name="user" class="com.easyteam.action.UserAction">
  13. <result >
  14. /success1.jsp
  15. </result>
  16. </action>
  17. </package>
  18. <!-- 命名空间为/a/b-->
  19. <package name="c" namespace="/a/b" extends="struts-default">
  20. <action name="user" class="com.easyteam.action.UserAction">
  21. <result >
  22. /success.jsp
  23. </result>
  24. </action>
  25. </package>
  26. </struts>

这三个空间的配置之所以这样顺序排列,是为了防止有按照顺序执行的可能。
运行之得到的结果为:

这个结果说明了action会首先从指定的命名空间去找。(网上和书中这一点都是相同的,没有异议)

在将struts.xml改成这样,就是将第三个注释掉

 

  1. <struts>
  2. <!-- 默认命名空间 -->
  3. <package name="a" namespace="" extends="struts-default">
  4. <action name="user" class="com.easyteam.action.UserAction">
  5. <result >
  6. /success2.jsp
  7. </result>
  8. </action>
  9. </package>
  10. <!-- 命名空间为/a -->
  11. <package name="b" namespace="/a" extends="struts-default">
  12. <action name="user" class="com.easyteam.action.UserAction">
  13. <result >
  14. /success1.jsp
  15. </result>
  16. </action>
  17. </package>
  18. <!-- 命名空间为/a/b-->
  19. <!--<package name="c" namespace="/a/b" extends="struts-default">
  20. <action name="user" class="com.easyteam.action.UserAction">
  21. <result >
  22. /success.jsp
  23. </result>
  24. </action>
  25. </package>
  26. --></struts>

再运行结果得到:

这个结果说明是到/a的路径下去查找的。

在将struts.xml改成这样,就是将第二个和第三个都注释掉:

 

  1. <struts>
  2. <!-- 默认命名空间 -->
  3. <package name="a" namespace="" extends="struts-default">
  4. <action name="user" class="com.easyteam.action.UserAction">
  5. <result >
  6. /success2.jsp
  7. </result>
  8. </action>
  9. </package>
  10. <!-- 命名空间为/a --><!--
  11. <package name="b" namespace="/a" extends="struts-default">
  12. <action name="user" class="com.easyteam.action.UserAction">
  13. <result >
  14. /success1.jsp
  15. </result>
  16. </action>
  17. </package>
  18. --><!-- 命名空间为/a/b-->
  19. <!--<package name="c" namespace="/a/b" extends="struts-default">
  20. <action name="user" class="com.easyteam.action.UserAction">
  21. <result >
  22. /success.jsp
  23. </result>
  24. </action>
  25. </package>
  26. --></struts>

再运行结果得到:

这个结果说明是到默认的命名空间去找的。

综上:action的查找是依次向上一级查找的

(网上有很多上述两种观点,有的甚至给两种结合起来,但是他们都没有给出具体的证明代码,仅仅是给出了逻辑描述,我这里的测试也许并不严谨,恳请各位批评指正,一起共同进步)

时间: 2024-10-15 04:28:37

验证struts2中action的查找路径的相关文章

struts2中如何根据请求路径定位到详细的访问action

在struts2中在访问一个菜单链接时,我们只需要将相应的package 命名空间和 action的name进行组合,并加上相应的后缀,就可以直接访问到相应的Action了,那么这个过程是如何进行的,多个相同命名空间的 package是如何满足互不冲突的呢,这就需要详细了解struts2中是如何解析路径信息,并根据访问路径寻找相应的action配置了. 整个过程我们可以分成以下几个步骤进行处理 解析xml,将所有可以访问到的路径信息进行保存 根据访问请求信息,取其中可用的路径 根据路径进行查找,

关于Struts2中Action从表单取值并且存到Web元素中(session)

声明:本博客非原创,[转载:http://blog.csdn.net/Cece_2012/article/details/7617775] 在struts2中,Action不同于struts1.x中的Action.在struts2中Action并不需要继承任何控制器类型或实现相应接口.比如struts1.x中的Action需要继承Action或者DispatcherAction. 同时struts2中的Action并不需要借助于像struts1.x中的ActionForm获取表单的数据.可以直接

Struts2中Action接收参数的方法主要有以下三种:

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=jim: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法

Struts2中Action取得表单数据的几种方法

Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form action="sys/login.action" method="post"> <input type="text" name="username"> <input type="submit"

Struts2中Action接收参数的方法

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:   

struts2中action手动获取參数

struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Action里直接获取请求(Request)或会话(Session)的一些信息, 甚至须要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们须要在Action中取得request请求參数"username"

Struts2中Action接收参数的三种方式

Struts2中Action接收参数的方法主要有以下三种:1.使用Action的属性接收参数:    a.定义:在Action类中定义属性,创建get和set方法:    b.接收:通过属性接收参数,如:userName:    c.发送:使用属性名传递参数,如:user1!add?userName=zhangsan:2.使用DomainModel接收参数:    a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法:    b.接收

Struts2中Action接收参数

Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象

Struts2中Action通配符的配置

1.在我的一篇文章中,介绍了Struts2中Action的动态调用方法:http://blog.csdn.net/u012561176/article/details/44347429 但是那样子还不是最简单的,最简单的是使用通配符,将配置量降到最低,但是这个也比较难已理解,在使用通配符时,一定要遵守"约定优于配置"的原则. 2.接下来介绍一下通配符,使用星号(*)表示所有,{数字}表示第几个通配符,例如: *Action,那么{1}就表示第一个星号(*),如果是 *_* 的话,那