配置Struts应用--解读Struts应用的两大配置文件

1.引言
关于Struts项目,在以前的文章中我已经做过一些介绍,在此不再赘述。写本文,旨在从纯Struts应用配置的角度深入剖析Struts配置文件在Web应用中的所扮演的角色及其工作机制,以加深对Struts内幕的理解和认知。以期在实际开发项目中灵活应用,提高分析和解决实际问题的能力。

2.进入主题
Struts应用采用两个基于XML的配置文件来配置应用。这两个配置文件为web.xml和struts-config.xml.其中,web.xml适用于所有的Java Web应用,它是web应用的发布描述文件,在Java Servlet规范中对它做了定义。struts-config.xml是Struts应用特有的配置了和Struts相关的信息。
2.1.web.xml——Web应用的发布描述文件
Web应用的发布描述文件可以在应用开发者、发布者和组装者之间传递配置信息。Web容器在启动时从该文件中读取配置信息,根据它来装载和配置Web应用。
所有和Servlet2.3规范兼容的容器支持以下的发布信息:
初始化参数
Session配置
Servlet声明
Servlet映射
应用生命周期的监听类
过滤器定义和映射
MIME类型映射
欢迎文件列表
出错处理页面
标签库映射
JNDI引用
2.1.1.Web应用发布描述文件的文档类型定义(DTD)
文档类型定义(DTD,Document Type Definition)对XML文档的格式做了定义。DTD把XML文档都划分为以下组件:
元素
属性
实体
下表为DTD代码中特殊符号的功能说明,了解他们将有利于我根据DTD书写正确、规范的各种XML配置文件。
无符号:该子元素在父元素内必须存在,且只能存在一次。
+:该子元素在父元素内必须存在,可以存在一次或者多次。
*:该子元素在父元素内可以不存在,或者存在一次或多次。
?:该子元素在父元素内可以不存在,或者只存在一次。
2.2.为Struts应用配置web.xml文件
web.xml文件对于配置任何Java Web应用都是必需的。当配置一个Struts应用时,还应该在web.xml中配置一些和Struts有关的信息。
2.2.1.配置Struts的ActionServlet
2.2.1.1.用<servlet>元素来声明ActionServlet
<servlet>
     <servlet-name>action</servlet-name>
     <servlet-class>
      org.apache.struts.action.ActionServlet
     </servlet-class>
</servlet>
2.2.1.2.配置<servlet-mapping>元素,它用来指定ActionServlet可以处理那些URL
       <servlet-mapping>
           <servlet-name>action</servlet-name>
           <url-pattern>*.do</url-pattern>
       </servlet-mapping>
2.1.2.声明ActionServlet的初始化参数
初始化参数用来对Servlet的运行时环境进行配置.<servlet>的<init-param>子元素用于配置Servlet的初始化参数.
<servlet>
     <servlet-name>action</servlet-name>
     <servlet-class>
      org.apache.struts.action.ActionServlet
     </servlet-class>

     <init-param>
         <param-name>config/test</param-name>
         <param-value>/WEB-INF/model/struts-config-test.xml</param-value>
     </init-param>
</servlet>
说明:可以通过<init-param>元素加载多个struts-config配置文件,<param-name>的元素值为这个Struts模块的上下文环境.
2.1.3.配制欢迎文件清单
       <welcome-file-list>
           <welcome-file>/frame/welcome.jsp</welcome-file>
       </welcome-file-list>
2.1.4.配置错误处理页面
Struts框架会把不能处理的错误或异常抛给Web容器.在默认情况下,Web容器会向用户浏览器直接返回原始错误信息.我们可以通过配置<error-page>元素来自
定义错误页面.以下代码演示了如何避免用户直接看到HTTP404或HTTP500错误页面.
       <error-page>
         <error-code>404</error-code>
         <location>/common/404.jsp</location>
       </error-page>
我们也可以为Web容器捕获的Java异常配置<error-page>元素,这时需要设置<exception-type>子元素,它用于指定Java异常类.
       <error-page>
         <exception-type>java.io.IOException<exception-type>
         <location>/common/404.jsp</location>
       </error-page>
