(12)Struts_通配符映射

2018-09-19 13:06:02 浏览数 (1)

通配符映射

一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
代码语言:javascript复制
        <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>
上面和下面配置的效果相同
代码语言:javascript复制
        <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.若找到多个匹配, 没有通配符( 即:精确匹配 )的那个将胜出
代码语言:javascript复制
        <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} 匹配第二个子串…
代码语言:javascript复制
<!-- 当请求是 /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
代码语言:javascript复制
        <!-- 若请求是 /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 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
代码语言:javascript复制
<!-- 若请求是 /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>

代码语言:javascript复制
        <!-- 若请求是 /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 人点赞