Sung in Blog

           一些技术文章 & 一些生活杂碎

      Struts framework根据配置文件使得ServletAction,ActionMapping,Action,ActionForm这几个不同层次的组件相互交互,协调的工作。这些配置文件是在系统启动的时候,读入并保存于内存中,供控制器使用的。

      Struts framework主要包括三部分的配置描述,一个是指定有关Struts Controller及其相关的的配置描述(Initialization Parameters),一个是对struts tag lib的描述,一个是Struts组件(ActionMapping,Action,ActionForm)之间相互映射协调的关系

 

      因为Struts Controller的主要类ActionServlet是继承自HttpServlet,所以必须像配置一个Servlet那样在部署描述符(Web.xml )中配置ActionServlet类及其访问映射。

   当第一次创建基于Struts的Web应用程序时,将为您创建一个部署描述符,这通常就足够了。该文件包括下列条目:

l、<servlet>条目定义用于Web应用程序的servlet (在本例中,这是唯一的servlet):

— <servlet-name> 和<servlet-class>指示ActionServlet (标识为“操作”)接收HTTP请求并确定如何响应。

— <init-param>表示servlet初始化参数.

— “config”指示ActionServlet的行为由指定的配置文件来指导,该配置文件通常具有以下名称:

\WEB-INF\struts-config.xml

— “debug”具有整数值,它指示将有关处理的详细信息写至控制台的程度。“0”表示不生成任何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文档的描述,请参考这里

    一般struts-config(version1.1)包含了如下几个部分:

   (1)form-bean

   (2)global-forwards

   (3)action-mappings

   (4)data-sources

 

      对于这样的一个请求(例如,表示为“/login.do”),Struts框架将会执行下列步骤:

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中,你可以定义多了配置文件协同工作。

posted on 2005-10-27 16:26 Sung 阅读(738) 评论(0)  编辑  收藏 所属分类: Struts

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


网站导航: