zoukankan      html  css  js  c++  java
  • struts2配置文件中的include和globalresults

    今天遇到的一个这样的问题:几个struts2的配置文件 用include 进struts.xml配置文件里面去。每个配置文件都有 一个 相同的<global-results>  想把它们提出来来 放到struts.xml配置文件里面去。这样就只需要配置一个<global-results> 了。但是遇到一点问题。404的。以下是网上找的解决方法。

    (1)struts-user.xml


    <struts>
        <package name="struts-user" extends="struts-default">
            
            <global-results>
                <result type="redirect-action">UserAction_queryAll</result>
            </global-results>
            
            <action name="UserAction_login" class="userAction" method="login"></action>
            <action name="UserAction_insert" class="userAction" method="insert"></action>
            <action name="UserAction_update" class="userAction" method="update"></action>
            <action name="UserAction_delete" class="userAction" method="delete"></action>
            <action name="UserAction_queryById" class="userAction" method="queryById"></action> 
            <action name="UserAction_queryByLike" class="userAction" method="queryByLike"></action>
            <action name="UserAction_queryAll" class="userAction" method="queryAll">
                <result>/user/user_list.jsp</result>
            </action>
            
        </package>
    </struts>



    (2)struts.xml(引入了struts-user.xml)


    <struts>
    
        <include file="struts-user.xml"></include>
        <package name="struts" extends="struts-default"></package>
        
    </struts>



    1. 使用<include>标签重用配置文件

    (1)在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。如上面的代码。

    注意:用<include>引用的xml文件也必须是完成的struts2的配置。实际上<include>在引用时是单独解析的xml文件,而不是将被引用的文件插入到struts.xml文件中。

    注意:struts.xml和struts-user.xml中<package></package>标签中的name属性不能相同。道理很简单,<struts></struts>标签中可以有多个<package></package>标签,要通过name属性以示区别。

    (2)Apache Struts 2 Documentation: Can we break up a large struts.xml file into smaller pieces --> Yes, there are two approaches. We can include other struts.xml file from a bootstrap, or we can package a struts.xml files in a JAR. Or both.

    <1>By Include:A typical struts.xml files will have one or more include elements:


    <struts>
        <include file="struts-default.xml"/>
        <include file="config-browser.xml"/>
        <package name="default" extends="struts-default">
        ....
        </package>
        <include file="other.xml"/>
    </struts>



    The first include element tells the framework to load the struts-default.xml, which it will find in the struts2.jar file. The struts-default.xml file defines the "standard" interceptor and result definitions. You can put your own <include> elements in your struts.xml interchangeably with <package> elements. The configuration objects will be loaded in the order of appearance. The framework reads the configuration from top to bottom and adds objects as they are referenced.

    <2>By JAR

    A "module" can be added to an application by placing a struts.xml and related classes into a JAR on the classpath. FreeMarker and Velocity templates can also be provided by JAR, making it possible to distribution a module in a single, self-contained JAR that is automatically configured on startup.

    2. 全局result(global-results)

    (1)有很多时候一个<result>可供很多<action>使用,这时可以使用<global-results>标签来定义全局的<result>,代码见struts-user.xml。执行顺序:当一个Action返回的String没有相应的<result>与之对应,Struts2就会查找全局的<result>。

    (2)Apache Struts 2 Documentation: Global Results

    Most often, results are nested with the action element. But some results apply to multiple actions. In a secure application, a client might try to access a page without being authorized, and many actions may need access to a "logon" result. If actions need to share results, a set of global results can be defined for each package. The framework will first look for a local result nested in the action. If a local match is not found, then the global results are checked.


    <!-- Defining global results -->
    <global-results>
        <result name="error">/Error.jsp</result>
        <result name="invalid.token">/Error.jsp</result>
        <result name="login" type="redirectAction">Logon!input</result>
    </global-results>



    3. <include>标签和<global-results>标签结合

    (1)<global-results>标签的作用域只是当前<struts></struts>,也可以说是当前的xml文件;struts2不允许把struts-user.xml(通过<include>引入到struts.xml)中的<global-results>标签写在struts.xml中。

    (2)如果struts-user.xml中的package继承自struts.xml中的package,则可以将struts-user.xml中的<global-results>放在struts.xml中。然后struts-user.xml将此<global-results>从struts.xml中继承过来。例如(将上面的两段代码简单修改):

    (1)struts-user.xml


    <struts>
        <!-- 这里struts-user继承(extends)的是struts, 即struts.xml中package的name属性值 -->
        <package name="struts-user" extends="struts">
            
            <action name="UserAction_login" class="userAction" method="login"></action>
            <action name="UserAction_insert" class="userAction" method="insert"></action>
            <action name="UserAction_update" class="userAction" method="update"></action>
            <action name="UserAction_delete" class="userAction" method="delete"></action>
            <action name="UserAction_queryById" class="userAction" method="queryById"></action> 
            <action name="UserAction_queryByLike" class="userAction" method="queryByLike"></action>
            <action name="UserAction_queryAll" class="userAction" method="queryAll">
                <result>/user/user_list.jsp</result>
            </action>
            
        </package>
    </struts>



    (2)struts.xml(引入了struts-user.xml)


    <struts>
    
        <include file="struts-user.xml"></include>
        <package name="struts" extends="struts-default">
            <global-results>
                <result type="redirect-action">UserAction_queryAll</result>
            </global-results>
        </package>
        
    </struts>



  • 相关阅读:
    MongoDB知识
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    SQL Server 触发器
    TSQL游标使用
    python和C#的区别
    bcp和SqlDataAdapter进行批量跟新插入方法
    SQL Server中索引视图用法详解
    hdu 1950 Bridging signals
    UVA 116 Unidirectional TSP
    poj 3230 Travel
  • 原文地址:https://www.cnblogs.com/dqsweet/p/4927796.html
Copyright © 2011-2022 走看看