资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,中间件技术,中间件技术,胡晓军,课程内容,概述,J2EE,架构基础,Servlet,、JSP、EJB,开发,J2EE,应用部署,J2EE,应用开发架构,实例,2,软件开发技术的发展,基于主机的系统,两层的,Client/Server,系统,三层,(,n,层),体系架构,表示层,业务逻辑层,数据层,基于,Web,的三层,(,n,层),体系架构,3,中间件技术,最早具有中间件技术思想及功能的软件是,IBM,在60,年代开发的,CICS(Customer Information Control System)。80,年代初期,,Sun Microsystems,开发了一种最早的中间件,作为其开放网络体系结构的一部分,这种中间件是基于,RPC,协议的。但由于,CICS,不是分布式环境的产物,而,Sun Microsystems,开发的不是完整的中间件产品,因此人们一般把,Tuxedo,作为第一个严格意义上的中间件产品,,Tuxedo,是在,1984,年由,AT&T,的贝尔实验室开发完成的。到,90,年代,中间件技术得到了巨大的发展和广泛的应用,出现了大量具有广泛影响的中间件产品,如,OMG,的,Corba,、Microsoft,的,DCOM/COM+、IBM,的,MQS,等。,4,中间件技术,中间件是基础软件,处于操作系统(或网络协议)与分布式应用之间,从而屏蔽操作系统(或网络协议)的差异,实现分布式异构系统之间的互操作。目前,对中间件还没有形成一个统一的定义,比较公认的,IDC,的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。,5,中间件技术,分类:,消息中间件,(,MOM:Message-Oriented Middleware),数据库中间件,(,Database Middleware),远程过程调用中间件(,RPC:Remote Process Call),对象请求代理中间件,(,ORB:Object Request Broker),事务处理中间件,(,TP Monitor:Transaction Process Monitor),J2EE,中间件,6,企业级应用的要求,分布式,可移植,面向,Web,体系,满足企业计算要求,一致性,事务性,安全性,好的特性,可伸缩,可扩展,易维护,遗留系统集成,以上要求需要一个良好的基础架构来支持,7,企业级应用环境,8,什么是,J2EE?,Java 2 Platform,Enterprise Edition(J2EE),Open and standard based platform for developing,deploying and managing n-tier,Web-enabled,server-centric,and component-based enterprise applications,运用,Java,技术开发企业应用的标准,包括了,多层应用开发模型,开发平台,-,APIs,和服务,测试软件包,参考实现,将所有,Sun,的企业技术集合在一个体系结构下的平台,特定版本下的,EJB,Servlet,JSP,Java Web Server,JNDI,JDBC,JTA,JMS,JavaMail,CORBA,9,Java 2 Platform,10,J2EE,可以提供什么,分布式、可移植构件的框架,简化服务器端中间层构件的设计,为构件和应用服务器提供标准,API,11,J2EE,可以为开发者和用户带来,更短的开发时间,可重用组件,JSP,EJB,自由的选择,基于开放的标准,简化的连接,XML,JDBC,RMI-IIOP,Web Service,12,J2EE,技术架构,任何平台,Java,虚拟机,J2EE Framework,安全,组件,组件,组件,组件,JCA,ebXML,JTA,JMS,13,Browser,Servlet,orJSP,Containers,EJB Server,B,C,HTTP,EntityBean,HOME,REMOTE,SessionBean,HOME,REMOTE,Data,A,Data,JDBC,RMI/IIOP,JDBC,AppServer,J2EE,应用体系结构,14,J2EE,是端到端的解决方案,15,N,层,J2EE,体系架构,16,J2EE,主要,技术概览,展示层,ServLet,/JSP,中间层,EJB,中间层可用的企业服务,事务服务,JTA,目录服务,JNDI,消息服务,JMS,异步组件,Message-Driven EJB,数据层,-,JDBC,远程调用,RMI/IIOP,使用现有资源,-,JCA,17,J2EE 1.4 Contents,18,.,Net,与,J2EE,的比较,WS-I,Windows,CLR,.NET,安全,适配器,编排服务,企业服务,消息队列,Linux,JVM,J2EE,Security,JCA,ebXML,JTA,JMS,19,Web,架构,:,J2EE,vs,.NET,表示层,业务逻辑层,数据层,J2EE,CLR,.,NET Assembly,ADO.NET,(,可使用,COM+,服务,;,比如事务,),Web,表单,Server,控件,Code-Behind,ASP.NET,IIS,JavaBeans,EJBs,JSP,Servlets,可运行于大多数主要应用及,Web,服务器,支持大多数数据库,(,通过,JDBC,驱动程序,),J2SE/EE,JDBC(,事务使用,JTA),.NET,SQL Server,Oracle,DB/2,etc.,SQL Server,Oracle,DB/2,etc.,状态,:,ASP.NET Session,.NET,数据缓存,状态,:,封装于,EJB,中,也可在,Web Sessions,中,20,J2EE/.NET,主要技术比较,JDBC,JTA,JNDI,JMS,JavaMail,RMI/IIOP,JAF,ADO.NET,.NET Transaction,Active Directory,.NET Messaging,SmtpMail,Web Service/,Remoting,.NET JIT,21,技术的成熟性,Microsoft,J2EE,1996,1997,1998,1999,2000,2001,MSXML,JAXP,ASP,JSP,MTS/COM+,EJB,ODBC,JDBC,Mar 1992,ADSI,JNDI,QC,MDB,LCE,MMC,WinDNA,J2EE,MSMQ,JMS,VS.Net,.Net,22,J2EE,的移植性与互操作性,理论上,J2EE,应用可以采用多个厂商的产品,只要符合,J2EE,的标准,实际情况,J2EE,标准不完整,如,Web Service,J2EE,的技术需改进,如,EJB,各厂商发展各自的技术,不同产品很难协同和移植,J2EE,可选择同一厂商支持的不同操作系统,23,.,Net,的移植性与互操作性,理论上,.,Net,应用可移植到任何平台,CLS,提交给标准化组织,只要支持,CLR,实际情况,只有,Windows/Free BSD,.Net,支持,Web Service,可以使用任何平台运行的,Web Service,任何平台可使用,.,Net Web Service,24,技术比较结论,.,Net,和,J2EE,应用有着相似的架构,.,Net,和,J2EE,有相应的主要技术,.,Net,所有技术来自,Microsoft,J2EE,的技术有多个厂商的实现,.,Net,和,J2EE,可以满足大多数应用的需求,主要的差别不在技术的可行性上,开发效率,性能,成本,稳定性,25,开发工具,JBuilder,商用,功能完备,Eclipse,Open Source,插件丰富,myEclipse,版本管理,CVS,26,J2EE,应用开发,编写和编译组件代码,Servlet,JSP,EJB,编写组件的部署描述符,把组件装配成可部署的软件包,将软件包部署到,J2EE,应用服务器上,27,部署描述符,提供容器如何管理和控制,J2EE,组件行为的操作指令,事务性,安全性,持久性,通过配置实现组件行为的定制,(,不需要通过代码进行定制,),XML,文件,使代码具有可移植性,28,J2EE,开发角色,J2EE,角色组成,开发工具商,:提供组件开发工具、应用程序集成工具、应用程序部署工具、界面编辑工具。,应用服务器提供商,:负责设计和开发,J2EE,应用服务器,(,依据,J2EE,规范,),应用开发人员,:,负责开发组件、写部署描述文件、设计界面,(,显示数据,),应用集成人员,:,负责将各种界面、组件、描述文件、驱动程序、其他属性文件集成,部署人员,:负责将,J2EE,集成文件部署的应用服务器,系统管理员,:负责调整服务器的运行参数、监视服务器的运行情况,29,应用服务器介绍,应用服务器是非常重要的企业软件,为现代业务系统提供了应用基础结构。,应用服务器源自支持与其它系统共享数据和资源的应用,以及为,Web,页面和其它用户界面生成动态信息的需求。,它在,Web,服务器与底层应用和数据库之间形成了新的功能和服务层,30,应用服务器实现的功能,负载均衡,故障容错,Web,服务,网络透明,遗留集成,事务管理,安全性,消息,多线程,持久性,数据库连接,资源合并,开发、测试和封装功能,31,J2EE Containers&Components,32,容器与组件,容器处理,组件处理,一致性,安全性,可获得性,可伸缩性,事务性,分布性,生命周期管理,(持久性),表示,JSP,Servlet,Applet,业务逻辑,EJB,数据访问逻辑,EJB,应用系统访问,Web service,33,应用服务器产品,BEA,WebLogic,IBM,WebSphere,Sun Java System Application Server,Oracle 9i/AS,JBoss,Tomcat(,不支持,EJB),Resin,34,Web,服务器模型,/,CGI/,Servlet,Web,服务器模型,CGI/,Servlet,Server side module,isapi,mod_,perl,Server side script,php,asp,jsp,35,Servlet,Servlet,是,Java,技术对,CGI,编程的回答。,Servlet,程序在服务器端运行,动态地生成,Web,页面。与传统的,CGI,和许多其他类似,CGI,的技术相比,,Java,Servlet,具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。,高效,方便,可移植性好,节省投资,36,Servlet,开发,如果某个类要成为,Servlet,,,则它应该从,HttpServlet,继承,根据数据是通过,GET,还是,POST,发送,重载,doGet,、,doPost,方法之一或全部。,doGet,和,doPost,方法都有两个参数,分别为,HttpServletRequest,类型和,HttpServletResponse,类型。,HttpServletRequest,提供访问有关请求的信息的方法,例如表单数据、,HTTP,请求头等等。,HttpServletResponse,除了提供用于指定,HTTP,应答状态(,200,404,等)、应答头(,Content-Type,Set-Cookie,等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的,PrintWriter,。,对于简单的,Servlet,来说,它的大部分工作是通过,println,语句生成向客户端发送的页面。,必须导入,java.,io,包(要用到,PrintWriter,等类)、,javax,.,servlet,包(要用到,HttpServlet,等类)以及,javax,.,servlet,.http,包(要用到,HttpServletRequest,类和,HttpServletResponse,类)。,doGet,和,doPost,这两个方法是由,service,方法调用的,有时你可能需要直接重载,service,方法,比如,Servlet,要处理,GET,和,POST,两种请求时,37,JSP Technology,JavaServer,Pages(JSP),是一种实现普通静态,HTML,和动态,HTML,混合编码的技术。,JSP,并没有增加任何本质上不能用,Servlet,实现的功能。但是,在,JSP,中编写静态,HTML,更加方便,不必再用,println,语句来输出每一行,HTML,代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行,HTML,设计,同时留出供,Servlet,程序员插入动态内容的空间。,JSP,一般在,Web,服务器端被编译成,Servlet,后执行,通过定制的,Tag,实现扩展,38,JSP Constructs 1,JSP,文件有固定的文件名后缀,.,jsp,注释,Declaration,Expression,向,Response,流中输出数据,类似于在浏览器中执行,print,在表达式语句后面不能有分号,Scriplets,包含,java,代码,39,JSP Constructs 2,The value is:,Value is empty,所有,JSP,页面中都隐含存在几个固有的对象,“,request”Browsers Request Object,Use to get HTTP headers,length etc.,“response”-HttpResponse Object,40,JSP Constructs 3,“,session”internal HttpSession Object,“pageContext”,“application”,“out”,same as,“config”servlet configuration,“page”,“exception”,JSP Directives,是针对,JSP,的指示,41,JSP Constructs 4,不会产生任何输出,“,page”directive,通常用来引入,java,类的路径,“,include”directive,用来包含一些静态文件,“,taglib”,列出标签库描述文件的位置,在使用特定标签库的时候需要,42,在,Web,应用中使用,Java Beans,一般用来实现数据传递和业务组件,与,Java Beans,在,Swing,和,AWT,中的用法相似,必须没有构造函数或者构造函数没有参数,每个,Bean,属性都必须有,setter,和,getter,方法,JSP,标签也使用,Java Bean,43,JSP Actions,JSP actions,是一些会影响输出流的特殊标签,通常用在,Java Bean,上,常用的,JSP action,以下代码用来在输出流中显示,student bean,的,lastName,属性,44,JDBC,提供访问关系型数据库的标准,Java API,使用,SQL,对于,Java,编程,API,的实现由各厂商实现,针对不同数据库编写不同的驱动程序。,45,JDBC,的目标,SQL-Level,100%,纯,Java,简单,高效,利用现有的数据库技术,提供多种方法简化不同功能需求的代码,46,JDBC,体系架构,Application,JDBC,Driver,Java,代码调用,JDBC,库,JDBC,装载驱动,驱动与特定数据库连接,可以使用多个驱动,也可以使用多个数据库,可以在不修改程序代码的情况下更换要使用的数据库,47,JDBC Drivers,Type I:“Bridge”,Type II:“Native”,Type III:“Middleware”,Type IV:“Pure”,48,JDBC API,JDBC,的实现类在,java.,sql,包中,需要在程序中通过,import,语句引入,49,DriverManager,DriverManager,试用各种驱动,使用第一个可以正确使用的驱动,一个驱动类装载时,自动在,DriverManager,中注册,Class.,forName,(“,org.,gjt,.mm.,mysql,.Driver,”);,Connection c=,DriverManager,.,getConnection,(.);,50,JDBC,对象类,DriverManager,装载、选择驱动,Driver,连接实际数据库,Connection,连接数据库的对象,Statement,执行独立的,SQL,语句,ResultSet,Statement,返回的结果集,51,JDBC,类的使用,DriverManager,Driver,Connection,Statement,ResultSet,52,JDBC URL,jdbc,:,subprotocol,:,source,不同的驱动有不同的,URL,写法,jdbc,:,odbc,:,DataSource,例如,jdbc,:,odbc,:,Northwind,jdbc,:,mysql,:/,host:port/database,例如,jdbc,:,mysql,:/,localhost,/accounting,53,DriverManager,Connection,getConnection,(String,url,String user,String password),与给定的,JDBC URL,连接,并使用,user,和,password,参数,可能产生,java.,sql,.,SQLException,返回一个,Connection,对象,54,Connection,Connection,对象表示和一个特定数据的连接会话,SQL,语句在,Connection,环境里执行并得到返回结果,可以创建到一个数据库的多个,Connection,连接,在,Connection,中有一些方法能够得到数据库的,metadata,信息,如数据库中表结构和字段属性,在,Connection,还有保证数据库事务的方法,55,获得一个,Connection,String,url,=“,jdbc,:,mysql,:/,localhost,/test;,try,Class.,forName,(org.,gjt,.mm.,mysql,.Driver);,Connection con=,DriverManager,.,getConnection,(,url,”root”,”root”);,catch(,ClassNotFoundException,e),e.,printStackTrace,();,catch(,SQLException,e),e.,printStackTrace,();,56,Statement,Statement,对象用来执行,SQL,命令并获取相应的结果,Statement,对象的主要方法,ResultSet,executeQuery,(String),Execute a SQL statement that returns a single,ResultSet,.,int,executeUpdate,(String),Execute a SQL INSERT,UPDATE or DELETE statement.Returns the number of rows changed.,boolean,execute(String),Execute a SQL statement that may return multiple results.,57,ResultSet,ResultSet,用来访问,Statement,对象执行后得到的数据结果集,每个,Statement,每次只能打开一个,ResultSet,数据库表中的记录按顺序获取,ResultSet,对象维护一个指向当前记录的游标,Next,方法把游标指向下一个记录,新的,JDBC,中允许游标指向上一个记录,有部分支持高版本,JDBC,规范的驱动程序可以支持这个功能,58,JDBC,类图,59,Enterprise JavaBeans(EJB),是:,Java,服务器端服务框架的规范,软件厂商根据它来实现,EJB,服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。,EJB,容器是:,一个管理一个或多个,EJB,类/,实例的抽象。它通过规范中定义的接口使,EJB,类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。,EJB,服务器是:,管理,EJB,容器的高端进程或应用程序,并提供对系统服务的访问。,EJB,服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如,CORBA,服务)的访问。一个,EJB,服务器必须提供对可访问,JNDI,的名字服务和事务服务支持。,什么是,EJB,60,EJB,架构,61,Enterprise JavaBeans,有三种类型,:,Entity Beans,代表数据,在服务器重启后仍然存在,可以通过,EJB container(“CMP”),或者程序,(“,BMP”),持续化到数据库,Session Beans,执行动作,等价于,一般的,Java object,只不过是在远程,可以是,stateless(,是原子操作,),或,stateful(,在一个,context,中执行一系列的操作,),Message Driven Bean,EJB,介绍,62,Enterprise JavaBeans,63,EJB,介绍,EJB,服务器和容器,64,EJB,介绍,EJB,容器的责任,65,业务数据模型,对业务概念的反映,也称为领域类(,domain class),在持久存储中业务实体的对象视图,提供访问和操作数据的对象封装,支持多用户共享的数据,可以从数据库中存储的属性重新实例化,EJB,服务器崩溃后仍可重构,与数据库中的数据有一样长的生命,EJB,介绍,实体,bean,(,Entity Bean),66,Bean-Managed Persistence(,自管理的持久性),优点:,开发者有完全的控制,无需复杂的提供商支持,缺点:,编码复杂 在改变时需要重新编码和部署,影响可移植性,Container-Managed Persistence(,容器管理的持久性),优点:,提供商解决,可能会有更好的缓冲和性能,在部署描述符中进行改变即可 可移植性好,缺点:,对容器提供商的工具依赖性强,可能不易反映复杂的数据关系,EJB,介绍,实体,bean,的持久性,67,会话,bean,经常用于涉及多个实体,bean,的业务处理和控制逻辑,Session,Entity,Entity,Entity,EJB,介绍,会话,bean(Session,Bean)(,1,),68,相对生命较短(一般与客户同步),在,EJB,服务器崩溃时被删除,不表示数据库中的数据,但可以访问数据,作为一个客户的代表执行功能,可以加入事务,EJB,介绍,会话,bean(Session,Bean)(,2,),69,使用会话,bean,对针对于某一客户的处理或控制对象建模,对工作流、任务和管理活动等建模(如订房、购物车等),协调多个实体,bean,,控制实体,bean,之间的交互,将业务应用逻辑从客户端转移到服务器端,EJB,介绍,何时使用会话,Bean,70,会话,bean,表示一个业务过程,每一客户一个实例,Short-lived:,与客户生命同步,暂态的,服务器崩溃后丢失,可以是事务性的,实体,bean,表示业务数据,在多个客户间共享实例,Long-lived:,与数据库中数据同步,持久的,服务器崩溃后可重构,总是事务性的,EJB,介绍,会话,Bean,?,实体,Bean,?,71,无,状态(,Stateless)bean,表达一个无状态的服务(如列表,,mail),不存储用户相关信息,进行对请求的响应,暂态的,可用来构造响应频繁而简单的访问的,bean,池,有状态(,Stateful)bean,维护客户状态,EJB,介绍,两种类型的会话,bean,72,JNDI,Java Naming and Directory Interface,J2EE,应用利用,JNDI,来定位资源和对象,使软件更容易移植,应用程序通过,JNDI,用符号名称查找关联资源的对象,符号名称和对象之间的关联由系统管理人员在应用程序部署时配置,JNDI,的使用,InitialContext,ic,=new,InitialContext,(),ic,.lookup(“resource name”),73,J2EE Web,目录结构,顶层目录通常是上下文路径,如:应用目录,/,tomcat/webapps/servletdemo,通常情况下,URL,应为,localhost:8080/servletdemo,包含,JSP、,其他静态内容和,WEB-INF,目录,/,WEB-INF,目录,这是一个受保护的目录,不能浏览这个目录下的文件,/,classes,未打包的,java,类,会自动加到,CLASS_PATH,中,/,lib web,应用中的,jar,文件,74,Web,应用部署结构,Project Folder,WEB-INF,classes,package1,package2,lib,JSP files,HTML files,pictures,web.xml,Deployment descriptor,75,部署结构说明,*.,html,*.,jsp,等,Html、,jsp,和其他需要被客户端访问的文件,WEB-INF/web.,xml,Web,应用部署描述符,WEB-INF/classes,编译后的,java,类文件,(,包括,servlet,和非,servlet,),WEB-INF/lib,Web,应用需要的,JAR,文件,包括,JDBC,驱动程序等第三方模块,76,Web,部署描述符,/,WEB-INF/web.xml,J2EE,标准的一部分,定义一个,web,应用中的,servlet,给,servlet,和,URL,之间作映射,一个,servlet,可以映射到多个,URL,上,定义,web,应用中可以使用的资源,定义安全,定义其他内容,设定,Welcome file,列表,设定会话超时,错误页面映射,77,Web,应用打包,(,WAR),J2EE,规范定义了如何把一个,web,应用归档成一个,web application archive,(WAR),WAR,文件,后缀为,.,war,的,Java,归档文件,用,zip,格式打包,符合,J2EE,规范的应用服务器都可以正确识别,WAR,文件直接部署在,Tomcat,等应用服务器上,78,J2EE,应用结构,EJBs,Web component,EJB DD,EJB class,Remote class,Home class,Web DD,JSP files,Servlet,Class,Pictures(GIF/JPG),HTML files,J2EE Application,J2EE DD,.war file,.ear file,.jar file,79,J2EE,标准部署描述符,Enterprise Archive(ear)file,Application.,xml,在,META-INF,目录下,Java Archive(jar)file,ejb,-jar.,xml,在,META-INF,目录下,Web Archive(war)file,web.,xml,在,WEB-INF,目录下,80,J2EE,设计模式,(,JSP,为中心,),优点,非常容易结合业务逻辑,(,JSP:,UseBean,)、,服务器处理过程和,HTML(),,在,JSP,页面中同时实现显示、业务逻辑和流程控制,从而快速完成应用开发,缺点,应用的实现一般是基于过程的,一组,JSP,页面完成一个业务流程,如果要进行改动,必须在多个地方进行修改。这样非常不利于应用扩展和更新。,由于应用不是建立在模块上,业务逻辑和表示逻辑混合在,JSP,页面中,没有进行抽象和分离。不利于应用系统业务的重用和改动。,81,J2EE,设计模式,(,MVC,框架,),表示与逻辑分开,View,表示:显示输入输出数据,(,可以是,HTML,,jsp,,,也可以是一个,windows,应用,),Model,业务逻辑和数据:基于输入和定义的业务流程执行计算 或其它操作,(,javabean,or,ejb,),Controller,协调,view,和,model,,在它们之间交换数据,(,action or,servlet,),databases,View,Controller,Model,82,J2EE,设计模式,MVC,的隐含式,J2EE,实现,View,由,JSP,和,HTML,页面组成,Servlet,可以同时是,controller,和,model,直接存取数据,MVC,实现方法,1,83,J2EE,设计模式,将业务逻辑处理放在,Servlet,之外,HttpServlet,的子类应该仅做,servlet,份内的工作,管理,request、response,及,HttpSession,对象,将业务逻辑写在传统的,Java,类,仅传送普通的,Java,类,,不是,servlet,相关的类(例如,request,response,或,session),比,servlet,容易开发、测试和重用,MVC,实现方法,2,database,JSPs,servlets,objects,84,典型的,J2EE,方案,View,由,JSP,和静态,HTML,组成,Controller,是,servlet,Model,是,EJB,很象使用传统的,Java,对象,只是运行在远程,J2EE,设计模式,MVC,实现方法,3,databases,JSPs,servlets,EJBs,85,典型的,Struts,方案,View,由,JSP,和静态,HTML,组成,Controller,是,Struts,Model,是,EJB,或,javabean,J2EE,设计模式,MVC,实现方法,4,databases,JSPs,struts,EJBs,JavaBean,86,应用实例,Sun Blueprint,PetStore,myPetStore,-EJB version,JPetStore,struts+,iBatis,87,大多数,J2EE,应用共享许多任务,:,日志,数据库存取,数据校验,属性管理,异常操作,生成,HTML,不要在每一个项目中重写这些,不要在同一个项目用不同的方法做这些,!,一个,“,framework,”,设定通用的方式去做这些工作,通过重用代码,(,和技能,!),可能是内部框架,(,通过以前的项目,),可能是外部框架,(,e.g.JADE),技巧,使用框架,88,可以被缓存并可以被所有用户共享,InitialContext,object,JNDI,EJB Home interfaces,所有用户都一样,可以被单独的用户缓存,Database resultsets,例如,当你一次只显示部分数据时,缓存查询结果,可以在,servlet,中缓存,可以在,session bean,中缓存,技巧,尽可能缓存对象,89,init(),做尽可能多的工作,只在初始化是执行一次,尽可能少地使用,Synchronize,确保不要,synchronize,整个类,不要用任何实例变量,将被所有在线的用户使用,不要使用,SingleThreadModel,虽然是,thread-safe,但性能太差,对于非,Java,群体,:,不要在,cookies,中存对象,使用,HttpSession,代替,技巧,Servlet,技巧,90,保持尽量少的,Java,代码,JSP,中的,Java,代码很难维护和测试,绝对不要将业务逻辑放在,JSP,中,编写,helper classes,从数据生成,HTML,理想情况下只使用,“,”,tags,在每一个,JSP,只包含用于显示数据的简单对象,有时称之为,“,view bean”,但不用是一个真的,JavaBean,限定,JSP,只做显示工作,抵制在其中编写的商业逻辑的诱惑,技巧,JSP,技巧,91,如果在页面中你要共享组件和项目,使用如下表格,E.g.,对于菜单,标题栏,页脚,等等,可以使用,HTML,或者,JSP include,指令,可以包括静态,HTML,或者其它,JSP,不要忘记在整个,JSP,中使用,try/catch,如果在,JSP,中抛出一个异常,它不能被,servlet,捕获,作为替代,将所有有异议的代码放在头部,将这一部分封装在,try/catch,中,技巧,更多的,JSP,技巧,92,尽量将,session bean,写成,stateless,EJB container,会缓存,stateless session bean,尽可能明确删除,stateful,session bean,以减少不必要的,passivation,对用户端,不要直接存取,EJB,将它们封装在一个简单的传统的,Java,类中,用以处理诸如,contexts,home and remote interfaces,等等,用基于适配器的代理,作为选择,用,JBuilder,可以向导式地创建“,access beans”,技巧,EJB,技巧,93,使用连接池,创建一定数量的数据库连接池,共享它们,在使用任何资源之后释放它们,E.g.,PreparedStatements,Statements,Connections,ResultSets,因为,”,raw SQL”,使用是需要重新编译,因此效率低,使用,JDBC,的,PreparedStatement,代替,Statement,如果想更快,尽管移植性不好,使用数据库的存储过程,(,Stored Procedure),技巧,JDBC,和数据库技巧,94,确保放在,session,中的每一个对象要实现,Serializable,(or,Externalizable,),不是必须的,但在分布式应用中是一个好的方法,避免在,session,中存放大对象,手工使,session,无效,如果在,JSP,中不需要,session,,禁用它,技巧,HttpSession,对象技巧,95,如果可能,在,HTML,中尽量少用,JavaScript,使用单独的,JavaScript,文件,与,HTML,分开,可以被浏览器缓存,使,HTML,文件更小,可以被共享,容易维护,技巧,JavaScript,技巧,96,考试题型,判断题(,10,题),简答题(,6,题),论述题(,1,题),97,复习要点,什么是中间件、企业级应用的要求、什么是,J2EE,J2EE,的主要技术,Servlet,、JSP,的开发,EJB,的种类和功能,JDBC,数据库访问、,JDBC,与,Entity EJB,访问数据库的区别,J2EE,应用的目录、文件组织结构、各种配置文件的功能和主要配置项,几种不同的应用开发模式(,MVC),98,
展开阅读全文