_浙大中间件技术(J2EE)讲稿_第1页
_浙大中间件技术(J2EE)讲稿_第2页
_浙大中间件技术(J2EE)讲稿_第3页
_浙大中间件技术(J2EE)讲稿_第4页
_浙大中间件技术(J2EE)讲稿_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程内容n概述nJ2EE架构基础nServlet、JSP、EJB开发nJ2EE应用部署nJ2EE应用开发架构n实例软件开发技术的发展n基于主机的系统n两层的Client/Server系统n三层(n层)体系架构q表示层q业务逻辑层q数据层n基于Web的三层(n层)体系架构中间件技术中间件技术中间件技术企业级应用的要求n分布式n可移植n面向Web体系n满足企业计算要求q一致性q事务性q安全性n好的特性q可伸缩q可扩展q易维护n遗留系统集成以上要求需要一个良好的基础架构来支持企业级应用环境什么是J2EE?Java 2 Platform, Enterprise Edition (J2EE)nOpen

2、and standard based platform for developing, deploying and managing n-tier, Web-enabled, server-centric, and component-based enterprise applicationsn运用Java技术开发企业应用的标准n包括了q多层应用开发模型q开发平台 - APIs 和服务q测试软件包 q参考实现n将所有Sun的企业技术集合在一个体系结构下的平台q特定版本下的EJB, Servlet, JSPqJava Web Server qJNDI, JDBC, JTA, JMS, JavaM

3、ail, CORBAJava 2 PlatformJ2EE可以提供什么n分布式、可移植构件的框架n简化服务器端中间层构件的设计n为构件和应用服务器提供标准APIJ2EE可以为开发者和用户带来n更短的开发时间q可重用组件qJSPqEJBn自由的选择q基于开放的标准n简化的连接qXML,JDBC,RMI-IIOP,Web ServiceJ2EE 技术架构J2EE 应用体系结构J2EE是端到端的解决方案N层J2EE体系架构J2EE主要技术概览n展示层 ServLet/JSPn中间层 EJBn中间层可用的企业服务q事务服务 JTAq目录服务 JNDIq消息服务 JMSq异步组件Message-Driv

4、en EJBn数据层 - JDBCn远程调用 RMI/IIOPn使用现有资源 - JCAJ2EE 1.4 Contents.Net与J2EE 的比较Web 架构: J2EE vs .NETCLR.NET AssemblyADO.NET(可使用 COM+ 服务; 比如事务)Web 表单Server 控件Code-BehindASP.NETIISJavaBeansEJBsJSPServlets可运行于大多数主要应用及Web服务器支持大多数数据库 (通过 JDBC 驱动程序)J2SE/EEJDBC (事务使用 JTA).NETSQL ServerOracleDB/2, etc.SQL ServerO

5、racleDB/2, etc.状态: ASP.NET Session,.NET 数据缓存状态: 封装于 EJB 中, 也可在 Web Sessions 中J2EE/.NET主要技术比较nJDBC nJTAnJNDInJMSnJavaMailnRMI/IIOPnJAFnADO.NET n.NET TransactionnActive Directoryn.NET MessagingnSmtpMailnWeb Service/Remotingn.NET JIT技术的成熟性MicrosoftJ2EE199619971998199920002001MSXMLJAXPASPJSPMTS/COM+EJBO

6、DBCJDBCMar 1992ADSIJNDIQCMDBLCEMMCWinDNAJ2EEMSMQJMSVS.Net.NetJ2EE的移植性与互操作性n理论上J2EE应用可以采用多个厂商的产品q只要符合J2EE的标准n实际情况qJ2EE标准不完整,如 Web ServiceqJ2EE的技术需改进,如 EJBq各厂商发展各自的技术q不同产品很难协同和移植nJ2EE可选择同一厂商支持的不同操作系统.Net的移植性与互操作性n理论上.Net应用可移植到任何平台qCLS提交给标准化组织q只要支持CLRn实际情况q只有Windows/Free BSDn.Net支持Web Serviceq可以使用任何平台运

