【永恒的瞬间】
☜Give me hapy ☞

Web.xml 文件对于配置任何 Java Web 应用都是必须的 . 当配置 Struts 应用时 , 还应该在 web.xml 文件中配置和 Struts 相关的配置选项 . 一下讲述配置 Struts 应用的必要步骤 .

 

1 ·配置 Struts ActionServlet

第一步用 <servlet> 元素来声明 ActionServlet

<servlet> 的子元素中,经常用到的有:

   · <servlet-name> 元素用来定义 Servlet 的名称。

   · <servlet-class> 元素用来置顶 Servlet 的完整类名。

   · <init-param> 元素用于配置 Servlet 初始化参数。

第二步为配置 <servlet-mapping> 元素,用来指定 ActionServlet 可以处理哪些 URL

有子元素 <servlet-name> <url-pattern> ,注意,这里的 <servlet-name> 必须和 <servlet> 元素中的 <servlet-name> 匹配。

 

** 提示 **

  不管应用中包含多少子应用,都只需要配置一个 ActionServlet 。有些开发者希望设置多个 ActionServlet 类来处理应用中不同的功能,其实这是不必要的,因为 Serlvet 本身支持多线程。而且,目前的 Struts 框架只允许在应用中配置一个 ActionSerlvet

 

2 ·配置欢迎文件清单

<welcome-file-list> 元素中可以包含多个 <welcome-file> 子元素,当 Web 容器调用 Web 应用的欢迎文件时,首先寻找第一个 <welcome-file> 指定的文件。如果这个文件存在,将把这一个文件返回给客户;如果这个文件不存在, Web 容器将依次寻找下一个欢迎文件,直到找到为止;如果都不存在,服务器将向客户返回“ HTTP 404 Not Found ”的出错信息。

 

3 ·配置错误处理

<error-page>

  <error-code></error-code>

  <location></location>

</error-page>

如果在 web.xml 文件中做了以上配置,当 Web 容器捕获到错误时(如: HTTP 404 HTTP 500 ),将根据错误代码减缩 <error-page> 的子元素 <error-code> ,如果有匹配项就返回 <location> 子元素指定的文件。

  也可以为 Web 容器捕获的 Java 异常配置 <error-page> 元素,这是需要设置 <exception-type> 子元素,它用于指定 Java 异常类。 Web 容器可能捕获如下异常:

  · RuntimeException Error

  · ServletException 或它的子类。

  · IOException 或它的子类。

这里的配置信息如下:

<error-page>

  <exception-type></exception-type>

  <location></location>

</error-page>

 

4 ·配置 Struts 标签库

<taglib> 元素有两个子元素: <taglib-uri> <taglib-location> <taglib-uri> 元素指定标签库的相对或者绝对 URI 地址, Web 应用将根据这一 URI 来访问标签库; <taglib-location> 元素指定标签库描述文件在文件资源系统中的物理位置。

如果 Web 应用中没有使用 Struts 标签库,就没有必要在 web.xml 文件中配置它。此外,也可以按以上方式在 web.xml 文件中配置用户自定义的客户化标签库

 

 

Struts配置文件简介
Struts framework根据配置文件使得ServletAction,ActionMapping,Action , ActionForm这几个不同层次的组件相互交互,协调的工作。这些配置文件是在系统启动的时候,读入导内存中,供控制器使用的。
Struts framework主要包括三部分的配置描述,一个是指定有关Struts Controller及其相关的的配置描述(Initialization Parameters),一个对struts tag lib的描述,一个是struts组件(ActionMapping,Action,ActionForm)之间相互映射协调的关系

有关Struts Controller及其相关的的配置描述
    因为Struts Controller的主要类ActionServlet是继承自HttpServlet,所以必须像配置一个Servlet那样在部署描述符(Web.xml)中配置ActionServlet类及其访问映射。
    当您第一次创建基于Struts的Web应用程序时,将为您创建一个部署描述符,这通常就足够了。该文件包括下列条目:
    <servlet>条目定义用于Web应用程序的servlet(在本例中,这是唯一的servlet):
