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>



  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/dqsweet/p/4927796.html
Copyright © 2011-2022 走看看