基于ssh企业人力资源管理系统内容摘要:

,并且开发出了很多成熟的产品,使用这些成熟的应用软件开发,可以跳过以前C/S 模式下的许多底层开发工作,节省很多工作量。 强大的跨平台能力。 由于使用浏览器作为客户端,而客户端对于服务器端采用何种技术,何种网络没有要求,只要符合网络协议就能通讯工作了。 同时,因为采用的是目前公开的协议和标准,任何其他采用相同的协议的系统都可以互联互通,具有良好的开放性和扩充性。 Web层框 架 Struts 介绍 Struts 是 Apache 基金会 Jakarta 项目组的一个开放源代码项目,它是一个基于 MVC 设计模式的 Web 应用框架的具体实现。 Struts 的体系结构(图 32)与JSP Model 2 有很大的相似性,它有自己特定的一组相互协作的类来完成对应的功能。 图 32 Struts框架模式图 根据上图中显示的流程,一个采用 Struts 框架开发的 Web 应用的基本流程如下。 控制器类 ActionServlet 接收来自客户端浏览器的各种请求,根据配置文件“ ”,对客户 请求进行相应的处理。 针对一个特定的请求,ActionServlet 自动接收请求表单中的信息填充对应的 ActionForm Bean,然后分配请求给相关的 Action 对象执行业务逻辑的处理。 Action 对象在调用方法处理请求的过程中,将调用相关的模型组件,最后返回控制权,由 ActionServlet负责将处理结果的视图响应返回给客户端。 另一种可能的情形,如客户端表单信息在没有通过数据验证的情况下, ActionServlet 类可能将接收到的客户请求直接转发给相关的 JSP 视图文件进行处理,然后返回响应给客户端,要 求客户端重 11 新提交符合数据验证的信息。 Struts 的主要组件 类 ActionServlet 类在 Struts 框架中扮演核心控制器的角色,职责就是要把HTTP 消 息 打 包 起 来 并 传 送 到 框 架 中 合 适 的 处 理 器。 它 扩 展 了 类,实现了 HttpServlet 类的 init()、doGet()/doPost()以及 destroy()方法,此外它还包括一个特殊的 process()方法,而正是这个方法来处理接收到的客户请求并作出响应。 process()方法的声明格式如下: protected void process( request, response )throws ,{ …… } ActionServlet 的 process()方法并不复杂,在运行过程中,它首先获取一个 RequestProcessor 对象,实际上对客户端请求进行处理是由RequestProcessor 对象的 process()方法,也就是说控制器的执行逻辑是直接体现在了 RequestProcessor 类中,而 ActionServlet 是借助 RequestProcessor 间接的实现控制请求。 、 ActionMapping类和 ActionForward类 Struts框架中的 Action类是控制器组件的一个扩展,如同一座桥梁,它可以把用户的动作与一个业务操作连接起来。 Action 类使客户端请求和业务模型松散耦合 ,这种松散耦合让请求和 Action 类不再局限于一对一的对应关系。 作为一个执行业务操作的类,Action 包含了多个方法,但其中的 execute()方法是它最重要的方法。 它的声明结构如下: public ActionForwrad execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, 12 HttpServletResponse response)throws Exception{ …… } 当控制器收到请求交给相关的 Action 类进行处理,必然会调用到 execute()方法。 如果 Action 类的实例对象不存在,控制器就会创建一个 Action 类的实例。 可是当控制器接收到一个具体的客户端请求时,如何选择调用一个符合要求的Action 实例呢。 其实通过 execute()方法可以找到一些线索,该方法的第一个参数ActionMapping 类提供了完成这种动作映射的功能。 ActionMapping 对象包括了一个 path 属性,用来与外部请求的 URI 匹配。 最后再研究一下 execute()方法的返回类型 ActionForward。 当控制器 收到请求并找到正确的 Action 类实例予以调用后,它的返回值是一个 ActionForward 对象。 ActionForward 类所表示的是一个目标,也就是在 Action 完成之后,控制器要转交控制权的地方。 此时不是在程序代码中指定实际的 JSP 视图页面,而是以声明的方式把某个动作的转发映射与JSP 页面相关联,即一个经过定义的 ActionForward 对象,然后在应用系统中使用这个 ActionForward 对象。 类和 DynaActionForm 类 ActionForm 类是 Struts 框架中 的一种系统状态 Bean,用来实现应用系统的非持久性数据存储和维护功能。 简单来讲,这种类型的对象用于保存客户请求表单中的数据。 Struts 框架会将这些包含客户端提交的数据的 Form Bean 交给合适的 Action对象,执行业务逻辑的处理。 应用系统中的 ActionForm扩展自 Struts API中定义的抽象类 ,现自动被填充属性和调用机制。 因此,根据应用定义的 ActionForm Bean 类中包含的属性必须和客户表单数据属性同名,相应的属性存 取方法也要按照属性名规范定义。 此外, ActionForm 类还包含两个重要的方法, reset()和 validate(),它们的作用是实现属性重置和表单数据验证功能,在应用系统开发过程中 可以根据实际需要对这两个方法进行重写。 在设计 ActionForm Bean 的过程中有一点需要着重强调,控制器在把客户端请求中的表单数据填入 ActionForm 实例之前,会先调用 reset()方法,让ActionForm 将其属性值设置回原来的默认状态。 但是,因为 ActionForm Bean 实例可能会由许多个请求共享或者由好几 个不同线程所访问,所以,如果是让多个 13 页面共享一个 ActionForm 实例,就不用去重写 reset()方法,因为那样会使属性值丢失。 Struts 的配置文件 基于 Struts 框架开发的应用程序的配置主要是在两个配置文件中进行的,一个是通用性的,使用于所有 Web 应用程序的部署文件 ,另一个是 Struts专用的配置文件。 文件 文件可以用来配置 ActionServlet,设置欢迎文件列表,配置用户标记库和对错误处理页面的设置 等等。 下面是一个简单的 文件示例。 !Action Servlet Configuration Servlet Servletnameaction/Servletname Servletclass/Servletclass initparam paramnameconfig/paramname paramvalue/WEBINF/conf//paramvalue /initparam loadonstartup1/loadonstartup /Servlet !Action Servlet Mapping Servletmapping Servletnameaction/Servletname urlpattern*.do/urlpattern /Servletmapping welefilelist welefile/welefile /welefilelist 在这段示例代码中,首先用 Servlet元素配置 ActionServlet 实例。 它的子元素 Servletname和 Servletclass分别用来指定该 Servlet 的名字和所属类的类名。 initparam设定了 Servlet 所需的初始化参数。 loadonstartup元素用于标明应用程序启动时,即在接收到任何客户端请求之前,创建该 Servlet 实例的数 14 目,缺省为 0 个。 这样处理可以提高应用程序第一次被调用时的响应速度,创建实例过多会增大服务器端开销。 接着,代码中依靠 Servletmapping元素配置了相应的映射关系,它指定了请求 URI和 ActionServlet间的映射关系。 在示例中表明的映射关系是所有以“ .do”结尾的页面请求都会交给名为 action 的 ActionServle 来处理。 而welefilelist元素主要用来设定应用系统的默认页。 总体来看, 文件的主要功能就是为 Struts 框架配置 ActionServlet 和标签库。 配置文件是整个 Struts 框架的核心。 在 基于 Struts 构建的Web 应用系统中,它负责组合各个组件,建立应用程序的总体脉络,可以说该文件的作用相当于一个大型项目开发运行过程中的控制调配中心。 图 33 Struts组件应用图 图 33 显示了 文件是如何组织各个组件一起工作的。 当应用系统启动时,首先会从 文件中读取相关的配置信息。 视图组件 JSP、控制器组件 ActionServlet和业务逻辑组件之间没有代码上的联系,它们之间的关系都是在 中声明。 系统所采用的设计模式 设计模式的思想认为在系统设计这一层次上,软件开发可以抽象成一种模式,模式描述了系统面临的问题及其解决方案,并可以重用。 每一个模式描述了 15 一个在开发者做设计时不断重复遇到的问题,以及该问题的解决方案的核心。 这样,开发者就能一次又一次地使用该方案而不必做重复劳动。 概括说来,设计模式的核心在于提供了相关问题的解决方案。 另一方面,随着对软件功能要求的提高,以及应用系统所涉及范围的不断扩展,采用传统的 Web 体系结构在代码的移植、程序的可扩展性方面产生了众多问题。 引入设计模式的思想就是要在开 发过程中最大限度的实现“重用”,包括代码的重用、设计的重用、资源的重用等等,从而高效率、高质量的进行开发。 就如同一个建筑设计师要设计一栋商用写字楼,一定会借鉴许多在商用设计楼方案中成功的设计经验一样,软件设计领域中的设计模式则是对以往成功软件设计方式的重用,是对专业软件开发人员技术和经验的重复利用。 一个成熟的设计模式,必然针对特定问题提供了比较完善的解决方案,对模式中各个组成部分的相互关系及协作分工进行了具体的描述,并将模式应用的效果及意义展现给使用者。 总之,把设计模式运用到 Web 应用体系中是为了更好的完 成一个具体的应用系统的设计与实现,达到事半功倍的效果。 JSP Model 1 早期在 J2EE 平台下进行 Web 应用开发经历了两种设计模式,分别是 JSP Model 1(图 34)和 JSP Model 2。 图 34 JSP Model1 模型图 在 Model 1 中, JSP 页面中结合业务逻辑、服务器端处理程序和 HTML 代码,在 JSP 页面中同时处理显示、业务逻辑和流程控制。 换言之, Model 1 是一个以JSP 文件为核心的模式。 它的优点在于模型简单灵活,实现起来方便快捷。 对于开发小型的应用, Model 1 是首选。 可是对于大型的复杂的项目,当 JSP 文件在 16 各个 Bean 组件之间面临复杂的调用之时(如图 34 中虚线所示),组件关系在管理上就显得混乱无序,使得无论是代码还是逻辑设计都很难实现重用。 JSP Model 2 由于 Model 1 存在复用性低、维护成本高昂等不足,为了克服在开发大型应用中 Model 1 的这些缺陷, JSP Model 2(图 3- 5)作为一种新的设计模式被引入到 Web 应用的开发中来。 Model 1 虽然将一部分业务逻辑放到了 JavaBean 中实现,在一定程度上降低了页面显示和逻 辑处理的耦合度,但是 JSP 页面本身依然充当了显示和控制两种角色,使得控制逻辑代码和表示层代码混杂在了一起。 大量实现控制逻辑的代码将会使整个 JSP 页面变得异常臃肿,而 Model 2 加入了Servlet 来专门实现控制和分配请求的功能。 图 35 JSP Model 2 模型图 在 Model 2 这个模型中,各个组成部分的分工如下。 JSP 技术用于表现页面,Servlet 技术负责完成大量的业务处理, JavaBean 用来存储数据。 当接收到来自客户端浏览器的请求时, Servlet 充当一个控制者的角色处理这些请求;它根 据需要实例化视图 JSP 需要的 Bean 对象,然后执行与用户请求行为相关的业务逻辑,最终决定将对应的 JSP 视图页面发送给客户。 通过对 Model 1 和 Model 2 的比较可以发现,两者最主要的差别在于它们处理请求的方式,即采用哪个组件来对客户端。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。