美文网首页我爱编程
Struts2学习 — struts-default.xml &

Struts2学习 — struts-default.xml &

作者: Mon7ey | 来源:发表于2018-01-30 15:35 被阅读72次

    struts-default.xml

    文件作用

    struts-default.xml文件是Struts核心包中非常重要的配置文件.

    在这个文件中,定义了struts启动时默认加载的类和用户使用struts.xml配置Action是需要遵守的约定

    bean 节点

    bean节点指定了struts在运行时需要创建的对象类型

    <struts>
       <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />
    </struts>
    
    package 节点

    package节点用来管理Action . 一个struts下可以有多个package节点, 通常一个业务模板用一个包.

    • name : 是package节点的名称. 一个struts下.name不能重复

    • extends : 在struts.xml文件中.这个属性一定要写,并且一定要继承自"struts-default"包

    • abstract : 如果这个属性为true,表示这个package是个抽象包. 抽象包中不能定义Action,否则会在运行时期报错,只有当前包需要被其他包继承时才使用此属性

    • namespace : 命名空间 . 默认为 " / " .
      访问路径 = http://www.google.com / 项目名 / namespace / ActionName

    result-type : 跳转结果类型

    在页面进行跳转时使用,在struts.xml中配置Action时使用.

    常用的跳转结果类型 :

    • dispatcher 转发,不指定时,默认为转发
    • redirect 重定向
    • redirecAction 重定向到Action资源
    • stream 文件下载时用

    interceptors : 拦截器

    拦截器功能与过滤器功能类似

        共同点 : 都拦截资源
    
        区别 :  过滤器 : 过滤所有资源都可以 (/index.jsp / servlet / img / css / js) 
                拦截器 : 只拦截Action请求
    
    • 拦截器是struts的概念.只能在struts中使用
    • 过滤器是servlet的概念, 可以在struts项目、servlet项目中使用
      <package name="struts-default" abstract="true">
        // package节点用来管理Action . 一个struts下可以有多个package节点, 通常一个业务模板用一个包.
        // name : 是package节点的名称. 一个struts下.name不能重复
        // extends : 在struts.xml文件中.这个属性一定要写,并且一定要继承自"struts-default"包
        // abstract : 如果这个属性为true,表示这个package是个抽象包. 抽象包中不能定义Action,否则会在运行时期报错
                      // 只有当前包需要被其他包继承时才使用此属性
    
        // 跳转的结果类型集合
        <result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
        </result-types>
    
        // 拦截器
        <interceptors>
            <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
            <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
            .........
    
            <!-- Basic stack -->
            <interceptor-stack name="basicStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="servletConfig"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="multiselect"/>
                <interceptor-ref name="actionMappingParams"/>
                <interceptor-ref name="params">
                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
            </interceptor-stack>
        </interceptors>
    
        // 默认执行的拦截器
        <default-interceptor-ref name="defaultStack"/>
      </package>
    

    拦截器什么时候执行? (访问 / 启动)

    答 : 用户访问时,按照顺序执行18个默认连接器

    先执行Action类创建还是先执行拦截器?

    答 : 先创建Action类,再执行拦截器. 最后执行业务方法

    struts.xml

    Action 节点

    Action节点 : 主要用于配置请求路径与Action类的映射关系

    • name : 请求路径名称

    • class : 处理请求的Action类的全名

    • method : 请求调用的处理方法

    • result : 请求的处理结果集合

      • name : action处理方法的返回值
      • type : 处理结果的跳转类型
      • 标签体内容 : 指定跳转的位置
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="xxxx" extends="struts-default">
            <action name="hello" class="cn.itcast.action.HelloAction" method="execute">
                <result name="success">/success.jsp</result>
            </action>
        </package> 
    </struts>
    

    相关文章

      网友评论

        本文标题:Struts2学习 — struts-default.xml &

        本文链接:https://www.haomeiwen.com/subject/xkiqzxtx.html