Struts框架结构  
  Struts是一个开放资源框架,包含了一系列相互的类、Servlet和JSP标记。Struts框架是基于MVC框架开发Web应用程序的具体应用。使用Struts框架可以将商业逻辑、控制和数据显示功能模块区分开来,这样对其中一个模块的改动不会影响到其他模块。使用这一框架,开发人员可以分别集中开发商业逻辑模块、应用程序控制模块和数据显示模块,而不用担心这三个模块的耦合问题。  
  3.1   Struts框架体系结构  
  从MVC的角度来分析Struts框架中的各个组件,如图2所示。ActionServlet负责接收来自浏览器的请求,并将HTTP请求转发到框架中的其他对象,包括JSP页。在初始时,它对配置文件(struts-config.xml)进行分析,然后根据其中定义的映射转发相应的HTTP请求。在映射中必须指明请求的路径和对象类型。Action对象对请求进行处理并将响应返回到客户,或者指明控制应该转发到何处。Action对象被链接到应用程序的ActionServlet,因此可以访问它的方法。在进行控制转移时,一个对象能够将一个或多个共享对象放置到请求、会话或应用的作用域,从而间接地转发它们。  
   
                                    图2     基于MVC的Struts框架结构  
    在图2所示Struts框架中,包括了客户端浏览器、控制器、事物逻辑、模型和视图五个组成部分。  
  1)   客户浏览器   (Client   Browser)  
  来自客户测览器的每个HTTP请求创建一个事件。Web容器将用一个HTTP响应作出回应。  
  2)   控制器(Controller)  
  控制器接收来自浏览器的请求,并决定将这个请求发往何处。就Struts而言,控制器是以Servlet实现的一个命令设计模式。struts-config.Xml文件配置控制器。  
  3)业务逻辑(Bussiness   Logic)  
  业务逻辑更新模型的状态,并帮助控制应用程序的流程。就Struts而言,这是通过作为实际业务逻包装的Action类完成的。  
  4)模型   (Model)  
  模型表示应用程序的状态。业务对象更新应用程序的状态。ActionForm   Bean在会话级或请求级表示模型的状态,而不是在持久级。JSP文件使用JSP标记读取来自ActionForm   Bean的信息。  
  5)视图(View)  
  视图就是一个JSP文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息,只有标记。标记是使Struts有别于其他框架因素之一。  
  3.2   Struts框架中的组件  
  Struts框架所使用的一些组件如下表:  
  组件                                                     角色  
    ActionServlet                                           控制器  
    ActionClass                                             包含事物逻辑  
    ActionForm                                             显示模块数据  
    ActionMapping                                       帮助控制器将请求映射到操作  
    ActionForward                                       用来指示操作转移的对象  
    ActionError                                             用来存储和回收错误  
    Struts标记库                                         可以减轻开发显示层次的工作  
  下面通过对Struts框架中组件的介绍来说明Struts   框架是采用MVC模式创建Web应用程序的过程。:  
  1)   ActionServlet类  
          Struts的控制器是将事件(事件通常是   HTTP   post)映射到一个Servlet。控制器使用配置文件以使我们不必对这些值迸行硬编码。ActionServlet是该MVC实现的Command部分,它是这一框架的核心。ActionServlet(Command)创建并使用Action、ActionForm和ActionForward。如前所述,struts-config.xml文件配置该Command。在创建Web项目时,将扩展Action和ActionForm来解决特定的问题。文件struts-config.xml指示ActionServlet如何使用这些扩展的类。这种方法有几个优点:  
  1. 用程序的整个逻辑流程都存储在一个分层的文本文件(struts-config.xml)中。这使得人们更容易查看和理解它,尤其是对于大型应用程序而言。  
  2. 页设计人员不必费力地阅读Java代码来理解应用程序的流程。  
  3. Java开发人员也不必在更改流程以后重新编译代码。  
  4. 可以通过扩展ActionServlet来添加Command功能。  
  2)   ActionForm类  
  ActionForm维护Web应用程序的会话状态。ActionForm是一个抽象类,必  
  须为每个输入表单模型创建该类的子类。输入表单模型,是指ActionForm表示的由HTML表单设置或更新的一般意义上的数据。例如,您可能有一个由HTML表单设置的UserActionForm。Struts框架将执行以下操作:  
  1. 查UserActionForm是否存在;如果不存在,它将创建该类的一个实例。  
  2.Struts将使用HttpServletRequest中相应的域设置UserActionForm的状态。不需要采用太多的request.getParameter()调用。例如,Struts框架将从请求流中提取fname,并调用UserActionForm.setFname()。  
  3. Struts框架在将UserActionForm传递给业务包装UserAction之前将更新它的状态。  
  4. 在将它传递给Action类之前,Struts还会对UserActionForm调用validation()方法进行表单状态验证。注意这并不总是明智之举。别的网页或业务可能使用UserActionForm在这些地方,验证可能有所不同。在UserAction类中进行状态验证可能更好。  
  5. 可在会话级维护UserActionForm。在Struts框架里,由struts-config.xml文件控制HTML表单请求与ActionForm之间的映射关系。  
  3)Action类  
          Action类是业务逻辑的一个包装。Action类的用途是将HttpServletRequest转换为业务逻辑。要使用Action,请创建它的子类并覆盖process()方法。  
          ActionServlet(Command)使用perform()方法将参数化的类传递给ActionForm。此时,输入表单数据域(HTML表单数据)己被从请求流中提取出来并转移到ActionForm类中。  
  扩展Action类时请注意简洁。Action类应该控制应用程序的流程,而不应该控制应用程序的逻辑。通过将业务逻辑放在单独的包或EJB中,我们就可以提供更大的灵活性和可重用性。  
  ActionServlet对具体业务类接口一无所知。因此,Struts提供了它能够理解的一个业务接口,即Action。通过扩展Action,使业务接口与Struts业务接口保持兼容。Action开始为一个接口,后来却变成了一个类。  
    4)ActionError类  
          ActionError封装了单个错误消息。ActionErrors是ActionError类的容器,View可以使用标记访间这些类。ActionError是Struts保持错误列表的方式。  
  5)ActionMapping类  
          输入事件通常是在HTTP请求表单中发生的,Servlet容器将HTTP请求转换为HttpServletRequest.控制器查看输入事件并将请求分派给某个Action类。   strut-config.xml确定Controller调用哪个Action类。strut-config.xml配置信息被转换为一组ActionMapping而后者又被放入ActionMapping容器中。ActionMappings是ActionMapping对象的一个集合。  
          ActionMapping包含有关特定事件如何映射到特定Action的信息。ActionServlet(Command)通过Perform()方法将ActionMapping传递给Action类。这样就使Action可访问用于控制流程的信息。  
  图3显示了以上介绍的Struts框架组件之间的关系。  
     
                                        图3   Struts框架的组件的关系  
            采用Struts框架开发Web应用程序可以实现清晰的分工,网页设计人员可以只关心视图的设计而不必了解业务逻辑和数据的操作;业务专家可以专心于系统业务逻辑的实现。同时,Struts框架降低了模块之间的耦合度,页面的修改不会影响业务逻辑的实现;业务逻辑的修改也很少涉及页面的修改,有利于系统的维护和升级。  
  3.3   基于Struts框架开发Web应用程序的优势  
  基于Struts框架开发Web应用程序简化了基于MVC的应用程序的开发;提供了很多对象实现了MVC的基本特征;允许开发人员使用XML文件来配置很多默认的框架;提供了一个灵活的体制来处理错误和异常;提供了一个方便的方法对应用程序的信息进行国际化;Struts框架具有组件的模块化、灵活性和重用性的特点,同时简化了基于MVC的Web应用程序的开发

