struts2 视图发请求到Action

Struts2通过配置action标签来把用户请求连接到Action 控制层的方法中

<struts>
   <package name="pack001" extends="struts-default">
         <!--action标签 name属性对应的是用户URL请求中的action名,和用户请求保持一致-->        
         <!--action标签 class: 类的路径名-->
         <!--action标签 method:class中的方法名-->
        <action name="login" class="com.demo.action.LoginAction"
            method="login">
            <result name="success">/WEB-INF/pages/success.jsp</result>

        </action>

    </package>

</struts>
<!-- package元素 -->
<!-- name:package名称 唯一性 基本一个action类对应一个package -->
<!-- namespace:定义package的名称空间,该命名空间影响到url的地址 如namespace值为/test 那么访问地址:http://localhost:8085/Struts2Demo/test/xxx.action -->
<!-- abstract:package的属性是否抽象抽象的package不能定义action 值为true/false -->
<!-- extends:继承的父package名称 -->
<package name="001pck" extends="struts-default">

</package>

1. Action搜索顺序

http://localhost:8085/Struts2Demo/aaa/bbb/ccc/login.action的访问顺序
第一步:根据包的namespace 判断当前package包(/aaa/bbb/ccc)是否存在。

<package name="001pck" namespace="/" extends="struts-default">  
    <action name="login" >
        <result>/success.jsp</result>    
    </action>
</package>

第二步:如果这个包存在,就去这个包查找login.action.如果action存在则执行action.如果action不存在,报错或者执行默认action
第三步:如果包不存在,就去判断它的上一级包(/aaa/bbb)包是否存在,重复第二步,直到根目录/

2. 动态方法调用

<package name="001pck" namespace="/users" extends="struts-default">
    <!-- 使用通配符实现一个action对应多个请求,以免action太多 -->
    <!-- 访问路径为Dynamic_add 就会执行DynamicAction类中的add方法 -->
    <!-- 访问路径为Dynamic_ 或者访问路径为Dynamic_execute 就会执行DynamicAction类中的execute方法 -->
    <action name="*_*" class="action.{1}Action" method="{2}">
        <result name="success">/success.jsp</result>
        <result name="failure">/failure.jsp</result>         
    </action>
</package>

3. 通过 通配符配置任意请求 action

 <package name="crazyit" namespace="/" extends="struts-default">
        <!-- 该元素可以处理所有的用户请求,对于任意请求,直接呈现WEB-INF/content目录下的同名jsp页面 -->          
        <action name="*" >
            <result >/WEB-INF/content/{1}.jsp</result>            
        </action>
</package>

这里的任意请求,包括get请求和form,post请求。
如果请求的action 已经在struts.xml中定义,就会执行到定义的action。
如果请求的action 没有在struts.xml中定义,才会执行这个匹配任意请求的action,返回WEB-INF/content目录下的同名jsp页面。

4. 配置 默认Action

<package name="002pck" namespace="/" extends="struts-default">
    <!-- 4.定义默认action 如果struts没有用户定义的action名称,自动跳转到改默认定义的action中 -->
    <default-action-ref name="index"></default-action-ref>
    <action name="index">
        <result>/WEB-INF/pages/error.jsp</result>
    </action>
</package>

5. 修改struts后缀

<struts>
     <!-- 1.修改struts2后缀为空 -->
    <constant name="struts.action.extension" value=""></constant>
    <!-- 2.修改struts2的后缀 为do; -->
    <constant name="struts.action.extension" value="do"> </constant>
    <!-- 3.设置多个后缀 修改struts2的后缀为do或者test -->
    <constant name="struts.action.extension" value="do,test"></constant>

</struts>   

6. 指定配置文件的编码

<struts>
<!-- 指定配置文件的编码 -->
   <constant name="struts.i18n.encoding" value="UTF-8"></constant>
</struts>

7. 指定多个配置文件
1.创建配置文件test.xml
2.在struts.xml配置文件中 引用这个配置文件

<struts>
    <!-- 1.引用其它配置文件 -->
    <include file="test.xml" />
</struts>   
posted on 2017-09-21 16:05  dreamstar  阅读(79)  评论(0编辑  收藏  举报