zoukankan      html  css  js  c++  java
  • 配置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>
  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100580.html
Copyright © 2011-2022 走看看