—  <servlet-name> 和<servlet-class>指示ActionServlet (标识为“操作”)接收HTTP请求并确定如何响应。
—  <init-param>表示servlet初始化参数.
-    “config”指示ActionServlet的行为由指定的配置文件来指导,该配置文件通常具有以下名称:
\WEB-INF\struts-config.xml
-    “debug”具有整数值,它指示将有关处理的详细信息写至控制台的程度。
-    ”detail”具有整数值,它指示将“映射”详细信息(如后面所述)写至控制台的程度。
—  <load-on-startup>导致在启动应用程序时装入servlet。
    <servlet-mapping>元素标识这样的命名模式:当命名模式由URL进行匹配时,Web服务器就将控制权移交给ActionServlet。考虑下面各种情况:
—  访问了ActionServlet,原因是“操作”(<servlet-mapping>中的<servlet-name>元素的内容)与“操作”(<servlet>中的<servlet-name>元素的内容)相匹配。
    —  <servlet-mapping>元素指定URL的结尾的命名模式。每个URL的开头都是应用程序上下文路径。按照惯例,ActionServlet调用对象以响应与命名模式“*do”(其中“*”是通配符)一致的URL。
    <welcome-file-list>元素指示获得初始控制权的特定于应用程序的代码;在本例中,Web服务器直接从Web Content目录中调用index.jsp。
    <error-page>元素指示显示哪个JSP来响应错误;在本例中,错误为如下所示:
—  404  (找不到资源)
—  500  (Web服务器内部发生错误)
    每个<taglib>元素都使相对URL(相对于Web.xml)与标记库描述符(相对于Web应用程序根目录)相关联。每个JSP都可以使用同一个URL来表示给定的标记库,而Web.xml确定引用了哪个文件。
有关struts tag lib的配置描述
    如果你的web application打算使用Struts的taglib,那么你有必要在web.xml中对struts taglib进行配置描述。
有关Struts Action Mapping的配置描述
      作为先前描述的web.xml设置的结果,Web应用程序服务器将请求的一个子集按路径发送至ActionServlet,它通常调用一系列操作和JSP。ActionServlet的响应是基于配置文件struts-config.xml的内容的。有关其DTD文档的描述,请参考http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
    一般struts-config(version1.1)包含了如下几个部分:
(1)form-bean
    (2)global-forwards
    (3)action-mappings
    (4)data-sources

    我们知道,对于这样的一个请求(例如,表示为“/login.do”),执行下列步骤:
1、    寻找操作类对象(继承org. apache.struts.action.Action的类)
2、    ActionServlet调用操作类对象的执行方法
操作类中的执行方法的特征符为如下所示:
public ActionForward  execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
    映射对象(ActionMapping),它包含指示如何响应方法的每个可能结果的规则(“映射”)
    Struts表单bean(ActionForm),它保存发送至HTML表单或接收自HTML表单的数据
    请求和响应对象(HttpServletReques/ HttpServletResponse)

3、    从执行方法返回ActionForward对象,用于指导ActionServlet接着访问哪个操作类或JSP
返回的ActionForward对象中的信息取决于两个值:
    方法的结果(如在“成功”或“故障”等字符串中所述)
    映射对象,它包含从Struts配置文件中读取的信息


要弄明白某些运行时关系,要明白struts-config.xml该文件包括下面的一组条目:
    <form-beans>标记标识每个表单bean
    <action-mappings>标记包括用于指导应用程序流的信息,每个<action>子标记都使相对URL与操作类和潜在的后续操作相关。
Form-bean元素
Struts配置文件中的一个示例<form-bean>子元素为如下所示:
 <form-bean name=“registerForm”  type=“strutscommon.RegisterForm”/>