Struts框架结构相关推荐

  1. 计算机词汇查询,计算机辅助英语词汇查询系统的设计.doc

    计算机辅助英语词汇查询系统的设计 计算机辅助英语词汇查询系统的设计 摘 要: 以往所使用的基于Visual Studio的计算机辅助英语词汇查询系统存在查询页面过于繁琐运行效率低,导致查询系统速度慢以 ...

  2. [转]为什么要使用框架

    打算看Spring,作为三大框架之一,一直很困惑她有什么用?为什么要使用Spring呢?回过头来想想过去一年花了很多时间来看Struts.Hibernate,总是不停地去他们有什么用,怎么去用,却从没 ...

  3. Java、Javascript、Javaweb三者的区别

    首先,我们来说一下java 与 javaweb之间的关系 : 我们平常说的Java一般指Java SE,也就是Java Standard Edition,Java的标准版,一般用来开发桌面应用程序,但 ...

  4. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统

    基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+SSH的婴幼儿产品销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  5. 基于SSH的婴幼儿产品销售系统的开发与设计毕业设计论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘要 科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普 ...

  6. Java web框架

    Java web框架综述 Java Web设计框架:Web应用的Java框架综述 特金德·辛格博士,助理教授, 旁遮普巴廷达Baba Farid学院计算机科学系(印度) 摘要:在本文中,我将Web设计 ...

  7. java毕业设计——基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码)——二手交易网站

    基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2EE+Hibernate的校园二手交易网站设计与实现,文章末尾附有 ...

  8. J2EE与javaweb的区别

    1.Java分类 Java分为JavaSE(Java标准版).J2EE(Java企业版)和JavaME(Java微型版): JavaSE(Java Standard Edition),一般用来开发桌面 ...

  9. 动力节点——Java学习路线图

    史上最全最细Java学习路线图-动力节点官方出品 2019年最新Java学习路线图, 路线图的宗旨就是分享,专业,便利,让喜爱Java的人,都能平等的学习.从今天起不要再找借口,不要再说想学Java却 ...

  10. javaSE/ javaEE/ javaME

    人们平常说的Java一般指JavaSE,也就是Java Standard Edition,Java的标准版. 一般用来开发桌面应用程序,但是在开发桌面应用程序上相对VB,Delphi,VC++并没有什 ...