7、行的Web Serviceq任何平台可使用.Net Web Service技术比较结论n.Net和J2EE应用有着相似的架构n.Net和J2EE有相应的主要技术q.Net所有技术来自MicrosoftqJ2EE的技术有多个厂商的实现n.Net和J2EE可以满足大多数应用的需求n主要的差别不在技术的可行性上q开发效率q性能q成本q稳定性开发工具nJBuilderq商用q功能完备nEclipseqOpen Sourceq插件丰富qmyEclipsen版本管理qCVSJ2EE 应用开发n编写和编译组件代码qServlet, JSP, EJBn编写组件的部署描述符n把组件装配成可部署的软件包n将软件包

8、部署到J2EE应用服务器上 部署描述符n提供容器如何管理和控制J2EE组件行为的操作指令q事务性q安全性q持久性n通过配置实现组件行为的定制 (不需要通过代码进行定制)qXML文件n使代码具有可移植性应用服务器介绍n应用服务器是非常重要的企业软件,为现代业务系统提供了应用基础结构。n应用服务器源自支持与其它系统共享数据和资源的应用,以及为Web 页面和其它用户界面生成动态信息的需求。n它在 Web 服务器与底层应用和数据库之间形成了新的功能和服务层应用服务器实现的功能n负载均衡n故障容错nWeb 服务n网络透明n遗留集成n事务管理n安全性n消息n多线程n持久性n数据库连接n资源合并n开发、测试

9、和封装功能n J2EE Containers & Components容器与组件容器处理容器处理组件处理组件处理 一致性一致性 安全性安全性 可获得性可获得性 可伸缩性可伸缩性 事务性事务性 分布性分布性 生命周期管生命周期管理理 (持久性)(持久性)表示表示JSP, Servlet, Applet业务逻辑业务逻辑EJB数据访问逻辑数据访问逻辑EJB应用系统访问应用系统访问Web service应用服务器产品nBEA WebLogicnIBM WebSpherenSun Java System Application ServernOracle 9i/ASnJBossnTomcat(不

10、支持EJB)nResinWeb服务器模型/CGI/ServletnWeb服务器模型nCGI/ServletnServer side moduleqisapiqmod_perlnServer side scriptqphpqaspqjspServletnServlet是Java技术对CGI编程的回答。Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。 q高效 q方便 q可移植性好 q节省投资Servlet开发n如果某个类要成为Servlet,则它应该

11、从HttpServlet 继承, 根据数据是通过GET还是POST发送,重载doGet、doPost方法之一或全部。 doGet和doPost方法都有两个参数,分别为HttpServletRequest 类型和HttpServletResponse 类型。 nHttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等等。 nHttpServletResponse除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter 。 n

12、对于简单的Servlet来说,它的大部分工作是通过println语句生成向客户端发送的页面。 n必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包(要用到HttpServletRequest类和HttpServletResponse类)。 ndoGet和doPost这两个方法是由service方法调用的,有时你可能需要直接重载service方法,比如Servlet要处理GET和POST两种请求时JSP TechnologynJavaServer Pages(JSP)是一种实现普

13、通静态HTML和动态HTML混合编码的技术。nJSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。 nJSP一般在Web服务器端被编译成Servlet后执行n通过定制的Tag实现扩展JSP Constructs 1nJSP文件有固定的文件名后缀.jspn注释 nDeclaration nExpression q向Response流中输

14、出数据q类似于在浏览器中执行printq在表达式语句后面不能有分号nScriplets 包含java代码 qJSP Constructs 2The value is: Value is emptyn所有JSP页面中都隐含存在几个固有的对象q“request” Browsers Request ObjectnUse to get HTTP headers, length etc.q“response” - HttpResponse ObjectJSP Constructs 3q“session” internal HttpSession Objectq“pageContext” q“applic

15、ation”q“out”, same as q“config” servlet configurationq“page”q“exception”nJSP Directivesq是针对JSP的指示JSP Constructs 4q不会产生任何输出q“page” directive nn通常用来引入java类的路径q“include” directivenn用来包含一些静态文件q“taglib” 列出标签库描述文件的位置n在使用特定标签库的时候需要在Web应用中使用Java Beansn一般用来实现数据传递和业务组件n与Java Beans在Swing和AWT中的用法相似n必须没有构造函数或者构造