每个<form-bean>子元素都包括下列属性:
name
表单bean的名称,稍后在配置文件中会用到。ActionServlet举例说明了该bean(如果需要的话)并在将对bean的引用存储在请求或会话对象中时将该名称用作键。
type
     类的全限定名称,它继承org.apache.struts.action.ActionForm该类必须在类路径中。接受“Struts贸易样本”中的注册的表单bean包括HTML注册表单中每个字段的getter 和setter方法。该bean还包括验证方法,如下节“验证”中所述。
Action元素
   Struts配置文件中的一个示例<action>元素为如下所示:
  <action path=“/register”
        type=“strutsEGL.RegisterAction”
       name=“registerForm”
       input=“/register.jsp”
       scope=“request”
       <forward name=“success”path=“/home.do”/>
       < forward name=“failure”path=“/register.jsp”/>
     </action>
每个<action>元素都包括下列属性中的某些属性或所有属性:
 path
     将请求指定为非限定URL,不带文件扩展名(例如,“/register”)请求是根据<action>元素中的其它属性来处理的,并且是用户输入的结果或者是在different<action>元素中标识的转发的结果。
type
     指定在发出请求时调用其执行方法的操作类的全限定名。该类必须在类路径中。
   注:不指定要实例化的类,可以通过使用forward属性来转发请求,该属性在“Struts贸易样本”中未使用,并且与后面描述的<forward>子元素不相同。
name
     用于保存发送至HTML表单或接收自HTML表单的数据表单bean的名称。
   input
     指定相对URL(例如,“/register.do”或“/index.jsp”)必须包括后缀,
如果表单bean的验证方法指示发生了输入错误,则会调用URL;有关详细信息,参见下节的“验证”。
   scope
         指定将对表单 bean的引用存储在哪个作用域中。其值为“会话”(缺省值)或“请求”。
     Struts配置文件中的每个<action>元素还包括子元素<forward>,它指定从方法结果至后续调用的映射。每个<forward>子元素都包括下列属性
  name 
指定导致在运行时使用当前映射的字符串(例如,“success”),但是
只限于以下情况:在 type 中引用的操作类的执行方法使用完全相同
的字符串来配置返回至ActionServlet的 ActionForward对象。下面
的执行方法不是很重要,但是会导致使用“success”映射:
  
 public ActionForward exectue(
   ActionMapping mapping,
   ActoinForm form,
   HttpServletRequest request,
   HttpServletResponse response)
   Throws IOException,ServletException

   ActionForward forward=new ActionForward();
   Forward=mapping,findForward(“success”);
   return(forward);

     path
          指定非限定URL(例如,“/home.do” 或“/index.jsp”)必须包括文件扩展名,仅当使用当前映射时才会调用该URL,转发操作类是根据different<action>元素中的属性来处理的,尤其是,在其path属性标识相同URL的<action>元素中。

    有必要提一下的是,在struts1.1中,提出了对Multiple Application Support。在struts的早先版本中,只有一个struts配置文件,一般叫struts-config.xml。但是,对于越来越复杂的应用系统的发展,只有一个地方存放这个一个文件,对大型项目来说,使用和修改这个配置文件,使其成为了一个应用的瓶颈问题。在struts1.1中,你可以定义多了配置文件协同工作。

Struts 框架在启动时会读入其配置文件,根据它来创建和配置各种 Struts 组件。 Struts 配置文件使得开发者可以灵活地组装和配置各个组件,提高了应用软件的可扩展性和灵活性,可以避免硬编码。 Struts 配置文件是基于 XML 的。

 

· 1 org.apache.struts.config

  Struts1.1 中加入了 org.apache.struts.config 包。在 Struts 应用启动时,会把 Struts 配置文件中的配置信息读入到内存中,并把他们存放在 cofnig 包中相关 JavaBean 类的实例中。

org.apache.struts.config 包中的每一个类都和 Struts 配置文件中特定的配置元素对应。

Struts 框架完成了对配置文件的验证和解析后,就把配置文件中的信息存放在这些类的实例中。这些类的实例可以充当配置信息的运行时容器, Struts 组件可以方便地通过他们来获取配置信息。

