好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

J2EE开发常用软件体系架构模式.ppt

85页
  • 卖家[上传人]:鲁**
  • 文档编号:568694290
  • 上传时间:2024-07-26
  • 文档格式:PPT
  • 文档大小:4.06MB
  • / 85 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • J2EE开发常用软件体系架构模式华南师范大学软件学院作者:杨劲松struts, hibernate, spring struts, hibernate, spring 及其衍生及其衍生框架框架 主要内容:单击此处添加文字内容软件体系架构单击此处添加文字内容J2EE的体系架构单击此处添加文字内容￿￿￿￿￿￿￿￿￿￿￿￿￿其他开发框架单击此处添加文字内容SSH框架1243 1、软件体系架构————软件无处不在软件无处不在7/26/2024华南师范大学软件学院3 1、软件体系架构————软件开发现状软件开发现状超时超预算被取消按时按预算完成15%25%60% 设计 集成和系统测试50 - 80 %7/26/2024华南师范大学软件学院4 1、软件体系架构————软件危机的案例软件危机的案例7/26/2024华南师范大学软件学院5 IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“…像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。

      …” 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1.3 1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁 1、软件体系架构————软件为什么会失效软件为什么会失效7/26/2024华南师范大学软件学院6 1、软件体系架构————产生软件危机的根源产生软件危机的根源7/26/2024华南师范大学软件学院7ü软件规模越来越大、复杂度越来越高ü用户需求不明确ü缺乏正确有效的理论及工程指导 ——对用户要求、实现条件没有完整准确的分析就匆忙编写程序,是许多软件开发失败的主要原因p在此种背景下,人们认识到软件体系架构的重要性p软件工程研究初期重点放在数据结构和算法的选择•如 Knuth 提出了数据结构 + 算法 = 程序 1、软件体系架构————什么是软件体系架构什么是软件体系架构pDewayne Perry和和A1exander Wo1fØ软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处处理构件理构件、数据构件数据构件和连接构件连接构件。

      •处理构件负责对数据进行加工•数据构件是被加工的信息•连接构件把体系结构的不同部分组组合连接起来p Mary Shaw 和和 David GarlanØ软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计——关于整体系统结构设计和描述方面的一些问题,如:•全局组织和全局控制结构 •关于通讯、同步与数据存取的协议,等7/26/2024华南师范大学软件学院8 1、软件体系架构————什么是软件体系架构什么是软件体系架构pKruchtenØ软件体系结构有四个角度,它们从不同方面对系统进行描述:•概念角度概念角度描述系统的主要构件及它们之间的关系;•模块角度模块角度包含功能分解与层次结构;•运行角度运行角度描述了一个系统的动态结构;•代码角度代码角度描述了各种代码和库函数在开发环境中的组织p不同研究背景、应用背景的人员从不同的角度给出了多达近不同研究背景、应用背景的人员从不同的角度给出了多达近百种定义,但有两点共识:百种定义,但有两点共识:Ø软件体系结构对于软件开发具有重要意义,必须采用良好的设计原则达到良好的结构设计Ø主流的定义都认为:软件体系结构是用来表示软件系统的总体结构主流的定义都认为:软件体系结构是用来表示软件系统的总体结构的,该结构由软件构件和构件之间的关系及约束构成的,该结构由软件构件和构件之间的关系及约束构成7/26/2024华南师范大学软件学院9 2、J2EE的体系架构pJ2EEØ为企业应用系统的开发提供了一种多层分布式企业应用模型Ø按应用逻辑按功能不同可以划分为不同类型的组件7/26/2024华南师范大学软件学院•客户层,客户层,运行在客户计算机上的组件。

      •Web Web 层,层,运行在J2EE服务器上的组件•业务层,业务层,同样是运行在J2EE服务器上的组件•企业信息系统层(企业信息系统层(EISEIS),),是指运行在EIS服务器上的软件系统J2EE分层结构分层结构 2、J2EE的体系架构pJ2EE7/26/2024华南师范大学软件学院11Ø用户与系统的接口逻辑Ø功能是显示数据Ø可以是在客户端层内运行的浏览器、基于Java的程序或者其它web型编程环境 2、J2EE的体系架构pJ2EE7/26/2024华南师范大学软件学院12 2、J2EE的体系架构pJ2EE7/26/2024华南师范大学软件学院13 2、J2EE的体系架构7/26/2024华南师范大学软件学院14————什么是模式?什么是框架什么是模式?什么是框架??p模式,即pattern其实就是解决某一类问题的方法论你把解决某类问题的方法总结归纳到理论高度,那就是模式p模式分为:Ø体系结构模式Ø设计模式p框架,即framework建立在体系结构模式的基础上包括大量组件,设计模式,与某一领域的具体应用无关pC/S:以数据库为中心pB/S多层架构将显示、业务运算、数据库等功能完全分离,杜绝彼此的耦合与影响,从而实现松耦合和良好的可维护性。

      3、￿SSH框架7/26/2024华南师范大学软件学院15————SSHSSH简介简介pStruts(表示层)+Spring(业务层)+Hibernate(持久层)  7/26/2024华南师范大学软件学院163、￿SSH框架————SSHSSH简介简介pStruts(表示层)+Spring(业务层)+Hibernate(持久层)  7/26/2024华南师范大学软件学院173、￿SSH框架————SSHSSH简介简介pStruts(表示层)+Spring(业务层)+Hibernate(持久层)  7/26/2024华南师范大学软件学院183、￿Struts————Model1Model1与与Model2Model2设计模式设计模式p以JSP为中心的开发模型,称为Model1(JSP+JAVABEAN)Ø业务逻辑与表示逻辑混和,不利维护与重用ØHTML中嵌入了大量的JAVA代码Ø验证、流程控制、更新程序的状态全部在JSP中完成BROWSERJSPRequestResponseJavaBeanApplication ServerEnterprise Servers/Data Sources传统的Model 1(JSP+JAVABEAN) 7/26/2024华南师范大学软件学院193、￿Struts————Model1Model1与与Model2Model2设计模式设计模式p以servlet为中心的开发模型,Model2(JSP+Servlet+JAVABEAN)BROWSER(Controller)ServletRequestResponse(Model)JavaBeanEnterprise Servers/Data Sources(View)JSPModel2(JSP+Servlet+JAVABEAN)pMVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。

      MVC将应用程序分成3部分:模型、视图和控制器 7/26/2024华南师范大学软件学院203、￿Struts————MVCMVC模式模式pMVC模式Ø模型模型(Model)(Model)是应用程序的主体部分模型表示业务数据,或者业务逻辑 Ø视图视图(View)(View)是应用程序中用户界面相关的部分,是用户看到并与之交互的界面Ø控制器控制器(Controller)(Controller)工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态控制器)接受用户请求调用模型响应用户请求选择视图显示响应结果(视图)显示模型状态接受数据更新请求把用户输入数据传给控制器(模型)代表应用程序状态响应状态查询处理业务流程通知视图业务状态更新方法调用事件选择视图业务处理用户请求状态查询通知数据更新 7/26/2024华南师范大学软件学院213、￿Struts————StrutsStruts框架概述框架概述pStruts是一个现成的、优秀的、基于MVC的Web应用框架浏览器Web服务器ActionServletFormBean(模型)JavaBeanEJBStruts-config.xml数据库MessageResouseJSP(视图)(控制器)Servlet/JSP容器Struts框架结构 7/26/2024华南师范大学软件学院223、￿Struts————StrutsStruts框架概述框架概述pStruts是一个现成的、优秀的、基于MVC的Web应用框架。

      浏览器Web服务器ActionServletFormBean(模型)JavaBeanEJBStruts-config.xml数据库MessageResouseJSP(视图)(控制器)Servlet/JSP容器Struts框架结构 7/26/2024华南师范大学软件学院233、￿Struts————StrutsStruts框架概述框架概述pStruts是一个现成的、优秀的、基于MVC的Web应用框架浏览器Web服务器ActionServletFormBean(模型)JavaBeanEJBStruts-config.xml数据库MessageResouseJSP(视图)(控制器)Servlet/JSP容器Struts框架结构 7/26/2024华南师范大学软件学院243、￿Struts————StrutsStruts的程序流程的程序流程JavaBeanJSP页面页面ClientActionActionServletActionForm1.HTTP 1.HTTP 请请求求求求2.2.填充填充填充填充FormBeanFormBean3.3.转发转发HTTPHTTP请请求求求求4.4.调调用用用用ActionFormActionForm5.5.调调用用用用JavaBeanJavaBean6.6.回送回送回送回送ActionForwardActionForward7.7.转发转发HTTPHTTP请请求求求求8. 8.调调用用用用JavaBeanJavaBean9.HTTP9.HTTP响响响响应应Struts-config.xmlStruts的程序流程 7/26/2024华南师范大学软件学院253、￿Struts————Struts1.xStruts1.x实例实例pStruts1.xStruts1.x实例实例(实现用户登录操作)(实现用户登录操作)Ø用户将看到一个登录页面,要求用户输入用户名以及密码Ø如果用户名以及密码都是admin,提示登录成功Ø否则提示登录失败Login.jsplogin_error.jsplogin_success.jsp 7/26/2024华南师范大学软件学院263、￿Struts————Struts1.xStruts1.x实例实例pStruts1.xStruts1.x实例实例(实现用户登录操作(实现用户登录操作))①下载并解压Struts项目Ø从Apache网站下载struts;Ø 将压缩包解压到一个目录,此目录为STRUTS_HOME目录;②安装StrutsØ将STRUTS_HOME/lib目录下的所有.jar文件拷贝到刚创建的web项目的/WEB-INF/lib目录下;Ø配置web.xml,添加Servlet映射配置;③编写Action类、编写ActionForm类 ØAction类处理业务流程;ØActionForm类不是必须的,如果要接收客户端提交的数据时需要;配置struts-config.xml①在struts-config.xml文件中配置Action和ActionForm ;编写相应JSP页面 7/26/2024华南师范大学软件学院273、￿Struts————web.xml web.xml 的配置的配置 actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xml2action*.dostruts-config.xml存放路径在显示层所有以*.do为扩展名提交的URL,都会交由这个Servlet来处理。

      7/26/2024华南师范大学软件学院283、￿Struts————struts-config.xml struts-config.xml 的配置的配置    指定Struts应用中所有使用的ActionForm对象ActionForm对象指定处理相关业务的ActionAction处理完业务后的跳转页面 7/26/2024华南师范大学软件学院293、￿Struts————LoginActionForm.javaLoginActionForm.javapublic class LoginActionForm extends ActionForm {  private String userName;  private String passWord;  public String getUserName() { return userName; }  public void setUserName(String userName) { this.userName = userName; }  public String getPassWord() { return passWord; }  public void setPassWord(String passWord) { this.passWord = passWord; }  } 7/26/2024华南师范大学软件学院303、￿Struts————LoginAction.javaLoginAction.javapublic class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,  HttpServletRequest request, HttpServletResponse response)  throws Exception { String path = "error";  LoginActionForm loginActionForm = (LoginActionForm)form;  String userName = loginActionForm.getUserName();  String passWord = loginActionForm.getPassWord();  if(null != userName && "admin".equals(userName) && null != passWord && "admin".equals(passWord)) {  path = "success";  request.setAttribute("userName", userName);  } else { path = "error"; }  return mapping.findForward(path);  } } 7/26/2024华南师范大学软件学院313、￿Struts————LoginActionLoginAction应用程序的流程图应用程序的流程图LoginAction应用程序的流程图 7/26/2024华南师范大学软件学院323、￿Struts————Struts1.xStruts1.x与与Struts2.x Struts2.x pStruts2同为MVC设计模式的开源框架Ø在Struts2并不是在原有的Struts1.x基础上的升级版本,而是来处另外一个非常有名的MVC框架 WebWork。

      Ø官方描述:pStruts1.x存在的问题:•在表现层技术单一•与Servlet API耦合严重,不便于测试•代码严重依赖Struts API •单元测试困难•令人头痛的ActionFormpStruts2的特点•无需与Servlet API整合,更容易测试•优雅的请求参数封装•灵活的视图技术•丰富的表达式语言•机动,灵活,简单的配置•线程安全的控制器(Action) 7/26/2024华南师范大学软件学院333、￿Struts———— Struts2.x Struts2.x框架结构框架结构 pStruts2框架结构ØStruts2的体系与Struts1.x体系差别非常大,因为Struts2使用了WebWork的设计核心(XWork)在Struts2中使用拦截器来处理用户请求,从而允许用户业务逻辑控制器与Servlet API分离 7/26/2024华南师范大学软件学院343、￿Struts———— Struts2.x Struts2.x框架结构框架结构 pStruts2框架结构ØStruts2的体系与Struts1.x体系差别非常大,因为Struts2使用了WebWork的设计核心(XWork)。

      在Struts2中使用拦截器来处理用户请求,从而允许用户业务逻辑控制器与Servlet API分离1核心控制器FilterDispatcher根椐请求决定调用合适的Action拦截器自动对应用运用通用功能浏览器发送请求234回调用Action上的execute方法5Action的execute()方法处理结果信息输出到浏览器 7/26/2024华南师范大学软件学院353、￿Struts————Struts2Struts2的核心思想的核心思想p仍然是仍然是MVCMVC设计模式设计模式 ØStruts2的控制器由两部分组成–FilterDispatcher–业务逻辑Action ØStruts2提供了丰富的视图展示–JSP–FreeMarker、Velocity–JasperReport等报表类型pAOP(Aspect Oriented Programming)AOP(Aspect Oriented Programming)面向方面编程实现面向方面编程实现 Ø在执行Action的前后Structs2提供了大量拦截器来完成通用功能 7/26/2024华南师范大学软件学院363、￿Struts————补充:面向方面编程补充:面向方面编程AOPAOPpOOPOOP选择对象作为模块的主要单元,将对象与系统的所有行为联系起来对象成为问题领域和计算过程的主要元素Ø问题:存在着许多横切关注点(如安全性检查、日志记录、异常处理等)实现代码和其他业务逻辑代码混杂在一起、降低了模块的可重用性 pAOPAOP简介(也叫面向切面编程)简介(也叫面向切面编程)Ø目标:对业务逻辑的各个部分进行隔离Ø主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等Ø主要意图:将日志记录等代码从业务逻辑代码中划分出来通过对这些行为的分离,将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

      7/26/2024华南师范大学软件学院373、￿Struts————补充:面向方面编程补充:面向方面编程AOPAOPpAOP AOP 与与OOPOOPØ抽象类 — Dog 类ØPoodle 继承了 DogDogPoodleObedient DogØ定义标识为 Obedient Dog的类继承不是所有的 Dogs 都很驯服如果要Obedient Dog 类继承 Dog 类,那么 Poodle 放在这个层次结构中的哪个位置合适呢?继承?pObedientObedient看作一个方面Ø应用到任何一类驯服的 DogØ我们反对以不恰当的方式强制将该行为放在 Dog 层次结构中 7/26/2024华南师范大学软件学院383、￿Struts————Struts2.xStruts2.x拦截器拦截器p拦截器拦截器(Interceptor(Interceptor) )ØStruts2的核心组成部分例如文件的上传和下载、国际化、转换器和数据校验等,Struts2利用内建的拦截器完成ØStruts2文档中对拦截器的解释为:拦截器是动态拦截Action调用的对象;提供了一种机制,使开发者可以定义一个特定的功能模块这个模块可以在Action执行之前或者之后运行也可以在一个Action执行之前阻止Action执行同时也提供了一种可以提取Action中可重用的部分的方式。

      ü拦截器是AOP 的一种实现,底层通过动态代理模式完成 7/26/2024华南师范大学软件学院393、￿Struts————Struts2.xStruts2.x拦截器拦截器pStruts2.xStruts2.x的拦截器的拦截器FilterDispatcherActionProxy类型转换拦截器文件上传拦截器等ActionResult初始化并调用execute方法拦截并处理用户请求,然后到Action的execute方法处理用户请求返回逻辑视图,系统负责将逻辑视图对应的资源显示给用户 7/26/2024华南师范大学软件学院403、￿Struts————Struts2.xStruts2.x实例实例pStruts2.xStruts2.x实例实例(实现用户登录操作(实现用户登录操作))①导入Struts2类库(以struts 2.1.6为例) 文件名说明struts2-core-2.1.6.jarStruts2框架的核心库xwork-2.1.2.jarXwork类库,Struts2在其上构建ognl-2.6.11.jar对象图导航语言,Struts2使用的一种表达式语言freemarker-2.3.13.jarStruts2的UI标签的模板使用FreeMarker编写commons-logging-1.1.jar使用此名来支持Log4j和JDK1.4+的日志Ø将其WEB-INF/lib目录中的JAR拷贝到Project的WEB-INF/lib目录下) 7/26/2024华南师范大学软件学院413、￿Struts————Struts2.xStruts2.x实例实例pStruts2.xStruts2.x实例实例(实现用户登录操作(实现用户登录操作))②在web.xml文件中配置FilterDispatcher struts2.0 org.apache.struts2.dispatcher.FilterDispatcher    struts2.0    /*    7/26/2024华南师范大学软件学院423、￿Struts————Struts2.xStruts2.x实例实例pStruts2.xStruts2.x实例实例(实现用户登录操作(实现用户登录操作))③在开发Actionpublic class LoginAction {private String name;private String password;public String execute() throws Exception {if(this.name.equals(“admin") && this.password.equals(“admin”))return "success";else     return "error";}   setter/getter}实现业务逻辑处理 7/26/2024华南师范大学软件学院433、￿Struts————Struts2.xStruts2.x实例实例pStruts2.xStruts2.x实例实例(实现用户登录操作(实现用户登录操作))④配置struts.xml文件在WEB-INF/classes 录下创建struts.xml文件             /login_success.jsp         /login_error.jsp     对Action类进行配置⑤编写相关JSP文件 3、Hibernate————ORMORM简介简介p对象关系映射(Object Relational Mapping,简称ORM) ØORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

      Ø简单说,是将对象和对象之间的关系对应的到数据库表和表之间的关系p持久化和持久化层Ø持久化,把内存中的数据保存到数据库(如关系数据库)或永久设备(如、硬盘)中持久化持久化数据库数据库存储设备存储设备数据数据对象对象内存内存装载装载持久化原理7/26/2024华南师范大学软件学院44 3、Hibernate————持久化和持久化层持久化和持久化层p持久化和持久化层Ø持久化层,专门负责持久化工作的逻辑层,由它统一与数据库层打交道接受客户端数据,提交业务层处理表示层表示层接受业务层处理结果,布局整理给客户端接受表示层数据,进行业务处理业务逻辑层业务逻辑层通过持久层取得数据,加工处理后送持久层处理最后处理结果返回表示层新增数据持久层持久层修改数据删除数据查找数据连接池管理事务管理缓存管理…数据库数据库数据库层数据库层•不难发现持久层封装了所有与数据库有关的操作和细节7/26/2024华南师范大学软件学院45 3、Hibernate————实体域模型与关系数据模型实体域模型与关系数据模型p实体域模型与关系数据模型 Ø实体域模型是对真实世界物质实体(如学生、老师、商品等)的抽象Ø关系数据模型则是对关系型数据库中关系数据(如表、视图等)的一种静态描述。

      7/26/2024华南师范大学软件学院46City.java字段名称字段名称数据类型数据类型…描述描述cityidInt…城市idprovinedidInt …省份idcitycodeVarchar(20)…城市代号citynameVarchar(40)…城市名称City的数据表•实体域模型示面向对象的,而关系数据模型是面向关系型数据库的他们之间的数据交换需要一个映射过程(对象对象- -关系映射关系映射) 3、Hibernate————ORMORM简介简介p如何进行对象-关系数据库的匹配? 7/26/2024华南师范大学软件学院47Ø使用JDBC手工转换Ø使用ORM(对象关系映射)框架来解决,主流的ORM框架有Hibernate、iBATIS、OJB等优点优点缺点缺点SQL/JDBC成熟,流行,使用DAO模式代码烦杂,可读性差,维护困难等Entity BeanCMP(EJB1.1之后),EJB3不可移植,依赖性强,不可序列化等JDO简单、透明、标准不够成熟Apache OJB性能、稳定性文档资源太少,支持标准太多成负担iBATIS可以控制更多的数据库细节持久层封装不够彻底Hibernate成熟、流行、功能强大。

      并逐渐发展成Java 持久层事实上的标不够透明 3、Hibernate————实体域模型与关系数据模型实体域模型与关系数据模型Ø实体域对象City与关系数据表City之间可以通过Hibernate的映射文件City.hbm.xml进行映射7/26/2024华南师范大学软件学院48                                                            Class元素定义了一个持久化类元素定义了一个持久化类Name指定一个类名,指定一个类名,table指定一个表名指定一个表名Id元素定义了属性到数元素定义了属性到数据库表主键字段的映射据库表主键字段的映射City.hbm.xml 3、Hibernate————HibernateHibernate简介简介pHibernateHibernate简介简介7/26/2024华南师范大学软件学院49Ø一个面向Java环境的对象/关系数据库映射工具;Ø一个轻量级的ORM框架;Ø用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去;Ø独立的持久层框架,不与具体服务器相关;Ø除提供对象关系映射,同时提供了数据查询和获取数据的方法。

      pHibernate Hibernate 的优缺点的优缺点:•不需要编写的 SQL 语句•移植性好•实现了透明持久化•代码测试方便 pHibernate Hibernate 使用使用范围:范围:•针对单个对象进行修改编辑时,适用•对象之间有着很清晰的关系,适用•批量性添加、修改时,不适用•要求使用数据库中特定的功能时,不适用 3、Hibernate————HibernateHibernate体系结构体系结构ØHibernate作为模型层/数据访问层它通过配置文件(hibernate.cfg.xml或hibernate.properties)和映射文件(*.hbm.xml)把java对象或持久化对象(Persistent Object,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作7/26/2024华南师范大学软件学院50应用程序应用程序数据库数据库持久化对象持久化对象Hibernate配置:配置:如:hibernate.cfg.xml或hibernate.propertiesHibernatel体系结构Hibernate映射映射::如:City.hbm.xml 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院51pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSCREATE TABLE REGISTEDUSERS(  USERID     INT                                      NOT NULL,  LOGINNAME  CHAR(200)                 NOT NULL,  PASSWORD1  CHAR(100)                 NOT NULL);ALTER TABLE REGISTEDUSERS ADD ( PRIMARY KEY (USERID)); 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院52pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userpackage com.hibernatedemo;public class User {private int userId;private String name;private String password;    … // 对应getter 和 setter方法}User.java 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院53pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userü创建配置文件 -- User.hbm.xml  User.hbm.xml映射的类映射的表映射字段 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院54pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userü创建配置文件 -- User.hbm.xmlü在Hibernate配置文件中增加映射内容– hibernate.cfg.xmlØmysql  jdbc:mysql://localhost:3306/test  root  com.mysql.jdbc.Driver   org.hibernate.dialect.MySQLDialect  true 数据库的连接数据库的连接URL,,test是数据库名是数据库名数据库用户名数据库用户名数据库用户密码数据库用户密码配置数据库驱动程序配置数据库驱动程序类映射文件类映射文件hibernate.cfg.xml 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院55pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userü创建配置文件 -- User.hbm.xmlü在Hibernate配置文件中增加映射内容Øü编写DAO接口和实现pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)IUserDAOUser validateUser(String,String);UserDAOUser validateUser(String,String);UserDAO.java 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院56pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userü创建配置文件 -- User.hbm.xmlü在Hibernate配置文件中增加映射内容Øü编写DAO接口和实现MySessionFactory.java 3、Hibernate————HibernateHibernate实例实例7/26/2024华南师范大学软件学院57pHibernateHibernate实例(实现用户登录操作)实例(实现用户登录操作)ü用拷贝支持lib和Hibernate应用包到Struts应用的WEB-INF\lib目录下 ü创建数据库表– REGISTEDUSERSü创建创建持久化类 – Userü创建配置文件 -- User.hbm.xmlü在Hibernate配置文件中增加映射内容Øü编写DAO接口和实现ü在Struts的ActionBean中访问DAO接口LoginAction.java 7/26/2024华南师范大学软件学院581.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7. 关闭Session8. 关闭SesstionFactory3、Hibernate————HibernateHibernate工作流程工作流程pHibernateHibernate工作流程工作流程 3、Hibernate————HibernateHibernate工作流程工作流程7/26/2024华南师范大学软件学院59pHibernateHibernate工作流程工作流程启动hibernate构建configuration实例,初始化该实例中的所有变量加载hibernate.cfg.xml文件至该实例(内存)通过hibernate.cfg.xml文件中的mapping节点配置加载*.hbm.xml至该实例(内存)利用configuration实例创建一个工厂类SessionFactory实例SessionFactory类创建连接SessionFactory实例创建事务接口通过session接口提供的各种方法操纵数据库提交数据库事务关闭sessionMySessionFactory.javaConfiguration cfg = new Configuration(); hibernate.cfg.xmlMySessionFactory.javasessionFactory = cfg.buildSessionFactory();MySessionFactory.javasessionFactory.openSession();UserDAO.javaquery=session.createQuery(sql); 3、Spring————SpringSpring简介简介7/26/2024华南师范大学软件学院60pSpring为企业应用的开发提供了一个轻量级的解决方案 Ø目标: 使现有技术更加易用,推进编码最佳实践Ø内容: 依赖注入,AOP实现(声明式事务), DAO/ORM支持,Web集成等p框架的主要优势之一就是其分层架构 Ø由 7 个定义良好的模块组成。

      Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式SpringAOPSpring ORMSpring DAOSpring webSpring contextSpring Web MVCSpring coreSpring框架的7个模块 3、Spring————SpringSpring框架框架7/26/2024华南师范大学软件学院61SpringAOPSpring ORMSpring DAOSpring webSpring contextSpring Web MVCSpring core•提供提供 Spring Spring 框架的基本功能框架的基本功能•主要组件是主要组件是 BeanFactoryBeanFactory,它是工厂模式的实,它是工厂模式的实现现•一个配置文件一个配置文件•向向 Spring Spring 框架提供上框架提供上下文信息下文信息•提供了有意义的异常层提供了有意义的异常层次结构次结构•可用该结构来管理异常可用该结构来管理异常处理和不同数据库供应处理和不同数据库供应商抛出的错误消息商抛出的错误消息•通过配置管通过配置管理特性理特性•集成了面向集成了面向方面的编程方面的编程功能功能•提供了提供了 ORM ORM 的对象的对象关系工具关系工具•为基于为基于 Web Web 的应用的应用程序提供了上下文程序提供了上下文•全功能的构建全功能的构建WebWeb应用程序应用程序的的MVCMVC实现实现Spring框架 3、Spring————工厂模式工厂模式& &单例模式单例模式7/26/2024华南师范大学软件学院62pSpring中大量使用两种设计模式:Ø工厂模式 Ø单例模式p工厂模式Ø将调用者从被调用者的实现逻辑中分离出来Ø只关心被调用者必须满足的规则(接口),不必关心实例的具体实现过程。

      pSpring 容器是实例化和管理全部bean 的工厂, Spring 默认将所有的bean设置成单例模式Øbean无须自己完成单态模式(有相同 id 的bean请求都将返回同一个共享实例)Ø单例模式可大大降低Java对象在创建和销毁时的系统开销Spring倡导"面向接口编程" ) 3、Spring————SpringSpring对单例与工厂模式的实对单例与工厂模式的实现现7/26/2024华南师范大学软件学院63p使用Spring时,无须自己提供工厂类因为Spring容器是最大的工厂public interface Person{      public String sayHello(String name);     public String sayGoodBye(String name);}Person接口public class American implements Person{   public String sayHello(String name){ return name + ",Hello";}   public String sayGoodBye(String name){return name+",Bye";}}American类public class Chinese implements Person{   public String sayHello(String name){ return name + “,你好";}   public String sayGoodBye(String name){return name+“,再见";}}Chinese类           3、Spring————SpringSpring对单例与工厂模式的实对单例与工厂模式的实现现pSpring使用配置文件管理所有的bean,其配置文件中bean由Spring工厂负责生成和管理。

      7/26/2024华南师范大学软件学院64 Public class SpringTest{   public static voidmain(String[]args){        ApplicationContextctx =           new FileSysternXmlAppl工cationContext"bean.xml");        Person p = null;        p = (Person)ctx.getBean("chinese");        //执行chinese实例的方法        System.out.println(p.sayHello("wawa"));        System.out.println(p.sayGoodBye("wawa") ) ;        //执行american实例         p =(Person)ctx.getBean("american");           System.out.println(p.sayHello("wawa"));         System.out.println(p.sayGoodBye("wawa")) ;    }}实例化实例化Spring容器容器通过通过Spring上下文获得上下文获得chinese实例实例wawa,你好你好wawa,再见再见wawa,Hellowawa,Bye7/26/2024华南师范大学软件学院653、Spring————SpringSpring对单例与工厂模式的实对单例与工厂模式的实现现运行结果: 3、Spring————SpringSpring对单例与工厂模式的实对单例与工厂模式的实现现7/26/2024华南师范大学软件学院66p上面的例子中:Ø除主程序部分外,代码并未出现Spring特定的类和接口。

      Ø调用者代码(也就是测试用的主程序部分)仅仅面向Person接口编程,而无须知道实现类的具体名称Ø同时,可以通过修改配置文件来切换底层的具体实现类Ø由于工厂无须多个实例,因此工厂应该采用单态模式设计其中Spring的上下文(即Spring工厂)被设计成单例模式pSpring工厂模式,不仅提供了创建bean的功能,还提供对bean生命周期的管理最重要的是还可管理bean与bean之间的依赖关系 3、Spring————依赖注入依赖注入7/26/2024华南师范大学软件学院67p依赖注入Ø也叫控制反转;Ø一种解耦方式;ØSpring的核心机制;Ø使Spring的bean以配置文件组织在一起,而不是以硬编码的方式棉合在一起p区分Ø在传统的程序设计过程•由调用者来创建被调用者的实例;Ø在依赖注入的模式下•创建被调用者的工作不再由调用者来完成,由Spring容器来完成,然后注入调用者ü所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中 3、Spring————理解依赖注入理解依赖注入7/26/2024华南师范大学软件学院68p理解依赖注入以一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)为例:无有社会分工原始社会原始社会Java程序里的调用者自己创建被调用者需找到工厂,购买斧子工业社会工业社会简单工厂设计模式,无须关心被调用者具体的实现无须定位工厂,“坐等”社会提供共产社会共产社会调用者无须关心被调用者的实现,等待Spring依赖注入即可 3、Spring————为何要使用为何要使用SpringSpring7/26/2024华南师范大学软件学院69p优势Ø降低组件之间的耦合度,实现软件各层之间的解耦。

      Ø可以使用容器提供的众多服务•事务管理服务、消息服务等等•不再需要手工控制事务Ø容器提供单例模式支持•开发人员不再需要自己编写实现代码Ø容器提供了AOP技术•易于实现如权限拦截、运行期监控等功能ØSpring对于主流的应用框架提供了集成支持•如:集成Hibernate、JPA、Struts等,便于应用的开发ControllerServiceDAO 7/26/2024华南师范大学软件学院703、Spring————Spring MVCSpring MVC框架结构框架结构DispatcherServletHandlerMappingHandlerAdapterHandlerView
 
(JSP/XML/PDF,...)23ModelAndView54ViewResolver6Model781参考《Spring 3.x企业应用开发实战》 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院71p登录模块实例 p实例设计(如右图)Ø持久层 •User类、UserDao类Ø业务层•UserService类Ø展现层•loginController类、login.jsp、main.jsp。

      登录页面欢迎页面Web控制用户名/密码错误登录成功页面流程图实例框架结构 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院72p持久层 设计public class User implements Serializable{private int userId;private String userName;private String password;             ….setter/getter方法}User.javaØ持久化类User对应数据库表REGISTEDUSERS表 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院73p持久层 设计public class UserDao {       private JdbcTemplate jdbcTemplate;       public int getMatchCount(String userName, String password) {                          String sqlStr = " SELECT count(*) FROM registedusers "+ " WHERE loginname =? and password1=? ";     return jdbcTemplate.queryForInt(sqlStr, new Object[] { userName, password });}       public User findUserByUserName(final String userName) {String sqlStr = " SELECT userid,loginname "+ " FROM registedusers WHERE loginname =? ";              final User user = new User();jdbcTemplate.query(sqlStr, new Object[] { userName },new RowCallbackHandler() {             public void processRow(ResultSet rs) throws SQLException {                                                                             user.setUserId(rs.getInt("userid"));        user.setUserName(userName);}});return user;}}UserDAO.java根据用户名和密码获取匹配的用户数根据用户名和密码获取匹配的用户数根据用户名获取根据用户名获取User对象对象 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院74pSpring中装配DAO接口…..                          …..applicationContext.xml 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院75p业务层@Servicepublic class UserService {        @Autowired        private UserDao userDao;         public boolean hasMatchUser(String userName, String password) {int matchCount =userDao.getMatchCount(userName, password);return matchCount > 0;      }             public User findUserByUserName(String userName) {return userDao.findUserByUserName(userName);      }}UserService.java通过注解,将通过注解,将UserService标注为一个服务层的标注为一个服务层的Bean注解注解DAO层的层的Bean根据用户名和密码查询是否存在用户根据用户名和密码查询是否存在用户üUserService调用Dao完成业务逻辑操作。

      根据用户名获取根据用户名获取User对象对象 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院76pSpring中装配Service applicationContext.xml完成完成service的的Spring注解注解配置事务管理器配置事务管理器 以以AOP的方式时的方式时service包下的类添加事务增强,包下的类添加事务增强,即使其工作于事务环境中即使其工作于事务环境中 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院77p展示层 ——配置web.xml           contextConfigLocation           classpath:applicationContext.xml             org.springframework.web.context.ContextLoaderListener        baobaotao                           org.springframework.web.servlet.DispatcherServlet                     3           baobaotao          *.htmlWeb.xml 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院78p展示层 ——LoginController控制页面跳转public class LoginController{private UserService userService;  @RequestMapping(value = "/index.html")public String loginPage(){return "login";}public ModelAndView loginCheck(HttpServletRequest request,LoginCommand loginCommand){        boolean isValidUser =            userService.hasMatchUser(loginCommand.getUserName(),                        loginCommand.getPassword());        if (!isValidUser) {     return new ModelAndView("login", "error", "login error");         } else {      User user = userService.findUserByUserName(loginCommand.getUserName());       return new ModelAndView("main");       }      } }LoginController.java 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院79p展示层 ——baobaotao-servlet.xml配置视图解析器….. baobaotao-servlet.xml 3、Spring————Spring MVCSpring MVC实例实例7/26/2024华南师范大学软件学院80p运行图示 4、其他开发框架介绍————PlayPlay框架框架7/26/2024华南师范大学软件学院81pPlay框架Ø一个full-stack(全栈的)Java Web应用框架;Ø包括一个简单的无状态MVC模型;Ø具有Hibernate的对象持续特性;Ø一个基于Groovy的模板引擎等等。

      pPlay框架的关键特性•一个非常简单的开发周期,此框架自动编译和重新装载源文件的任何改变•智能捆绑HTTP参数到Java方法参数•基于Apache Mina的快速HTTP服务器•一个基于Groovy的强大的模板引擎,具有多层继承,定制用户标签的能力•优秀的错误报告功能:当发生异常,此框架会直接显示出错代码,甚至是模板代码 4、其他开发框架介绍————JFinalJFinal框架框架7/26/2024华南师范大学软件学院82p极速WEB+ORM框架:JFinalØ基于 Java 语言的极速 WEB + ORM 框架;Ø其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、RestfulpJFinal框架的主要特点•MVC架构,设计精巧,使用简单•遵循COC原则,零配置,无xml•独创Db + Record模式,灵活便利•ActiveRecord支持,使数据库开发极致快速•自动加载修改后的java文件,开发过程中无需重启web server•AOP支持,拦截器配置灵活,功能强大•多视图支持,支持FreeMarker、JSP、Velocity•强大的Validator后端校验功能•功能齐全,拥有struts2的绝大部分功能 4、其他开发框架介绍————其他框架其他框架7/26/2024华南师范大学软件学院83pJBoss Seam Ø一个Java EE5框架;Ø通过把JSF与EJB3.0组件合并在一起,从而为开发基于Web的企业应用程序提供一个最新的模式。

      ØSeam可以让你把EJB组件直接绑定到JSF页面ØSeam能够统一和集成现有的开源技术集成如Facelets、Hibernate、jBPM、Drools、Groovy、Java Portlets、BPM、AJAX、iText等p Expresso FrameworkØ一个基于开放标准的J2EE体系框架,可以让开发者专注于应用程序逻辑;Ø是一个可扩展Java Server应用程序框架组件库,用于创建基于开放标准的数据库驱动的Web应用程序;ØExpresso和Apache Jakarta Struts集成在一起,后者强调表达和应用的配置并为Expresso提供了一个功能强大的标签库 5、书籍推荐《《轻量级轻量级Java EEJava EE企业应用实战:企业应用实战:Struts2 +Spring+HibernateStruts2 +Spring+Hibernate整合开整合开发发》》作者:李刚作者:李刚 著著《《Spring 3.x企业应用开发实战企业应用开发实战》》 作者:陈雄华作者:陈雄华 谢谢观看谢谢观看 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.