• 配置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>
  • 相关阅读:
    Consul注销实例
    sql优化基础篇
    linux下执行java类(运行java定时器)
    ExecutorService 的理解与使用
    精度计算的方法
    内部类详解
    接口的作用
    面向对象之继承和组合浅谈
    构造器前篇
    教师编制考试数据分析
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100580.html
Copyright © 2020-2023  润新知