org.apache.struts.config.ModuleConfig Struts 框架中扮演了十分重要的角色。它是整个 org.apache.struts.config 包的核心,在 Struts 应用运行时用来存放整个 Struts 应用的配置信息。如果有多个子应用,每个子应用都会有一个 ModuleConfig 对象。 ModuleConfig Struts 配置文件的根元素 <struts-config> 对应。 <struts-config> 根元素中包含 <form-bean> <action> <forward> 等一系列子元素,因此 ModuleConfig 中包含了和每个子元素对应的配置类实例。

org.apache.struts.config.ConfigRuleSet 类的功能不同于其他类,它包含了解析 Struts 配置文件所需要的一组规则。在应用启动时,该类负责构造 org.apache.struts.config 包中其他用于保存配置信息的 JavaBean 类的实例。

下面分别介绍 Struts 配置文件中每个元素的用法。

 

· 2 <struts-config> 元素

<struts-cofnig> 元素是 Struts 配置文件的根元素,和它对应的配置类为 org.apache.struts.config.ModuleConfig 类。 <struts-config> 元素有 8 个子元素。

Struts 配置文件中,必须按照它的 DTD 指定的先后顺序来配置 <struts-config> 元素的各个子元素,如果颠倒了这些子元素在配置文件中的顺序,在 Struts 应用启动时就会生成 XML 解析错误。

 

· 3 <data-sources> 元素

<data-sources> 元素用来配置应用所需要的数据源。数据源负责建立和特定数据库的连接,许多数据源采用连接池机制实现,以便提高数据库访问性能。 Java 语言提供了 javax.sql.DataSource 接口,所有的数据源必须实现该接口。许多应用服务器和 Web 容器提供了内在的数据源组件,很多数据库厂商也提供了数据源的实现。

<data-sources> 元素包含零个,一个或多个 <data-source> 子元素。 <data-source> 元素用于配置特定的数据源,它可以包含多个 <set-property> 子元素。 <set-property> 元素用于设置数据源的各种属性。

<data-source> 元素的 type 属性用来指定数据源的实现类。开发者应该根据实际应用的需要来选用合适的数据源实现。

配置了数据源后,就可以在 Action 类中访问数据源。在 org.apache.struts.action.Action 类中定义了 getDataSource(HttpRequest) 方法,它用于获取数据源对象的引用。

也可以在配置文件中声明多个数据源,此时需要为每一个数据源分配唯一的 key 值,通过该值来标识特定的数据源。

 

· 4 <form-beans> 元素

<form-beans> 元素用来配置多个 ActionForm Bean <form-beans> 元素包含零个或多个 <form-bean> 子元素。每个 <form-bean> 元素又包含多个属性。

<form-bean> 元素的属性

属性

描述

className

指定和 <form-bean> 元素对应的配置类,默认值为 org.apache.struts.config.FormBeanConfig 。如果在这里设置自定义的类,该类必须扩展 FormBeanConfig

name

指定该 ActionForm Bean 的唯一标识符,整个 Struts 框架用该标识符来引用这个 bean 。该属性是必需的。

type

指定 ActionForm 类的完整类名(类的报名也包含在内),该属性是必需的

 

  如果配置动态 ActionForm Bean ,还必须配置 <form-bean> 元素的 <form-property> 子元素。 <form-property> 元素用来指定表单字段,它有四个属性。

<form-property> 元素的属性

属性

描述

className

指定和 <form-property> 元素对应的配置类,默认值为 org.apache.struts.config.FormPropertyConfig

initial

以字符串的形式设置表单字段的初始值。如果没有设置该属性,则基本类型的表单字段的默认值为 0 ,对象类型的表单字段的默认值为 null

name

指定表单字段的名字。该属性是必需的

type

指定表单字段的类型。如果表单资源为 Java 类,必须给出完整的类名。该属性是必需的。

 

· 5 <global-exceptions> 元素

<global-exceptions> 元素用于配置异常处理。 <global-exceptions> 元素可以包含零个或者多个 <exception> 元素。