16、函数没有参数n每个Bean属性都必须有setter和getter方法nJSP标签也使用Java BeanJSP ActionsnJSP actions是一些会影响输出流的特殊标签,通常用在Java Bean上q常用的JSP actionn , , n以下代码用来在输出流中显示student bean的lastName属性JDBCn提供访问关系型数据库的标准Java APIq使用SQLn对于Java编程API的实现由各厂商实现,针对不同数据库编写不同的驱动程序。JDBC 的目标nSQL-Leveln100% 纯Javan简单n高效n利用现有的数据库技术n提供多种方法简化不同功能需求的代码JDBC

17、 体系架构ApplicationJDBCDrivernJava 代码调用JDBC库nJDBC装载驱动n驱动与特定数据库连接n可以使用多个驱动,也可以使用多个数据库n可以在不修改程序代码的情况下更换要使用的数据库JDBC DriversnType I: “Bridge”nType II: “Native”nType III: “Middleware”nType IV: “Pure”JDBC APInJDBC 的实现类在java.sql包中,需要在程序中通过import语句引入DriverManagernDriverManager 试用各种驱动n使用第一个可以正确使用的驱动n一个驱动类装载时,自动

18、在DriverManager中注册Class.forName(“org.gjt.mm.mysql.Driver”);Connection c = DriverManager.getConnection(.);JDBC对象类nDriverManagerq装载、选择驱动nDriverq连接实际数据库nConnectionq连接数据库的对象nStatementq执行独立的SQL语句nResultSetqStatement返回的结果集JDBC 类的使用DriverManagerDriverConnectionStatementResultSetJDBC URLnjdbc:subprotocol:sou

19、rcen不同的驱动有不同的URL写法njdbc:odbc:DataSourceq例如jdbc:odbc:Northwindnjdbc:mysql:/host:port/databaseq例如jdbc:mysql:/localhost/accountingDriverManagernConnection getConnectionn(String url, String user, String password)n与给定的JDBC URL连接,并使用user和password参数n可能产生java.sql.SQLExceptionn返回一个 Connection对象ConnectionnCon

20、nection对象表示和一个特定数据的连接会话nSQL语句在Connection环境里执行并得到返回结果n可以创建到一个数据库的多个Connection连接n在Connection中有一些方法能够得到数据库的metadata信息,如数据库中表结构和字段属性n在Connection还有保证数据库事务的方法获得一个 ConnectionnString url = “jdbc:mysql:/localhost/test;ntry nClass.forName ( org.gjt.mm.mysql.Driver );nConnection con = DriverManager.getConnecti

21、on(url,”root”,”root”);nncatch (ClassNotFoundException e) n e.printStackTrace(); ncatch (SQLException e)n e.printStackTrace(); StatementnStatement对象用来执行SQL命令并获取相应的结果nStatement对象的主要方法qResultSet executeQuery(String) nExecute a SQL statement that returns a single ResultSet. qint executeUpdate(String) nE

22、xecute a SQL INSERT, UPDATE or DELETE statement. Returns the number of rows changed.qboolean execute(String) nExecute a SQL statement that may return multiple results. ResultSetnResultSet用来访问Statement对象执行后得到的数据结果集n每个Statement每次只能打开一个ResultSetn数据库表中的记录按顺序获取nResultSet对象维护一个指向当前记录的游标nNext方法把游标指向下一个记录 q

23、新的JDBC中允许游标指向上一个记录,有部分支持高版本JDBC规范的驱动程序可以支持这个功能JDBC类图nEnterprise JavaBeans(EJB) 是: Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。 nEJB容器是: 一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。 nEJB服务器是: 管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库

24、访问接口,对其他服务(如CORBA服务)的访问。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。 什么是EJBEJB架构nEnterprise JavaBeans有三种类型:qEntity Beansn代表数据n在服务器重启后仍然存在n可以通过EJB container (“CMP”) 或者程序 (“BMP”) 持续化到数据库 qSession Beansn执行动作n等价于一般的 Java object, 只不过是在远程n可以是 stateless (是原子操作), 或 stateful (在一个 context中执行一系列的操作)qMessage Driven BeanEJ