2.1.5.配置Struts标签库和自定义标签库
Struts提供了一些实用的客户化标签库.如果在应用中使用了这些标签库或其他基于Struts的第三方标签库,我们都要在Web应用发布描述符文件中配置它们.
       <taglib>
           <taglib-uri>/WEB-INF/struts-layout.tld</taglib-uri>
           <taglib-location>/WEB-INF/struts-layout.tld</taglib-location>
       </taglib>
2.3.Struts配置文件 struts-config.xml
在Struts应用启动时(通过web.xml加载其配置文件),会把Struts配置文件中的配置信息读入到内存中,并把她们存放在config包中相关JavaBean类的实例中.org.apache.struts.config包中的每一个类都和Struts配置文件中特定的配置元素对应.这些类的实例可以当做配置信息的运行时容器,Struts组件可以方便的通过他们来获取配置信息.
下面我们对Struts配置文件的每一个元素做进一步的认识.
2.3.1.<struts-config>根元素
此为根元素,和他对应的配置类为:org.apache.struts.config.MoudleConfig类.他有8个子元素,其DTD定义如下:
<!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>
2.3.2.<data-sources>元素
顾名思义,此元素可用来配制和数据库的连接.但考虑到,一般在J2EE项目中我们不在Struts层面上进行数据源的配置,所以在此就不对这个元素做过多介绍了.如需要,请查阅相关文档.
2.3.3.<form-beans>元素
<form-beans>元素包含零个或多个<form-bean>元素.每个<form-bean>元素又包行多个属性.如下为其属性说明:
className:指定和<form-bean>元素所对应的配置类.缺省则为默认类.
name:指定该ActionFormBean的唯一标识符.
type:指定这个ActionForm类的完整路径.
<form-beans type="com.eRedLab.eRedCIP.system.config.EredActionFormBean">
<!-- 登陆处理ActionForm -->
<form-bean name="loginActionForm" type="com.eRedLab.eRedCIP.frame.web.LoginForm" />
</form-beans>
如果配置动态ActionForm Bean的话,还必须配置<form-bean>元素的<form-property>子元素来指定表单字段.她有四个属性,见如下说明:
className:指定和<form-property>元素对应的配置类.缺省则为默认类.
initial:初始值.基本类型的表单字段默认值为0; 对象类型的表单字段默认值为:null.
name:指表单字段的名字.
type:指表单字段的Java数字类型.
<form-beans type="com.eRedLab.eRedCIP.system.config.EredActionFormBean">
<!-- 登陆处理动态ActionForm -->
<form-bean name="loginActionForm" type="com.eRedLab.eRedCIP.frame.web.LoginForm">
              <form-property name="userName" type="java.lang.String"/>
                     <form-property name="passWord" type="java.lang.String"/>
<form-bean>
</form-beans>
2.3.4.<global-exception>元素
采用配置方式处理异常.使用方法:略!
2.3.5.<global-forward>元素
该元素用来声明全局的转发关系。它由零个或多个<forward>元素组成。<forward>元素用于把一个逻辑名映射到一个特定的URL.通过之中方式,Action类或者JSP文件
无需指定实际的URL,只需要逻辑名就能实现请求转发或重定向。这可以减弱视图组件和控制组件之间的耦合度,并且有助于维护JSP文件。
<forward>元素的属性如下描述:
className:<forward>元素对应的配置类。缺省为默认类。
contextRelative:如果此项为true,表示当path属性以"/"开头时,给出的是相对于当前上下文的URL.默认值为:false.
name:转发路径的逻辑名。
path:指定转发或重定向的URI.必须以"/"开头。当contextRelative属性为true时,表示URI路径相对于当前上下文(context-relative);当contextRelative属性为false时,表示URI路径相对于当前应用。
redirect:当此项为true时,表示执行重定向操作;当此项为false时,表示执行请求转发操作。此项默认值为:false.
<global-forwards>
     <forward name="welcome" path="/common/welcome.jsp" contextRelative="true" />
     <forward name="syserror" path="/common/errors.jsp" contextRelative="true" />
