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

转载 2007年09月23日 14:51:00

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>
 

Java Struts 特性和新特性总结

struts2新特性预览 Struts2与Struts1的对比  Action 类:  • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年11月17日 15:03
  • 516

struts2 配置文件的跳转总结

Struts2
  • hjd1622
  • hjd1622
  • 2016年05月13日 15:27
  • 404

基于Struts开发的入门级应用Helloworld

由于自己近期在学习SSH框架,因此把学习的过程记录下来。 创建Struts应用首先要下载struts源码和进行相应的配置,struts的下载和配置参照我前面的博客。 一.打开myeclipse,新...
  • longshengguoji
  • longshengguoji
  • 2014年11月30日 12:23
  • 1599

Struts 项目中web.xml文件配置

web.xml文件对于配置任何Java Web应用都必需的。(1)配置Struts的ActionServlet元素来声明ActionServlet元素:用来定义Servlet的名称元素:用来指定Ser...
  • songqiu
  • songqiu
  • 2007年09月08日 01:03
  • 6161

struts配置的运用和理解

action配置的格式 该结果名称所对应的JSP页面 常用的两种action配置示例 ...
  • q383965374
  • q383965374
  • 2015年02月26日 11:07
  • 1396

Struts核心配置文件的分类和读取顺序

Struts2的核心配置文件有两大类共6种方式,按照加载顺序分别说明如下:第一类:框架内置的配置文件: 1.Struts2框架内置的常量配置文件:default.properties,位于strut...
  • qq_35795358
  • qq_35795358
  • 2017年01月19日 04:28
  • 260

struts2+jquery ajax中,action的配置

JSON插件提供了一种名为json的ResultType,一旦为某个Action指定了一个类型为json的Result, 则该Result无需映射到任何视图资源。...
  • naughty610
  • naughty610
  • 2011年05月08日 17:59
  • 4588

Eclipse+Struts2的简单应用

终于要开始研究框架了,没有大神的指导,只能自己上网摸索着来,没有唯一对的方案,只能找到最适合自己的就可以了。 首先整理一下,代码是参考别人的代码,按照别人的版本有问题,大概整理了一下,自己重新弄...
  • gebitan505
  • gebitan505
  • 2016年04月11日 10:52
  • 1967

Struts 应用转移到 Struts 2

 翻译:SpringSide团队   转载请注明出处。有很多人都很熟悉 Struts, 无论是从项目中直接获得的实战经验还是从书中了解到的。我们这一系列文章,将通过一个由 Stuts 转移到 Stru...
  • chenzijun20082008
  • chenzijun20082008
  • 2006年12月09日 00:33
  • 1770

Struts2 include(包含)多个配置文件

Struts 2自带有“包含文件”功能,包含多个Struts配置文件合并为一个单元。 单个Struts配置文件 让我们来看看一个糟糕的 Struts 2 配置示例。 struts...
  • fanlulu2015
  • fanlulu2015
  • 2015年12月31日 14:59
  • 2659
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置Struts应用--解读Struts应用的两大配置文件
举报原因:
原因补充:

(最多只允许输入30个字)