25、BEJB介绍介绍Enterprise JavaBeansEJBEJB介绍介绍EJB服务器和容器EJBEJB介绍介绍EJB容器的责任业务数据模型业务数据模型n对业务概念的反映,也称为领域类(domain class)n在持久存储中业务实体的对象视图n提供访问和操作数据的对象封装n支持多用户共享的数据n可以从数据库中存储的属性重新实例化qEJB 服务器崩溃后仍可重构q与数据库中的数据有一样长的生命EJBEJB介绍介绍实体bean(Entity Bean)nBean-Managed Persistence(自管理的持久性)q优点:n开发者有完全的控制n无需复杂的提供商支持q缺点:n编码复杂 在改变时

26、需要重新编码和部署n影响可移植性nContainer-Managed Persistence(容器管理的持久性)q优点:n提供商解决,可能会有更好的缓冲和性能n在部署描述符中进行改变即可 可移植性好q缺点:n对容器提供商的工具依赖性强n可能不易反映复杂的数据关系EJBEJB介绍介绍实体bean的持久性n会话bean经常用于涉及多个实体bean的业务处理和控制逻辑SessionEntityEntityEntityEJBEJB介绍介绍会话bean(Session Bean)(1)n相对生命较短(一般与客户同步)n在EJB服务器崩溃时被删除n不表示数据库中的数据,但可以访问数据n作为一个客户的代表执

27、行功能n可以加入事务EJBEJB介绍介绍会话bean(Session Bean)(2)n使用会话bean 对针对于某一客户的处理或控制对象建模n对工作流、任务和管理活动等建模(如订房、购物车等)n协调多个实体bean,控制实体bean之间的交互n将业务应用逻辑从客户端转移到服务器端EJBEJB介绍介绍何时使用会话Bean会话beann表示一个业务过程n每一客户一个实例nShort-lived:与客户生命同步n暂态的n服务器崩溃后丢失n可以是事务性的实体bean n表示业务数据n在多个客户间共享实例nLong-lived:与数据库中数据同步n持久的n服务器崩溃后可重构n总是事务性的EJBEJB介

28、绍介绍会话Bean?实体Bean?n无状态(Stateless)bean q表达一个无状态的服务(如列表,mail)q不存储用户相关信息,进行对请求的响应q暂态的q可用来构造响应频繁而简单的访问的bean池n有状态(Stateful)bean q维护客户状态EJBEJB介绍介绍两种类型的会话beanJNDInJava Naming and Directory InterfacenJ2EE应用利用JNDI来定位资源和对象,使软件更容易移植q应用程序通过JNDI用符号名称查找关联资源的对象q符号名称和对象之间的关联由系统管理人员在应用程序部署时配置nJNDI的使用qInitialContext i

29、c = new InitialContext()qic.lookup(“resource name”)J2EE Web目录结构n顶层目录通常是上下文路径q如:应用目录/tomcat/webapps/servletdemoq通常情况下URL应为q包含JSP、其他静态内容和WEB-INF目录n/WEB-INF目录q这是一个受保护的目录,不能浏览这个目录下的文件q/classes 未打包的java类,会自动加到CLASS_PATH中q/lib web应用中的jar文件Web应用部署结构Project FolderWEB-INFclassespackage1package2libJSP filesHT

30、ML filespicturesweb.xmlDeployment descriptor部署结构说明n*.html, *.jsp等qHtml、jsp和其他需要被客户端访问的文件nWEB-INF/web.xmlqWeb应用部署描述符nWEB-INF/classesq编译后的java类文件(包括servlet和非servlet)nWEB-INF/libqWeb应用需要的JAR文件,包括JDBC驱动程序等第三方模块Web 部署描述符n/WEB-INF/web.xmlqJ2EE标准的一部分n定义一个web应用中的servletq给servlet和URL之间作映射q一个servlet可以映射到多个URL

31、上n定义web应用中可以使用的资源n定义安全n定义其他内容q设定Welcome file列表q设定会话超时q错误页面映射Web应用打包(WAR)nJ2EE规范定义了如何把一个web应用归档成一个web application archive (WAR)nWAR文件 q后缀为.war的Java归档文件q用zip格式打包q符合J2EE规范的应用服务器都可以正确识别nWAR文件直接部署在Tomcat等应用服务器上J2EE应用结构EJBsWeb componentEJB DDEJB classRemote classHome classWeb DDJSP filesServlet ClassPictu

