您的位置:首页 > 编程语言 > Java开发

Struts配置文件简介

2009-02-26 15:59 204 查看
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中,你可以定义多了配置文件协同工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: