(12)Struts_通配符映射

通配符映射

一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系

        <action name="czy_save" class="com.qbz.struts2_02.GG_CZY" method="save">
            <result name="save">/WEB-INF/page/save.jsp</result>
        </action>
        <action name="czy_update" class="com.qbz.struts2_02.GG_CZY" method="update">
            <result name="update">/WEB-INF/page/update.jsp</result>
        </action>
        <action name="czy_delete" class="com.qbz.struts2_02.GG_CZY" method="delete">
            <result name="delete">/WEB-INF/page/delete.jsp</result>
        </action>
        <action name="czy_getCzys" class="com.qbz.struts2_02.GG_CZY" method="getCzys">
            <result name="getCzys">/WEB-INF/page/getCzys.jsp</result>
        </action>

上面和下面配置的效果相同

        <action name="czy_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{1}.jsp</result>
        </action>

通配符映射规则

  1. 若找到多个匹配, 没有通配符的那个将胜出
  2. 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配
  3. 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
  4. {0} 匹配整个 URI
  5. 若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
  6. 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 .

1.若找到多个匹配, 没有通配符( 即:精确匹配 )的那个将胜出

        <action name="czy_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{1}.jsp</result>
        </action>

        <!-- 如果请求 /czy_getCzys.action 将会执行没有通配符的 name="czy_getCzys" 的action -->
        <action name="czy_getCzys" class="com.qbz.struts2_02.GG_CZY" method="getCzys">
            <result name="getCzys">/WEB-INF/page/getCzys.jsp</result>
        </action>

2.若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配

可见,uri匹配时是先精确匹配的,精确匹配不上时,再来对包含有通配符*的action进行匹配。

3. 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…

<!-- 当请求是 /czy_save_show.action  时,就会调用GG_CZY.java 中的save方法,当返回值为"save"时,会转发到 /WEB-INF/page/show.jsp-->
        <action name="czy_*_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{2}.jsp</result>
        </action>

4.{0} 匹配整个 URI

        <!-- 若请求是 /czy_save 时,将会调用 GG_CZY.java 的czy_save方法 -->
        <action name="czy_*" class="com.qbz.struts2_02.GG_CZY" method="{0}">
            <result name="ok">/WEB-INF/page/Show.jsp</result>
        </action>

5.若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配

<!-- 若请求是 /czy_save_show 将会调用 name="czy_*" 的action -->
        <action name="czy_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{1}.jsp</result>
        </action>

        <action name="czy_*_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{2}.jsp</result>
        </action>

        <!-- 若请求是 /czy_save_show 将会调用 name="czy_*_*" 的action -->    
        <action name="czy_*_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{2}.jsp</result>
        </action>

        <action name="czy_*" class="com.qbz.struts2_02.GG_CZY" method="{1}">
            <result name="{1}">/WEB-INF/page/{1}.jsp</result>
        </action>

6. 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用\.**

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

c语言几个松散的地方(不足的地方,不严谨的地方,它容易出错的地方)。

c语言是面向过程的语言,是弱类型语言,c语言的源代码基本就是无数个函数的堆砌。 即很多函数就组成c语言源代码了,也即它的源代码基本就是函数构成的。

21020
来自专栏Laoqi's Linux运维专列

awk中使用shell变量

22840
来自专栏desperate633

设计模式之代理模式(Proxy模式)代理模式的引入代理模式的实例程序代理模式分析

Proxy是代理人的意思,指的是代替别人进行工作的人。当不一定需要本人亲自去做的工作的时候,就可以寻找代理人去完成。 但在代理模式中,往往是相反的,通常是代理...

9920
来自专栏大内老A

总体介绍ASP.NET Web API下Controller的激活与释放流程

通过《ASP.NET Web API的Controller是如何被创建的?》我们已经对HttpController激活系统的核心对象有了深刻的了解,这些对象包括...

20570
来自专栏zhisheng

Windows 64位下安装Redis超详细教程

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(...

424120
来自专栏用户2442861的专栏

【深入Java虚拟机】之四:类加载机制

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581

7210
来自专栏精讲JAVA

OutOfMemoryError异常系列之方法区溢出

继续上一篇文章讲解,在上一篇中给大家留下了一个小问题,就是在jdk1.6中返回的是两个false,在jdk1.7中返回的是true false,,上一次代码没有...

36780
来自专栏Java开发者杂谈

Python(1):入门

安装:    在linux中一般都自带有python2.7的版本,如果想升级python到最新的版本可以参考其他博客(http://www.cnblogs.c...

38780
来自专栏应兆康的专栏

Python Web - Flask笔记3

if条件判断语句必须放在{% if statement %}中间,并且还必须有结束的标签{% endif %}。和python中的类似,可以使用>,<,<=,>...

9120
来自专栏用户2442861的专栏

java类加载过程

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581

26210

扫码关注云+社区

领取腾讯云代金券