_浙大中間件技術(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

提交評論