企业级应用开发济南大学信息学院刘鹍liukun@ujn.edu.cn回顾:Struts2、Hibernate和Spring整合应用₪分层架构模式₪添加Spring开发能力₪添加Hibernate开发能力₪生成Hibernate所需的POJO类和映射文件■映射文件在Spring配置文件中注册₪开发DAO层■继承HibernateDaoSupport类■super.getHibernateTemplate()■Spring配置文件中注入sessionFactory₪开发Service层■依赖注入₪实现WEB层■Action类(action类+spring配置文件+struts配置文件)■过滤器(过滤器类+struts配置文件)■数据校验(xml+命名+位置)■分页(Pager类+DAO层+Action层+JSP)第3讲基于EJB的企业级信息系统开发技术第7章JSF应用第8章开发EJB3.0应用第9章JAVA持久API第7章JSF应用第7章JSF应用₪ServletAPI■请求/响应模型1.收集HTML页信息2.servlet执行业务逻辑3.在HTML上显示结果HTMLServlet业务逻辑第7章JSF应用₪ServletAPI■缺点维护问题:HTML嵌入servlet代码第7章JSF应用₪JavaServerPages■体系结构优于ServletAPI■模型-视图-控制器(MVC)模式:表示层与业务逻辑层分离■代码重用■易于维护JSPJSPJSPServletJavaBeanEJBWeb服务视图控制器模型第7章JSF应用₪Struts2■Struts是MVC设计模型的开放源代码■Struts是通过一组Java类和JSP标签库实现的■Struts有助于管理Web应用开发和维护,加快开发过程第7章JSF应用₪Web应用开发₪截至目前,JavaWeb技术已被公认为具有:■移植性■扩展性■灵活性■可用于构建大型企业解决方案₪但不适于■快速应用开发(RAD)■缩短学习过程■构建中小企业(SMB)解决方案第7章JSF应用——学习要点₪1.JSF简介₪2.第一个JSF程序₪3.ManagedBean₪4.JSF标签第7章JSF应用JSF简介7.1JSF简介₪JavaServerFaces:■JavaServerFaces(JSF)技术是构建Web应用的框架■JSF将Web应用框架开发推进了一步,以ServletAPI和JSP技术为基础功能性体系结构更理想,RAD,便于维护ServletAPIJSP/ServletAPIJSFStruts7.1JSF简介₪JSF增强了JSP/ServletAPI■更多内置Java类■更多标签库■采用IBM工具提高操作能力ServletAPIJSP/ServletAPIStrutsJSF7.1JSF简介₪JSF是一种开放标准:■JSR(JavaSpecificationRequests)127■JavaCommunityProcess网站:www.jcp.org■JSF包括在JavaEE中(以前称为J2EE)₪JSF目标■提高J2EEWeb应用开发速度(RAD)■拖放组件■事件驱动模型■消除大量手工编码■便于与数据源集成■非J2EE程序员易于使用7.1JSF简介₪JSF与Struts■JSF与Struts功能上有部分重叠■JSF是一个更完整的模型■开发团队对Struts和JSF有不同的设计目标■IBM工具和中间件都支持JSF与Struts,但更侧重JSF数据库JavaBeanFacesServletEJB模型视图控制器JSPs7.1JSF简介₪JSF特点:■可以通过一组标准的、可重用的服务器端组件来创建用户界面。■提供了一组JSP标签以访问这些组件。■在表单重新显示时,透明的保存状态信息并重新填充表单。■提供了实现自定义组件的框架。■封装了事件处理和组建呈现,以便可以使用标准的JSF组件或自定义组件来支持除HTML之外的标记语言。■让工具开发商可以开发针对标准WEB应用开发程序框架的IDE。7.1JSF简介₪JSF技术组成■一组用于表示用户界面组件并管理其状态、处理事件和验证输入的JavaAPI,这些API支持国际化和可访问性。■一个用于JSP页面中表示JSF组件的自定义标签库。补充:典型的JavaEE应用系统层次结构补充:JavaEE容器₪基于组件和平台独立的JavaEE使分层的企业分布式应用程序容易开发,因为各种应用的功能逻辑被封装在可重用的JavaEE组件中。另外JavaEE服务器以容器的形式为所有JavaEE组件提供底层公共服务,因此您不必再为这些底层公共服务伤脑筋,而可以专注于解决应用系统的商业问题。₪容器(Container)是组件和支持组件功能的底层特定平台(如数据库、分布式的网络环境及Java虚拟机等)之间的接口。在运行Web组件、企业Bean组件或者JavaEE客户端组件之前,您必须将它们装配到一个JavaEE应用程序中,并部署它们到容器中。补充:JavaEE容器₪JavaEE的容器类型补充:JavaEE应用打包与部署₪JAR/WAR/EAR文件格式₪JAR是Java技术中的一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用。在JAR中包含特殊的文件,如manifests和部署描述符,用来指示工具如何处理特定的JAR。补充:JavaEE应用打包与部署₪JAR/WAR/EAR文件格式₪WAR和EAR文件也是Java技术中的一种与平台无关的文件格式,也同样允许将许多文件组合成一个压缩文件。₪与JAR文件不同的是,WAR文件除了可以组合JSP文件和servlet类文件等web组件程序文件之外,还可以包含GIF文件、静态HTML文件等多种其它类型的文件。₪EAR文件则主要用于由多个JavaEE应用模块所构成的一个完整应用程序的打包,其可以包含多个JAR文件和WAR文件。₪从打包粒度上讲,按由小至大的顺序排列,分别是JAR、WAR和EAR。补充:JavaEE应用打包与部署₪JAR、WAR和EAR文件的一般目录结构补充:JavaEE应用开发角色₪企业Bean开发者提供企业Bean的EJBJAR文件₪Web组件开发者的工作任务是提供WAR文件₪JavaEE应用程序客户端开发者也提供一个JAR文件₪应用程序组装者将从组件开发者获得的组件文件装配成一个JavaEE应用程序EAR文件。₪应用程序部署者和系统管理员配置和部署JavaEE应用程序,在程序运行时管理计算机和网络结构,并且监控运行时环境。包括设置事务控制、安全属性和指定数据库连接。补充:JavaEE应用服务器补充:JavaEE应用服务器₪SunGlassFish₪金蝶Apusic₪JBoss第8章开发EJB3.0应用8.1EJB3.0概述8.2会话Bean8.3消息驱动Bean8.1EJB3.0概述₪EnterpriseJavaBeans(EJB)是一种服务器端的软件组件模型,是J2EE的基础和最重要的部分。如今开发电于商务平台已大量使用组件技术,这是因为组件技术提供了服务器上的自治、企业级和分布式功能,并帮助开发者在不同颗粒度级别上定义和封装系统功能。8.1.1传统的EJB₪引入EnterpriseJavaBeans(EJB)是为了构建分布式组件。最初,该技术承诺可以解决CORBA的所有问题并降低其复杂性。作为J2EE的核心,EJB经历了几次较大的修订,并加入了许多特性,因而变得臃肿起来。随着EJB规范的相继发布,它还变得越来越复杂了。由于其复杂性和本身庞大的体系,传统的EJB技术被喻为一头笨重的大象。理解分布式₪EJB分布式特点:8.1.2EJB3.0简介₪Domorewithlesswork——JavaEE5的正式宣言₪在JavaEE5中采用了EJB3.0技术规范实现的EJB技术在这方面作出了改进的努力。₪EJB3.0减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)回调方法的实现,并且降低了实体Bean及O/R映射模型的复杂性。₪EJB3.0规范与JavaPersistence1.0的规范紧密结合,借鉴了轻量级企业数据对象的很多优点,将JavaPersistence1.0的规范运用到EJB3.0的EntityBean中,大大提高了EntityBean的开发效率,也使EntityBean更加通用、简洁、轻巧。₪32+18.1.3EJB3.0中的Bean类型₪EJB3.0中的组件分为三个主要类别:■会话Bean■消息驱动Bean■实体Bean₪根据Bean处理状态、事务和持久性的方式这些类别还可以进一步细分。■会话Bean可分为无状态会话Bean和有状态会话Bean■实体Bean可分为CMP(ContainerMangementPersitence)方式的实体Bean和BMP(BeanMangementPersitence)方式的实体Bean。第8章开发EJB3.0应用8.1EJB3.0概述8.2会话Bean8.3消息驱动Bean8.2会话Bean₪8.2.1会话Bean的生命周期₪8.2.2无状态会话Bean₪8.2.3有状态会话Bean₪8.2.4会话Bean实例₪8.2.5将会话Bean发布为web服务8.2.1会话Bean的生命周期₪如果是无状态无状态sessionbean,其生命周期如下:■1)当bean实例不存在时,容器调用bean类的newInstance()方法,开始bean的生命周期。■2)接着,容器调用bean的setSessionContext()方法,进而调用ejbCreate()方法。此时,bean就创建完毕,其方法可供调用了。■3)当容器不需要该bean实例的时候,容器调用bean的ejbRemove()方法,删除该实例。8.2.1会话Bean的生命周期₪而有状态sessionbean的生命周期则复杂一些,因为涉及到钝化、激活和事务,其生命周期如下:■1)当客户调用create(args)时,容器调用newInstance()方法,剩下来的创建过程同无状态sessionbean。■2)有状态sessionbean的方法执行分为事务与非事务两种情况。■3)钝化与激活。■bean长久没有被操作时,容器会决定该bean是否应该被钝化。■钝化后一段时间仍然没有被操作,容器会将其从存储介质中删除。■若钝化后被调用,容器会激活该bean,让其重新载入内存。■4)当容器不需要该bean实例的时候,容器调用ejbRemove()方法,删除该实例。8.2.2无状态会话Bean₪无状态会话Bean是这样一种EJB,其服务的业务过程只需要单个业务方法即可完成。由于它们不需维护客户多个方法调用间的会话状态,因此它是无状态的。₪在每次方法调用结束后,EJB容器可能会销毁无状态会话Bean实例,或者实例化新的实例,或者清除掉上次方法调用中的相关信息。当然,EJB容器还可能保留前一会话Bean实例,并且供其他所有客户使用,从而实现同一会话Bean实例的重用,至于具体的实现策略则与具体EJB容器相关。8.2.3有状态会话Bean₪有状态会话Bean是这样一种EJB,即其服务的业务过程能够延伸到多个方法请求或者事务中。为完成这种业务过程,有状态会话Bean需要为单个客户保存状态信息。如果在方法调用期间有状态会话Bean的状态发生改变,则这种改变必须反映到同一客户的随后调用中。8.2.4会话Bean实例₪在EJB3.0规范中,写一个无状态会话Bean(StatelessSessionBean)只需要为一个普通的Java类加上@Stateless注释(annotation)就可以了。这个Bean可以实现某个业务接口(BusinessInterface)也可以不实现它。8.2.5将会话Bean发布为web服务₪在EJB2.1就规定了无