32、res (GIF/JPG)HTML filesJ2EE ApplicationJ2EE DD.war file.ear file.jar fileJ2EE标准部署描述符nEnterprise Archive (ear) fileqApplication.xml在META-INF目录下nJava Archive (jar) fileqejb-jar.xml在META-INF目录下nWeb Archive (war) fileqweb.xml在WEB-INF目录下J2EE设计模式(JSP为中心)n优点q非常容易结合业务逻辑(JSP:UseBean)、服务器处理过程和HTML(),在JSP页面中同时

33、实现显示、业务逻辑和流程控制,从而快速完成应用开发n缺点q应用的实现一般是基于过程的,一组JSP页面完成一个业务流程,如果要进行改动,必须在多个地方进行修改。这样非常不利于应用扩展和更新。q由于应用不是建立在模块上,业务逻辑和表示逻辑混合在JSP页面中,没有进行抽象和分离。不利于应用系统业务的重用和改动。J2EE设计模式(MVC框架)n表示与逻辑分开nView 表示:显示输入输出数据 (可以是 HTML,jsp,也可以是一个 windows 应用)nModel 业务逻辑和数据:基于输入和定义的业务流程执行计算 或其它操作(javabean or ejb)nController 协调view 和

34、 model,在它们之间交换数据(action or servlet)databasesViewControllerModelJ2EE设计模式nMVC 的隐含式 J2EE 实现nView 由 JSP 和 HTML 页面组成nServlet 可以同时是 controller 和 modelq直接存取数据databasesJSPsHTMLservletsMVC 实现方法实现方法1J2EE设计模式n将业务逻辑处理放在 Servlet 之外nHttpServlet 的子类应该仅做 servlet 份内的工作q管理 request、response 及 HttpSession 对象n将业务逻辑写在传统的

35、Java类q仅传送普通的 Java 类,不是 servlet 相关的类(例如 request, response 或 session)q比 servlet 容易开发、测试和重用MVC 实现方法实现方法2databaseJSPsservletsobjectsn典型的 J2EE 方案nView 由JSP 和静态 HTML 组成nController 是 servlet nModel 是 EJBn很象使用传统的 Java 对象 只是运行在远程J2EE设计模式MVC 实现方法实现方法3databasesJSPsservletsEJBsn典型的Struts 方案nView 由JSP 和静态 HTML 组

36、成nController 是 Struts nModel 是 EJB或javabeanJ2EE设计模式MVC 实现方法实现方法4databasesJSPsstrutsEJBsJavaBean应用实例nSun Blueprint PetStorenmyPetStore - EJB versionnJPetStore struts + iBatisn大多数J2EE应用共享许多任务:q日志, 数据库存取, 数据校验, 属性管理, 异常操作, 生成HTMLn不要在每一个项目中重写这些n不要在同一个项目用不同的方法做这些!n一个 “framework” 设定通用的方式去做这些工作 通过重用代码 (和技能

37、!)q可能是内部框架 (通过以前的项目)q可能是外部框架(e.g. JADE)技巧技巧使用框架n可以被缓存并可以被所有用户共享qInitialContext objectnJNDIqEJB Home interfacesn所有用户都一样n可以被单独的用户缓存qDatabase resultsetsn例如,当你一次只显示部分数据时,缓存查询结果n可以在 servlet 中缓存, 可以在 session bean 中缓存技巧技巧尽可能缓存对象ninit()做尽可能多的工作q只在初始化是执行一次n尽可能少地使用 Synchronizeq确保不要 synchronize 整个类n不要用任何实例变量q将被所有在线的用户使用n不要使用SingleThreadModelq虽然是 thread-safe, 但性能太差n对于非 Java 群体: 不要在 cookies 中存对象q使用 HttpSession 代替技巧技巧Servlet 技巧n保持尽量少的Java代码qJSP中的Java代码很难维护和测试q绝对不要将业务逻辑放在JSP中q编写 helper classes 从数据生成HTMLq理想情况下只使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论