<exception> 元素用来设置 Java 异常和异常处理类 org.apache.struts.action.ExceptionHandler 之间的映射。

<exception> 元素的属性

属性

描述

className

指定和 <exception> 元素对应的配置类。默认值为 org.apache.struts.config.ExceptionConfig

handler

指定异常处理类。默认值为 org.apache.struts.action.ExceptionHandler

key

指定在 Resource Bundle 中描述该异常的消息 key

path

指定当异常发生时的转发路径

scope

指定 ActionMessages 实例的存放范围,可选值包括 request session ,此项的默认值为 request

type

指定所需处理的异常类的名字。此项是必需的

bundle

指定 Resource Bundle

 

· 6 <global-forwards> 元素

<global-forwards> 元素用来声明全局的转发关系。 <global-forwards> 元素由零个或者多个 <forward> 元素组成。 <forward> 元素用于把一个逻辑名映射到特定的 URL 。通过这种方式, Action 类或者 JSP 文件无需要指定实际的 URL ,只要指定逻辑名就能实现请求转发或者重定向,这可是减弱控制组件和视图组件之间的耦合,并且有助于维护 JSP 文件。

<forward> 元素的属性

属性

描述

className

<forward> 元素对应的配置类,默认值为 org.apache.struts.action.ActionForard

contextRelative

如果此项为 true ,表示当 path 属性以“ / ”开头时,给出的是相对于当前上下文的 URL 。此项的默认值为 false

name

转发路径的逻辑名。此项是必需的

path

指定转发或重定向的 URL 。此项是必需的,必需以“ / ”开头。当 contextRelative 属性为 false 时,表示 URL 路径相对于当前应用 (application-relative) ;当 contextRelative 属性为 true 时,表示 URL 路径相对于当前上下文 (context-relative)

redirect

当此项为 true 时,表示执行重定向操作;当此项为 false 时,表示执行请求转发操作。此项默认值为 false

 

· 7 <action-mappings> 元素

<action-mappings> 元素包含零个或者多个 <action> 元素。 <action> 元素描述了从特定的请求路径到相应的 Action 类的映射。

<action> 元素中可以包含多个 <exception> <forward> 子元素,他们分别配置局部的异常处理及请求转发仅被当前的 Action 所访问。

<global-exceptions> 元素中定义的 <exception> 子元素代表全局的异常配置。在 <global-forwards> 元素中定义的 <forward> 子元素代表全局的请求转发。在不同位置配置 <exception> <forward> 元素的语法和属性是一样的。

<action> 元素的属性

属性

描述

attribute

设置和 Action 关联的 ActionForm Bean request session 范围内的属性 key 。例如,假定 Form Bean 存在于 request 范围内,并且此项为“ myBean ”,那么 request.getAttribute(“MyBean”) 就可以返回该 Bean 的实例。此项为可选项。

className

<action> 元素对应的配置元素。默认值为 org.apache.struts.action.ActionMapping

forward

指定转发的 URL 路径

include

指定包含的 URL 路径

input

指定包含输入表单的 URL 路径。当表单验证失败时,将把请求转发到该 URL

name

指定和该 Action 关联的 ActionForm Bean 的名字。该名字必需在 <form-bean> 元素中定义过。此项是可选项

path

指定访问 Action 的路径,它以“ / ”开头,没有扩展名

parameter

指定 Action 的配置参数。在 Action 类的 execute() 方法中,可以调用 ActionMapping 对象的 getParameter() 方法来读取该配置参数

roles

指定允许调用该 Action 的安全角色。多个角色之间以逗号隔开。在处理请求时, RequestProcessor 会根据该配置项来决定用户是否有调用 Action 的权限

scope

指定 ActionForm Bean 的存在范围,可选值为 request session 。默认值为 session

type

指定 Action 类的完整类名

unknown

如果此项为 true ,表示可以处理用户发出的所有无效的 Action URL 。默认值为 false

validate

指定是否要先调用 ActionForm Bean validate() 方法。默认值为 true

 

