J2EE项目实训Struts框架技术——第6章 Struts前端控制器组件及应用(第1部分)

  • 格式:pdf
  • 大小:275.04 KB
  • 文档页数:18

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 1/18页 第6章 Struts前端控制器组件及应用(第1/2部分) 前端控制器模式是J2EE“蓝图”(BluePrint)中所给定的一种常见的系统架构模式,通过应用前端控制器模式能够为应用系统提供集中式控制和管理功能、并对所有的请求进行统一处理。因为如果应用系统中没有这种集中式控制和管理的模块或控制的机制,将导致每个不同的系统服务都需要进行单独的视图处理,而出现重复性的代码、并致使系统开发代价提高;同时,如果没有一个固定的模块来管理各个视图组件之间的关联关系,致使其浏览功能下放于每个不同的视图组件中,最终必将降低应用系统的可维护性。 在Struts框架中所提供的ActionServlet组件,其实是J2EE平台中的前端控制器设计模式的具体应用。通过提供ActionServlet组件来控制和协调来自不同用户的多个不同的请求以实现集中式控制和管理,并能够提供各种系统级的服务——包括内容提取、视图管理和浏览等方面的功能。 本章主要介绍在Struts框架中承担前端控制器的各种组件——包括ActionServlet组件、RequestProcessor组件和插件(PlugIn)的工作机制,以及这些组件在项目中的实际应用;同时也为读者介绍如何实现对Struts框架进行功能扩展的各种实现方法。 1.1 ActionServlet组件及应用 在J2EE平台的应用系统开发中,前端控制器一般是由Servlet组件承担的,并且可以为全局(整个系统只提供一个控制器组件)和局部前端控制器(每个模块都提供有自己的控制器组件、并且映射至不同的系统服务)。而在Struts框架中的ActionServlet组件属于全局前端控制器组件。 全局前端控制器组件需要在应用系统的web.xml中加以部署定义,当客户端产生出某种形式(在Struts框架中的应用系统中,一般为*.do)的请求时,容器都要读取web.xml配置文件中的以便判断用户对资源的访问方式,并将请求分发到对应的业务控制器组件中。 1.1.1 Struts 框架中的ActionServlet组件 1、为什么要提供ActionServlet组件 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 2/18页 1)Web应用程序缺少主入口点 对于从传统应用程序(Application)编程环境转入B/S模式的Web应用系统程序开发的人员来说,Web应用系统程序编程开发中的一个特点是缺少主入口点。传统的应用程序总是有主入口点(一般是由main()函数承担)、流程控制和出口点。但在B/S模式的Web应用系统的网站中,访问者用户可能会从系统中的任何页面地址处进入到系统中,并可能按照一种完全随机的访问次序浏览系统中的各个Web页面。 这种状态将为Web应用系统的控制和调度管理带来一定的复杂度,同时也为系统中的安全管理实现增加了难度。 2)如何为Web应用系统程序提供一个固定的访问入口 Struts框架通过ActionServlet组件来隐藏Web应用系统程序在访问方面固有的“混乱无序”的局面,并帮助Web应用系统程序的开发者建立起清晰、明确的秩序和访问规则。并为Web应用系统提供一个固定的访问控制总入口,从而有利于对Web应用系统的控制和调度进行管理。 2、Struts框架中的ActionServlet组件的主要作用 1)Struts框架的工作流程清楚地体现了MVC系统的特点 所有的有效业务请求都将发送到Struts框架的前端控制器ActionServlet组件中,然后再由ActionServlet组件根据具体请求的类型定位特定的业务调度控制器组件(由Action组件承担);不仅分离了表示层组件和模型层组件之间的关系,而且在控制层方面也将职责进一步分离——ActionServlet组件完成业务请求的预处理,而各个Action组件类则完成具体的业务请求的实际处理。 2)ActionServlet组件为Web应用系统主调度程序 根据图1.8所示的Struts框架的系统架构示图,可以很清楚地了解到ActionServlet组件为Web应用系统主调度程序(或称为分配器),类似于传统应用程序中的main()函数;在Struts框架中提供ActionServlet组件,其实是应用了J2EE平台中的前端控制器的设计模式。 前端控制器提供了一个统一的组件来封装Web应用系统中的公共请求处理,它的任务相当简单——执行公共的任务,然后把具体的请求转交给相应的业务调度控制器组件。而在Struts框架中,前端控制器ActionServlet组件的主要作用也在于此——它初始化并解杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 3/18页 析配置文件struts-config.xml中的各个具体配置标签内容,并接受每个具体的请求、然后再简单地把请求委托给调度器(Dispatcher),由调度器执行相应的动作(Action)。调度器把特定的Action组件返回的URL地址再返回给前端控制器组件,最后由前端控制器组件负责转发。 3、Struts框架中的ActionServlet组件的工作过程 1)ActionServlet组件被加载的时机 由于ActionServlet组件为标准的J2EE Servlet组件(因为ActionServlet组件本身也是继承于javax.servlet.http.HttpServlet类),因此开发者需要在Web应用系统的部署描述文件web.xml中部署和定义ActionServlet组件,具体的内容标签请参考【例1-6】中所示的web.xml文件中对ActionServlet组件的部署配置的内容示例。因此,每当客户端表示层组件产生出一定的“url-pattern”(*.do)形式的请求时,Servlet容器将根据在web.xml中的和标签来加载该ActionServlet组件、并将它缓存在内存中,形成单对象多线程的效果。 2)ActionServlet组件如何定位业务调度控制器组件 而ActionServlet组件则根据开发者在struts-config.xml配置文件中的特定请求处理器的设置(请参考【例1-12】中所示的标签)来决定转向到那个具体的后端业务控制器Action类中。 1.1.2 ActionServlet组件的可配置参数 1、在部署描述文件web.xml中配置ActionServlet组件 Struts 框架中的ActionServlet组件由于是一个标准的J2EE Web Servlet 组件,因此需要在Web应用系统的部署描述文件web.xml中进行部署配置。尽管在【例1-6】中给出了一个在web.xml文件中对ActionServlet组件进行部署配置的内容示例,但为了能够更好地说明ActionServlet组件的可配置参数,在下面的【例6-1】中再给出一个更一般的ActionServlet组件的可配置参数定义示例。 【例6-1】ActionServlet组件可配置的初始化参数示例 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 4/18页 action org.apache.struts.action.ActionServlet application Application config /WEB-INF/struts-config.xml debug2 detail2 1 action *.do 在【例6-1】的示例中,定义了一个名称为action的ActionServlet组件,并且告诉Servlet容器,每当有*.do的客户请求时,将要加载该ActionServlet组件(不匹配这种格式的请求将不被Struts 处理,比如对*.html 或 *.jsp 文件的请求通常由容器内建的服务来处理完成);并且为该ActionServlet组件提供了四个初始化参数——application、config、debug和detail(当然ActionServlet组件也可以接受其它的初始化参数),各个初始化参数的具体含义和作用请见表6.1。 在上面的四个参数中,其中最重要的参数应该是config参数所对应的值表示的配置文件名称和目录。在【例6-1】的示例配置项目中,为ActionServlet组件配置了一个名为杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 5/18页 config的初始化参数,值为 /WEB-INF/struts-config.xml。而struts-config.xml文件是一个基于Struts框架的Web应用系统中的最重要的配置文件,其中包含了所有的Action组件的请求(一般是以.do形式结尾的请求)、相应的Action处理类、ActionForm组件以及页面的转向等有关的信息配置。 2、Struts框架中的ActionServlet组件的各个初始化参数 ActionServlet组件在具体配置时可以接受多个不同的初始化参数,尽管大多数的初始化参数都有合理的缺省值,一般不需要重新设定和改变。但为了能够满足Web应用系统的特殊应用要求时,有一些配置参数却必须要重新设置和改变。 表6.1所示的内容为摘录于Struts帮助文档中的有关ActionServlet组件的各个初始化参数的含义和作用说明,开发者可以根据Web应用系统的具体要求配置相应的初始化参数、并给出具体的值。 表6.1 ActionServlet组件的各个初始化参数含义和作用 参数 默认值 描述 application null 应用程序的资源集合的类,也就是应用使用的资源包(resources bundle)的基类 bufferSize 4M 文件上传的缓冲区大小 config /WEB-INF/struts-config.xml 配置文件的位置和名称 content text/html 默认的内容类型 debug 0 程序调试的级别,比当前级别高的调试信息会被log到日志文件中。 detail 0 程序调试细节的级别,与debug的作用类似,只是这个detail是initMapping()时专用的。调试信息会被打印到System.out,而不是日志文件。 factory null 消息资源工厂,用于国际化中解释消息资源,用于创建应用的MessageResources对象的MessageResourcesFactory的类名 formBean org.apache.struts.action封装ActionForm bean信息的类的名称