《转》struts.xml 模块化管理关键字: struts2多个配置文件先贴两段代码,在慢慢解释 (1)struts-user.xml Java
《转》struts.xml 模块化管理
关键字: struts2 多个配置文件 先贴两段代码,在慢慢解释
(1)struts-user.xml
Java代码?
<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>??
<struts> <package name="struts-user" extends="struts-default"> <global-results> <result type="redirect-action">UserAction_queryAll</result> </global-results> <action name="UserAction_login" method="login"></action> <action name="UserAction_insert" method="insert"></action> <action name="UserAction_update" method="update"></action> <action name="UserAction_delete" method="delete"></action> <action name="UserAction_queryById" method="queryById"></action> <action name="UserAction_queryByLike" method="queryByLike"></action> <action name="UserAction_queryAll" method="queryAll"> <result>/user/user_list.jsp</result> </action> </package> </struts>
(2)struts.xml(引入了struts-user.xml)
Java代码?
<struts>???????<include?file="struts-user.xml"></include>???????<package?name="struts"?extends="struts-default"></package>???</struts>??
<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)ApacheStruts 2 Documentation: Can we break up a large struts.xml file intosmaller pieces --> Yes, there are two approaches. We can includeother struts.xml file from a bootstrap, or we can package a struts.xmlfiles 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>
Thefirst include element tells the framework to load thestruts-default.xml, which it will find in the struts2.jar file. Thestruts-default.xml file defines the "standard" interceptor and resultdefinitions. You can put your own <include> elements in yourstruts.xml interchangeably with <package> elements. Theconfiguration objects will be loaded in the order of appearance. Theframework reads the configuration from top to bottom and adds objectsas they are referenced.
<2>By JAR
A "module"can be added to an application by placing a struts.xml and relatedclasses into a JAR on the classpath. FreeMarker and Velocity templatescan also be provided by JAR, making it possible to distribution amodule in a single, self-contained JAR that is automatically configuredon 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
Mostoften, results are nested with the action element. But some resultsapply to multiple actions. In a secure application, a client might tryto access a page without being authorized, and many actions may needaccess to a "logon" result. If actions need to share results, a set ofglobal results can be defined for each package. The framework willfirst look for a local result nested in the action. If a local match isnot 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
Java代码?
<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>??
<struts> <!-- 这里struts-user继承(extends)的是struts, 即struts.xml中package的name属性值 --> <package name="struts-user" extends="struts"> <action name="UserAction_login" method="login"></action> <action name="UserAction_insert" method="insert"></action> <action name="UserAction_update" method="update"></action> <action name="UserAction_delete" method="delete"></action> <action name="UserAction_queryById" method="queryById"></action> <action name="UserAction_queryByLike" method="queryByLike"></action> <action name="UserAction_queryAll" method="queryAll"> <result>/user/user_list.jsp</result> </action> </package> </struts>
(2)struts.xml(引入了struts-user.xml)
Java代码?
<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>?