提示: <action> 元素的 forward include type 属性相互排斥,也就是说只能设置其中的一项。 forward 属性的作用和 org.apache.struts.actions.ForwardAction 类相同。 Include 属性的作用和 org.apache.struts.actions.IncludeAction 类相同。

  如果在 <action> 元素中定义了局部的 <forward> 元素,它的优先级别高于全局的 <forward> 元素。

<Action> forward 属性和 <forward> 子元素是两个不同的概念。 Forward 属性指定和 path 属性匹配的请求转发路径。

 

· 8 <controller> 元素

<controller> 元素用于配置 ActionServlet

<controller> 元素的属性

属性

描述

bufferSize

指定上载文件的输入缓冲的大小。该属性为可选项,默认值为 4096

className

指定和 <controller> 元素对应的配置类。默认值为 org.apache.struts.config.ControllerConfig

contentType

指定响应结果的内容类型和字符编码。该属性为可选项,默认值为 text/html 。如果在 Action JSP 网页中也设置了内容类型和字符编码,将会覆盖该设置

locale

指定是否把 Locale 对象保存到当前用户的 Session 中。默认值为 false

processorClass

指定负责处理请求的 Java 类的完整类名。默认值为 org.apache.struts.action.RequestProcessor 。如果把此项设置为自定义的类,那么应该保持该类扩展了 org.apache.struts.action.RequestProcessor

tempDir

指定处理文件上传的临时目录。如果此项没有设置,将采用 Servlet 容器为 Web 应用分配的临时工作目录

nochache

如果为 true ,在响应结果中将加入特定的头参数: Pragma Cache-Control Expires ,防止页面被存储在客户浏览器的缓存中。默认值为 false

 

如果应用包含多个子应用,可以在每个子应用的 Struts 配置文件中配置 <controller> 元素。这样,尽管这些子应用共享同一个 ActionServlet 对象,但是它们可以使用不同的 RequestProcessor 类。

 

· 9 <message-resources> 元素

<message-resources> 元素用来配置 Resource Bundle Resource Bundle 用于存放本地化消息文本。

<message-resources> 元素的属性

属性

描述

className

<message-resources> 元素对应的配置类。默认值为 org.apache.struts.config.MessageResourcesConfig

factory

指定消息资源的工厂类。默认值为 org.apache.struts.util.PropertyMessageResourcesFactory

key

指定 Resource Bundle 存放在 ServletContext 对象中时采用的属性 key 。默认值为由 Globals.MESSAGES_KEY 定义的字符串常量。只允许有一个 Resource Bundle 采用默认的属性 key

null

指定 MessageResources 类如何处理未知的消息 key 。如果此项为 true ,将返回空字符串。如果此项为 false ,将返回类似“ ???global.label.missing??? ”的字符串。该属性为可选项,默认值为 true

parameter

指定 Resource Bundle 的消息资源文件名。

 

许多 Struts 客户化标签都通过 bundle 属性来指定 Resource Bundle ,标签的 bundle 属性和 <message-resources> 元素的 key 属性匹配。

 

· 10 <plug-in> 元素

<plug-in> 元素用于配置 Struts 插件。

<plug-in> 元素的属性

属性

描述

className

指定 Struts 插件类。插件类必需实现 org.apache.struts.action.PlugIn 接口

 

· 11 。配置多应用模块

Struts 1.1 支持多应用模块,即同一个应用包含多个子应用,每个子应用可以处理相关的一组功能。

所有的子应用都共享同一个 ActionServlet 实例,但每个子应用都有单独的配置文件。把应用划分成多个子应用模块包含一下步骤:

(1)        为每个子应用传见单独的 Struts 配置文件。

(2)        web.xml ActionServlet 的配置代码中添加每个子应用信息。

(3)        采用 <forward> 元素或 SwitchAction 类来实现子应用之间的切换

posted on 2007-02-07 08:23 ☜♥☞MengChuChen 阅读(1401) 评论(0)  编辑  收藏 所属分类: struts

只有注册用户登录后才能发表评论。


网站导航: