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