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框架结构
最新推荐文章于 2019-07-17 14:17:01 发布