最新文章

  1. PHP用户输入安全过滤和注入攻击检测
  2. BP神经网络分类2*2对角矩阵准确率数据汇总
  3. 2019牛客暑期多校训练营(第五场)F - maximum clique 1 (最大团:补图最大独立集)
  4. datatable数据类型方法
  5. html5 内容载入,HTML5 的 DOMContentLoaded 和 onload
  6. mysql—触发器trigger
  7. C++总结学习(一)
  8. 使用Dotfuscator混淆winphone8应用XAP
  9. 索尼相机手机控制对焦,摄影新手必看—关于索尼微单的15条技巧分享
  10. 查看redis的Value值大小
  11. linux c解决多个第三方so动态库包含不同版本openssl造成的符号冲突
  12. linux物理接口数据结构,Linux Regulator Framework(1)_概述
  13. 多智能体强化学习:合作关系设定下的多智能体强化学习
  14. 农业技术:从能量的角度看农业革命(垄耕种植法)
  15. 记一次python考试题
  16. 懂技术的产品就是全栈产品?扯.J.B.淡
  17. 计算机调出任务管理器的组合键是,如何打开任务管理器 打开任务管理器的方法【方法详解】...
  18. java持久化框架_众里寻他千百度-- 轻量级持久化框架-java-火龙果软件工程
  19. bzoj 3811: 玛里苟斯【线性基+期望dp】
  20. C#的多线程(2)之二

热门文章

  1. 图书管理系统(大一C语言大作业 包含主要结构体,文件操作, 如数据的修改 查询 删除等)
  2. bat批量剪切命令_批量处理文件.bat命令手册
  3. 值得苦练的100道Python经典练手题,(附详细答案)
  4. 精心收集了60个C语言项目源码,分享给大家
  5. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (2)
  6. django python版本选择
  7. TP框架的目录结构总结
  8. # 一点毕设小感悟(SnowNLP+可视化分析)
  9. CmsEasy可视化编辑商城系统源码
  10. java me教程_Java ME基础教程