Struts2核心配置
 1.核心控制器  是FilterDispacher
2.Struts框架的大致处理步骤:
  用户提交请教,请教被过滤器截取并处理最终到达核心控制器FilterDispatcher.询问ActionMapper找寻action来处理这个请求,如果发现就发送给ActionProxy.执行完毕之后返回结果视图.
3.关于常量配置
有几种方式,分别在struts.xml  struts.properties 以及 web.xml中配置,建议配置在struts.properties中配置,这种采用键值对配置的模式最直观也最方便管理.
4.关于Struts2在开启服务时加载顺序及配置常量顺序
加载顺序:struts-default.xml   到   struts-plugin.xml   到   struts.xml   到   struts.properties  到   web.xml
配置常量顺序则反过来
5.关于Action的命名空间.
当在指定命名空间中找不到所制定的action时,会在默认的命名空间(也就是没有定义的命名空间,)里找对应的action,如果没有发现就抛出异常并报错.
6.拦截器的作用
拦截器的作用是在执行action处理用户请教的  之前   或    之后   执行拦截器来进行某些操作.
无论是定义拦截器还是拦截器栈,最好是定义在result之后
7.关于通配符
为了日后的维护,最好限制使用通配符.采用include方式解决这些问题
8.servlet API
ActionContext context  =  ActionContext.getContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResoinse response = ServleActionContext.getResponse();
HttpSession session = request.getSession();
9.在配置Action元素中,如果不指定class元素,会自动使用ActionSupport类来处理请求,并自动返回SUCCESS;
10.在执行中的Action在struts.xml中假如没有定义.会通过全局配置的一个定义...(需要组织语言完善)
11.Action动态加载方法最好使用xml配置的方式
<action name="xxx" class="xxxx" method="ssss" >
12.Result  级别上 局部的Result 大于全局的result
13.Result默认的type就是Dispatcher  默认的name就是 success
14.属性驱动的好处在于灵活,但增加了耦合度
15.模型驱动的好处在于降低耦合度,增加独立性,但必须实现modelDriver接口.
16.定义全局的异常时必须定义在全局result之后

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>

    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
    <include file="struts-default.xml"></include>
    
    
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">
        <interceptors>
            <!-- 定义拦截器 
                name:拦截器名称
                class:拦截器类路径
             -->
            <interceptor name="timer" class="com.kay.timer"></interceptor>
            <interceptor name="logger" class="com.kay.logger"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="mystack">
                <interceptor-ref name="timer"></interceptor-ref>
                <interceptor-ref name="logger"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        
        <!-- 定义默认的拦截器 每个Action都会自动引用
         如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        <default-interceptor-ref name="mystack"></default-interceptor-ref>
        
        
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        
        <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
             name:action名称
             class: 对应的类的路径
             method: 调用Action中的方法名
        -->
        <action name="hello" class="com.kay.struts2.Action.LoginAction">
            <!-- 引用拦截器
                name:拦截器名称或拦截器栈名称
             -->
            <interceptor-ref name="timer"></interceptor-ref>
        
            <!-- 节点配置
                name : result名称 和Action中返回的值相同
                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
             -->
         <result name="success" type="dispatcher">/talk.jsp</result>
         <!-- 参数设置 
             name:对应Action中的get/set方法 
         -->
         <param name="url">http://www.sina.com</param>
        </action>
    </package>
</struts>