</global-forwards>
多学一招:请求转发和重定向的区别:请求转发源组件和目标组件共享request作用域。
2.3.6.<action-mappings>元素
<action-mappings>元素包含零个或者多个<action>元素,<action>元素描述了从特定的请求路径到相应的Action类的映射。在<action>元素中,可以包含多个<exception>和<forward>子元素。它们分别配置局部的异常处理及请求转发,仅被当前的Action所访问。
<action>元素的属性说明如下:
attribute:设置和Action关联的ActionForm Bean在request或Session范围内的属性Key.
className:和<action>元素对应的配置类。缺省为默认类。
forward:指定转发的URL路径。
include:指定包含的URL路径。
input:指定包含输入表单的URL路径。当表单验证失败时,将把请求转发到该URL.
name:指定和该Action关联的ActionForm Beam的名字。该名字必须在<form-bean>元素中定义过。
path:指定访问Action的路径,它以"/"开头,没有扩展名。和JSP的<form>标签的Action属性相对应。
parameter:指定Action的配置参数。在对应Action类的execute()方法中可以调用ActionMapping对象的getParameter()方法来读取该配置参数。
scope:指定ActionForm Bean的存在范围。可选值为:request和session。默认值为:session。
type:指定Action类的完整类名。
validate:指定是否要先调用ActionFormbean中的validate()方法。默认值为:true.
注意:<action>元素的forward属性和include属性相互排斥。
示例代码如下:
<action-mappings type="com.eRedLab.eRedCIP.system.config.EredActionMapping">
     <!-- 登陆处理 Action -->
     <action name="loginActionForm"
             parameter="reqCode"
             path="/login"
             scope="request"
             validate="false"
             type="com.eRedLab.eRedCIP.frame.web.LoginAction">
               <forward name="jspView" path="/login.jsp" />
               <forward name="loginView" path="/index.jsp" />
     </action>
</action-mappings>
2.3.7.<controller>元素
<controller>元素用于配置ActionServlet。
2.3.8.<message-resource>元素
该元素用来配置Resource Bundle,Resource Bundle用于存放本地化消息文本。
<message-resource>元素的常用属性说明如下:
key:指定Resource Bundle存放在ServletContext对象中时采用的属性Key,默认值为由Globals.MESSAGES_KEY定义的字符串常量.只允许一个Resource Bundle采用默认的属性Key.
parameter:指定Resource Bundle的消息资源文件名.例如:如果此项设为:pack1.pack2.ApplicationResource.properties.那么对应的实际资源存放路径为:WEB-INF/classes/pack1/pack2/ApplicationResource.properties
以下是<messages-resource>的配置示例代码:注意他们的对应关系,只允许第一个消息资源文件采用默认属性key.
<message-resources parameter="eRedCIPResources"/>
<message-resources parameter="eRedCIPResources" key="database"/>
读取消息资源文件中的属性值:
<bean:message key="userName">
<bean:message key="userName" bundle="database">
2.3.9.<plug-in>元素
<plug-in>元素用于配置Struts插件.以下为该插件的常用属性描述:
className:指定Struts插件类.插件类必须实现org.apache.struts.action.PlugIn接口.
以下为配置示例代码:
     <plug-in className="com.eRedLab.eRedCIP.system.config.EredContextLoaderPlugIn">
      <set-property property="contextConfigLocation"
         value="WEB-INF/classes/config/eRedCIP.xml,
                WEB-INF/classes/config/Dao.xml,
                WEB-INF/classes/config/framework/eRedCIP-frame.xml,
                WEB-INF/classes/config/framework/Dao.xml,
                WEB-INF/classes/config/test/eRedCIP-test.xml,
                WEB-INF/classes/config/test/Dao.xml"/>
     </plug-in>

posted on 2010-07-02 15:37  画一个圆圈  阅读(136)  评论(0编辑  收藏  举报

导航