J2EE相關(guān)技術(shù)介紹_第1頁
J2EE相關(guān)技術(shù)介紹_第2頁
J2EE相關(guān)技術(shù)介紹_第3頁
J2EE相關(guān)技術(shù)介紹_第4頁
J2EE相關(guān)技術(shù)介紹_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、J2EE相關(guān)技術(shù)介紹J2EE 技術(shù)介紹J2EE 概述為了解決企業(yè)在軟件開發(fā)中出現(xiàn)的問題,SUN 公司提出的以 Java 2 平臺為核心一種框架方案 J2EE。它的出現(xiàn)精簡了企業(yè)軟件開發(fā)、部署過程,為企業(yè)建造高質(zhì)量的應用系統(tǒng)提供了好的支撐,解決了傳統(tǒng)兩層模式(Client/Server)下客戶端龐大的弊端。J2EE 平臺由一整套服務(Services)、應用程序接口(APIs)和協(xié)議構(gòu)成,它對開發(fā)基于 Web 的多層應用系統(tǒng)提供了強大的支持,本質(zhì)上是一個分布式的服務器應用程序設(shè)計環(huán)境。2005 年 6 月,J2EE 正式更名為 Java EE。J2EE 的四層模型J2EE 采用多層的分布式模型,

2、J2EE 應用程序既可以是三層結(jié)構(gòu),也可以是四層結(jié)構(gòu)。典型的基于 B/S 的 J2EE Web 應用四層結(jié)構(gòu)包括客戶層、控制層、業(yè)務層和持久層,分層圖如圖 2.1 所示:1 客戶層客戶層又稱為用戶層。簡單來理解就它主要是與客戶雙向互動的,既接收來客戶的命令或請求又把來自系統(tǒng)的執(zhí)行結(jié)果展示給用戶。J2EE 客戶端有許多,可以是基于 Web 或者不是基于 Web。通常用戶層采用 Web 客戶端,也就是瘦客戶端,顯示由 JSP 或 Servlet 產(chǎn)生的 Web 頁面??蛻魧右话悴粚崿F(xiàn)如數(shù)據(jù)庫操作(sql)、完成復雜的業(yè)務邏輯這樣的功能。Web 客戶端基于瀏覽器形式,維護、使用、升級方便,不需要單獨

3、再次安裝客戶端。2 控制層控制層又稱 Web 層。它的主要作用是接收來自客戶端的請求(Request),并對客戶的請求產(chǎn)生相應的響應(Response)。J2EE 平臺中,控制層是由 Web 容器內(nèi)的組件來實現(xiàn),可以解決系統(tǒng)異構(gòu)性問題,實現(xiàn)系統(tǒng)的通用性、可伸縮性、易維護性。3 業(yè)務層業(yè)務層或 EJB 層主要是滿足某些領(lǐng)域(教育業(yè)和金融業(yè))特定業(yè)務需要的。通常情況下,業(yè)務層提供業(yè)務服務組件供應用程序使用。業(yè)務組件通常被實現(xiàn)EJB(Enterprise JavaBeans)組件,并由 EJB 容器負責管理和執(zhí)行。4 持久層持久層或 DAO(DataAccess Object,數(shù)據(jù)訪問對象)層,此層

4、由許多的 DAO 組件構(gòu)成。DAO 組件實現(xiàn)了對數(shù)據(jù)庫記錄的創(chuàng)建、查找、更新和刪除(CRUD)等原子操作。持久層可以采用不同的訪問技術(shù),對應不同的訪問技術(shù),DAO 組件的實現(xiàn)會完全不同。通常情況下,為了設(shè)計更好的軟件,保證系統(tǒng)具有良好的去耦,我們?yōu)槊總€ DAO 組件都提供接口,方便業(yè)務邏輯組件的使用。MVC 設(shè)計模式MVC 工作原理MVC 是 20 世紀 80 年代出現(xiàn)并使用的一種軟件設(shè)計模式,即模型、視圖、控制器。它將程序的輸入、輸出和處理環(huán)節(jié)分開,即分成相對獨立而又能相互協(xié)同工作的三個部分,三個部分別擔負不同的任務,有效的降低軟件模塊之間的耦合,提供了良好的可擴展性。MVC 模式類似于設(shè)計

5、模式中的觀察者模式,它的處理過程如圖 2.2 所示,它是所有面向?qū)ο蟮某绦蛟O(shè)計語言都應該遵守 MVC的法則。1 模型(Model)模型是應用程序的主體,表示業(yè)務邏輯或業(yè)務數(shù)據(jù),接受來自視圖的請求數(shù)據(jù),并向視圖返回最終的處理結(jié)果。與視圖和控制器相比較,模型有最多的處理任務。模型與數(shù)據(jù)格式關(guān)系不大,一個模型能夠為多個視圖提供數(shù)據(jù)或者說多個視圖能夠共享一個模型。模型的出現(xiàn)極大的提高了應用的可重用性。業(yè)務模型的設(shè)計是 MVC 的重要問題。2 視圖(View)就視圖而言,它是用戶能夠與其交互的界面。視圖向用戶呈現(xiàn)相關(guān)數(shù)據(jù),并能接收來自用戶輸入的數(shù)據(jù),但是它并不做任何實質(zhì)性的業(yè)務處理。視圖雖然能夠向模型查

6、詢業(yè)務狀態(tài),但它自身并不能改變模型。視圖能夠接受模型發(fā)出的數(shù)據(jù)更新事件,并對用戶界面進行同步更新。3 控制器(Controller)控制器是表現(xiàn)層和業(yè)務層的模式,主要完成與客戶端的交互、控制并管理每個請求和處理,它的本質(zhì)就是一個分發(fā)器,它僅僅把用戶的請求傳遞給模型,告訴模型做什么,并選擇符合要求的視圖展現(xiàn)給用戶,它自身并不對數(shù)據(jù)做任何處理。Struts2 框架Struts2 框架概述通常來講,所謂的框架就是一種結(jié)構(gòu)化的軟件。在框架的幫助下,我們很容易將某些領(lǐng)域的任務和一些具體問題進行流程上的抽象,借助框架提供的平臺,我們可以更快捷地創(chuàng)建滿足自己工作需要的 Web 應用程序。Struts2 是實

7、現(xiàn)了MVC 模式的 Web 框架。它運行起來穩(wěn)定,設(shè)計理念先進,性能優(yōu)秀。Struts2 采用攔截器的機制來處理用戶的請求,實現(xiàn)權(quán)限攔截,使得業(yè)務邏輯控制器能夠與ServletAPI 完全脫離開,彌補了 Struts1 代中 JSP/Servlet 耦合非常緊密,難于測試等問題。Struts2 的工作原理Struts2 的工作原理如圖 2.3 所示。它接收來自客戶端的請求到作出響應主要通過以下流程來完成:1 請求 HttpServletRequest 通過客戶端的瀏覽器發(fā)出(請求是。action 或 JSP);2 這個 HttpServletRequest 請求經(jīng)過許多過濾器(比如 SiteM

8、esh);3 接著 Struts2 的核心控制器 FilterDispatcher 會被調(diào)用。調(diào)用后 Struts2 的核心控制器 FilterDispatcher 會主動詢問 Struts2 的 Action映射器 ActionMapper 來決定是否針對當前的 HttpServletRequest 請求調(diào)用相應的動作 Action;4 如果 Struts2 的動作 Action 映射器 ActionMapper 決定了當前的請求需要調(diào)用某個 Action,那么 Struts2 的核心控制器 FilterDispatcher 就會把當前請求的處理權(quán)利交給動作 Action 的代理 Actio

9、nProxy;5 Action 的代理 ActionProxy 會通過 Struts2 的配置管理器(Configuration Manager)查找struts。xml ,找尋當前請求要求使用的 Action 類;6 接著,Action 的代理 ActionProxy會構(gòu)建一個 Action 的調(diào)用者 ActionInvocation 的實例;7 ActionInvocation 對象通過“名字”來調(diào)用 Action。在調(diào)用 Action 的過程中有要關(guān)聯(lián)相關(guān)攔截器(Intercepter)的調(diào)用;8 當 Action 執(zhí)行完了后,Action 的調(diào)用者 ActionInvocation 會

10、根據(jù) Struts2 的struts。xml 文件配置信息找到對應的返回結(jié)果。Struts2 實現(xiàn) MVC 的原理Struts2 是 MVC 設(shè)計模式的具體的實現(xiàn),我們很容易根據(jù)自己需要快速搭建Struts2 的開發(fā)環(huán)境。在 Struts2 中,動作(action)、結(jié)果(result)、過濾分配器(FilterDispatcher)是對 MVC 模式的具體實現(xiàn),如圖 2.4 所示:1 控制器(FilterDispatcher)在 Struts2 中,控制器是由 FilterDispatcher 來實現(xiàn)的。控制器 FilterDispatcher位于 MVC 的最前端,它是在客戶請求過程中第一

11、個被調(diào)用的組件??刂破鞯墓ぷ髟硎菍⒖蛻舻恼埱笥成涞骄唧w的動作,并決定由哪個動作(Action)來完成客戶的請求。2 模型(動作)模型由 Struts2 的動作組件來實現(xiàn)。Struts2 的動作組件有兩個作用:一是一個動作將業(yè)務邏輯調(diào)用封裝到一個單獨的工作單元中,二是動作是一個傳輸數(shù)據(jù)的場所??刂破髟谑盏秸埱笾?,必須通過映射來決定哪個動作處理這個請求,一旦找到了適當?shù)膭幼鳎刂破鲿{(diào)用這個動作并將控制權(quán)交給它,完成工作后,就向提交請求的用戶返回視圖。3 視圖(結(jié)果)視圖是 MVC 呈現(xiàn)給用戶的組件,它的主要作用是將 WEB 應用程序的狀態(tài)轉(zhuǎn)變?yōu)橐环N可視化的表示,這種表示使得用戶能與它充分交互

12、。動作會具體負責選擇哪個結(jié)果來呈現(xiàn)響應,它可以從任意數(shù)量的結(jié)果中選擇。Spring 框架Spring 框架概述Spring 框架由 Rod Johnson 開發(fā),是分層的 Java SE/EE 應用一站式的輕量級開源框架。它以 IoC(Inverse of Control:反轉(zhuǎn)控制)和 AOP(Aspect OrientedProgramming:面向切面編程)為內(nèi)核,提供了展現(xiàn)層 Spring MVC 和 持久層Spring JdbcTemplate、ORM 模塊以及業(yè)務層 SpringBean 管理、事務管理等眾多的企業(yè)級技術(shù)。Spring 出現(xiàn)就是為了解決 JavaEE 程序開發(fā)人員在實

13、際開發(fā)中遇到的問題。與 EJB 繁重、復雜的解決方案相比較,它屬于輕量級的解決方案。Spring 框架結(jié)構(gòu)Spring3 框架由 20 多個模塊組成,這些模塊為企業(yè)的開發(fā)提供了 “一站式”選擇,如圖 2.5 所示:1 核心容器(Core Container):是整個 Spring3 框架主要部分,完成了整個結(jié)構(gòu)的最基本的功能。核心容器通過配置文件的方式描述類和類之間的依賴關(guān)系。BeanFactory(Bean 工廠)是 Core Container 的主要部件組件。IoC 容器負責依賴類之間的建立,連接、獲取、管理等工作。SpringContext 是一個配置文件,它不但提供了對國際化、生命周

14、期事件和驗證的支持還提供了如 Email、JNDI 訪問、EJB 集成、國際化校驗等。Expression Language 完成了操作和查詢對象圖的功能。2 AOP 模塊:Spring 的 AOP 模塊提供了滿足 AOP Alliance 規(guī)范的實現(xiàn),確保它與其它 AOP 框架的互通,同時它還整合了 AspectJ 框架。3 數(shù)據(jù)訪問和集成:Spring 對中間層數(shù)據(jù)的訪問提供了強大的支持,使用它可以極大簡化程序的數(shù)據(jù)訪問。它主要包括 JDBC 模塊、ORM 模塊、OXM 模塊、Transaction 模塊等。(1)JDBC 模塊主要提供了對 JDBC 的抽象。(2)ORM(Object/R

15、elation Mapping)提供了常用的“O/R”映射 APIs 的集成。(3)OXM(O/X Mapper)模塊完成 POJO 和 XML 之間的變換。(4)Transaction 模塊能夠給 Spring 管理的對象提供良好的事務管理。4 Web 及遠程操作:包括 Web 模塊、Web-Struts 模塊、Web-Portlet 等模塊。(1)Web 模塊:該模塊提供了基于 Web 的功能和工具。它提供了如模板引擎、文件上傳、遠程過程訪問等功能。(2)Web-Servlet 模塊:該模塊提供了企業(yè)應用的 MVC 實現(xiàn)。(3)Web-Struts 模塊:該模塊為 Struts 和 Spr

16、ing 的整合提供了較好的支持。(4)Web-Portlet 模塊:該模塊為 MVC 在 Portlet 環(huán)境下提供了支持。5 測試部分(Test):可以用回歸測試框架 JUnit 對 Spring 組件進行測試。AOP面向切面編程 AOP 是對 OOP 思想的延伸,它采用橫向抽取機制取代了傳統(tǒng)縱向繼承體系。主要是將日志記錄、性能統(tǒng)計、安全控制、事務處理、異常處理等代碼從業(yè)務邏輯代碼中劃分出來,使得業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性。IoC控制反轉(zhuǎn)(IoC)又稱依賴注入(Depedency Injection,DI)指程序運行過程中,如果需要另一個對象協(xié)作時,無需在代碼中創(chuàng)建被

17、調(diào)用者而是依賴于外部容器的注入。IoC 是一種設(shè)計模式,程序設(shè)計人員利用 IoC 的思想可以解決組件之間相互依賴關(guān)系并對組件進行配置。Spring中BeanFactory就是典型的IoC容器,Spring IoC 容器注入依賴資源主要有設(shè)值注入和構(gòu)造注入兩種方式。Hibernate 框架ORM對象關(guān)系映射(Object Relational Mapping,簡稱 ORM)是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的矛盾出現(xiàn)的技術(shù),通過這種技術(shù),我們可用面向?qū)ο蟮姆绞讲倏v持久化對象 (Persistence Object )從而訪問關(guān)系型數(shù)據(jù)庫。Hibernate 是目前比較流行的開源 O

18、RM 框架,主要通過映射類(*。java)、映射文件(*。hbm。xml)以及數(shù)據(jù)庫配置文件(perties 或 hibernate。cfg。xml)完成ORM 功能。通過 O/R 映射,可以將一個二維的數(shù)據(jù)表(table)和實體的 Bean 進行關(guān)聯(lián)?;镜挠成浞绞饺绫?2.1 所示:Hibernate 的框架結(jié)構(gòu)Hibernate 對 JDBC 的類庫進行了的封裝,適合數(shù)據(jù)量較小的情況。Hibernate的框架結(jié)構(gòu)可以用圖 2.6 所示:1 SessionFactory: SessionFactory 是 Hibernate 的關(guān)鍵對象,它保存了數(shù)據(jù)庫對應的映射關(guān)

19、系并負責建造 Session 對象。2 Session:Session 是 Hibernate 進行持久化的基礎(chǔ)對象,提供了增加、刪除、修改、查找(CRUD)等方法,一個 Session 可包含多個事務對象。3 持久化對象(Persistant Object):持久化對象 PO 是與 Hibernate Session 關(guān)聯(lián)的 JavaBeans/POJO。持久化對象可認為是數(shù)據(jù)庫中的表映射的 JAVA 對象,在程序中對持久化對象 PO 進行的相關(guān)操作將自動轉(zhuǎn)換為對持久層的修改。4 瞬態(tài)對象(Transient object: TO):指沒有與 Session 關(guān)聯(lián)的對象。它不會被持久化,也不

20、會賦予持久化標志。5 事務:事務代表一次原子操作,是 Hibernate 持久層訪問的重要方面。Hibernate 事務是對底層具體的 JDBC、JTA 的抽象。所有的持久化操作都應該在事務管理下進行。6 連接提供者:連接提供者通常由 DataSource 充當,用于生成 JDBC 連接。7 事務工廠:事務工廠主要是對底層的事務進行封裝并進行抽象。Hibernate 核心 APIHibernate 提供了大量的接口供開發(fā)者進行數(shù)據(jù)庫訪問、相關(guān)配置、進行映射。圖 2.7 顯示了 Hibernate 核心 API 的內(nèi)部關(guān)系。Hibernate 的運行過程如下:1.Hibernate 的 Conf

21、iguration 類主要職責是管理 Hibernate 的配置信息。這新信息包括數(shù)據(jù)庫 URL、用戶名、密碼、JDBC 驅(qū)動和方言。2.應用程序先調(diào)用 Configuration 類,該類讀取 hibernate。cfg。xml 或 perties 的信息;3.調(diào)用 Configuration 對象的方法生成一個 SessionFactory對象;4.然后從 SessionFactory對象的 openSession()方法生成一個 Session 對象;5.可通過 Session 對象的方法對 PO 進行操作;6.可通過 Session 對象的 createQue

22、ry 方法生成一個 Query 對象,然后利用Query對象執(zhí)行 HQL(Hibernate Query Language)檢索;7.在查詢的情況下,可通過 Session 對象生成一個 Criteria 對象,然后利用Criteria 對象執(zhí)行 QBC(Query By Criteria)檢索;8.可用 Session 對象 beginTransaction()方法生成 Transaction 對象開始一個新的事務。若無異常,Transaction 對象將調(diào)用 commit()方法向底層數(shù)據(jù)庫提交事務。Java虛擬機體系結(jié)構(gòu)簡介Java包括四個相互關(guān)聯(lián)的技術(shù):Java語言、JavaAPI、c

23、lass文件和Java虛擬機,其中Java技術(shù)的核心是Java虛擬機,所有的Java程序都在其上運行。Java虛擬機是一個想象中的機器,在實際的計算機上可以用不同的方式(軟件或硬件)加以實現(xiàn)),Java虛擬機屏蔽了與具體操作系統(tǒng)平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。Java虛擬機有自己想象中的硬件,如處理器、堆棧、PC寄存器等,還具有相應的指令系統(tǒng)。Sun公司定義了Java虛擬機規(guī)范,只要根據(jù)Java虛擬機規(guī)格描述,將解釋器移植到特定的計算機上,就能保證經(jīng)過編譯后的Java代碼能夠在該系統(tǒng)上運行。圖1.1是

24、Java虛擬機的體系結(jié)構(gòu)圖。類裝載器子系統(tǒng)負責把Class文件載入Java虛擬機,它是運行Java程序的第一道流程;運行時數(shù)據(jù)區(qū)是Java程序運行的場所;執(zhí)行引擎是Java虛擬機的核心,它執(zhí)行Java虛擬機的指令,完成對Java程序的執(zhí)行;本地方法接口是實現(xiàn)Java方法與宿主機本地方法互相調(diào)用的連接點,通過本地方法接口可以實現(xiàn)對宿主機本地方法的調(diào)用,加強了Java程序的平臺無關(guān)性。Java虛擬機的每個實例都有一個它自己的方法區(qū)和一個堆,運行于Java虛擬機內(nèi)的所有的線程都共享這些區(qū)域。當虛擬機裝載類文件的時候,它解析其中的二進制數(shù)據(jù)所包含的類信息,并把它們放到方法區(qū)中。當程序運行的時候,Jav

25、a虛擬機把程序初始化的所有對象置于堆上,而每個線程創(chuàng)建的時候,都會擁有自己的程序計數(shù)器PC和Java棧,其中程序計數(shù)器中的值指向下一條即將被執(zhí)行的指令,線程的Java棧則存儲為該線程調(diào)用Java方法的狀態(tài);本地方法調(diào)用的狀態(tài)被存儲在本地方法棧,該方法棧依賴于具體的實現(xiàn)。類裝載器、運行時數(shù)據(jù)區(qū)、執(zhí)行引擎、本地方法接口等模塊一起組成了虛擬機的內(nèi)部體系結(jié)構(gòu),這些定義嚴格地規(guī)定了虛擬機所要實現(xiàn)的外部特征以及模塊之間的交互,對于運行時的具體細節(jié),大多由實現(xiàn)的設(shè)計者來決定。類裝載器Java虛擬機的類裝載就是指將包含在類文件中的字節(jié)碼載入Java虛擬機中,并使其成為Java虛擬機的一部分。類裝載器把一個類裝

26、入Java虛擬機中,要經(jīng)過三個步驟來完成:裝載!連接和初始化,其中鏈接又可以分成校驗!準備和解析三步,除了解析外,其它步驟是嚴格按照順序完成的,各個步驟的主要工作如下:裝載查找和導入類或接口的二進制數(shù)據(jù);連接執(zhí)行校驗!準備和解析步驟。其中校驗指檢查導入類或接口的二進制數(shù)據(jù)的正確性;準備階段負責給類的靜態(tài)變量分配并初始化存儲空間;解析的作用是將符號引用轉(zhuǎn)成直接引用。初始化初始化類的靜態(tài)變量和靜態(tài)Java代碼塊。Java虛擬機中類的裝載是由ClassLoade:和它的子類來實現(xiàn)的,Java ClassLoader這個類負責在運行時查找和載入類文件。運行時數(shù)據(jù)區(qū)當Java虛擬機運行一個程序時,它需要

27、內(nèi)存來存儲各類信息,例如字節(jié)碼!從己裝載的class文件中得到的信息、程序創(chuàng)建的對象、傳遞給方法的參數(shù)、返回值、局部變量、以及運算的中間結(jié)果等。Java虛擬機把這些數(shù)據(jù)都組織到運行時數(shù)據(jù)區(qū)中,以便于管理。運行時數(shù)據(jù)區(qū)包括方法區(qū)、堆、Java棧、PC寄存器和本地方法棧。Java虛擬機的每個實例都有一個它自己的方法區(qū)和堆,運行于Java虛擬機內(nèi)的所有的線程都共享這些區(qū)域。當虛擬機裝載類文件的時候,它解析類文件的二進制數(shù)據(jù)包含的信息,并把它們放到方法區(qū)中。當程序運行的時候,Java虛擬機把程序初始化的所有對象置于堆上。一個Java虛擬機中只存在一個堆空間,故所有線程共享這個堆。在Java虛擬機的堆里

28、存放著正在運行的Java程序所創(chuàng)建的所有對象(類實例或者數(shù)組)。堆空間的回收由垃圾收集器完成,Java虛擬機規(guī)范并沒有指定垃圾收集應該采取什么技術(shù),甚至沒有強制規(guī)定垃圾收集器,這些都由虛擬機的設(shè)計者根據(jù)需要自行決定。當啟動一個新線程的時候,Java虛擬機會為它分配一個Java棧,Java以棧幀為單位保存線程的運行狀態(tài)。幀數(shù)據(jù)區(qū)主要用來保存關(guān)于支持常量池解析、正常方法返回以及異常派發(fā)等機制所需要的信息。當線程創(chuàng)建的時候,都會擁有自己的程序計數(shù)器PC和Java棧,其中程序計數(shù)器中的值指向下一條即將被執(zhí)行的指令,線程的Java棧則存儲為該線程調(diào)用Java方法的狀態(tài)。本地方法調(diào)用的狀態(tài)被存儲在本地方法

29、棧,該方法棧依賴于具體的實現(xiàn)。PC寄存器和Java棧域是私有的,任何線程都不能訪問另一個線程的PC寄存器和Java棧。執(zhí)行引擎執(zhí)行引擎是Java虛擬機實現(xiàn)的核心,Java虛擬機中的執(zhí)行引擎就好比中央處理器,使得Java虛擬機重復不斷地讀取字節(jié)碼并執(zhí)行,直到虛擬機進程退出。Java虛擬機規(guī)范中規(guī)定:執(zhí)行引擎的行為由指令集來規(guī)定。對于每條指令,規(guī)范都詳細規(guī)定了執(zhí)行該指令時應該“做什么”,但是沒有說明”如何做“,因此Java虛擬機的實現(xiàn)者可以采取解釋執(zhí)行技術(shù)即時編譯(JusthiTime,JIT)技術(shù)或者直接在專用芯片上執(zhí)行指令的技術(shù),甚至可以是它們的混合技術(shù)。由于指令系統(tǒng)的簡單性,使得虛擬機執(zhí)行指

30、令的過程十分簡單,從而有利于提高指令的執(zhí)行效率。本地方法接口本地方法是把Java程序與非Java語言程序和平臺相關(guān)功能結(jié)合的有效方式,在考慮較少安全性和可移植性的情況下,Java本地方法對于大量已有非Java軟件的利用,以及直接操縱硬件的程序?qū)l(fā)揮很好的作用。本地方法接口(JavaNativeInierface,JNI)是用于實現(xiàn)與本地方法交互的機制,它可以使得開發(fā)者在一特定的主機平臺上,把與JNI兼容的本地方法以二進制形式連接到任何支持JNI的虛擬機實現(xiàn)上。JNI最重要的好處是它沒有對底層Java虛擬機的實現(xiàn)施加任何限制。因此,Java虛擬機廠商可以在不影響虛擬機其它部分的情況下添加對JNI

31、的支持。程序員只需編寫一種版本的本地應用程序或庫,就能夠與所有支持JNI的Java虛擬機協(xié)同工作。然而,對于本地方法接口,實現(xiàn)Java虛擬機并不要求一定要有它的支持,甚至可以完全沒有,Sun公司實現(xiàn)JNI是出于可移植性的考慮,當然也可以設(shè)計出其它的本地接口來代替Sun公司的JNI。在Web開發(fā)方面Java跟PHP八大對比一、 語言比較PHP是解釋執(zhí)行的服務器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的熟悉php的開發(fā)。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向?qū)ο蟮某绦蛟O(shè)計方法。所以java不如php好學。Java首先要編

32、譯成字節(jié)碼.class文件,然后在java虛擬機上解釋執(zhí)行。Java的Web開發(fā)首先最容易想到的就是JSP(現(xiàn)在已經(jīng)到JSP2.0),原來的java的Web開發(fā)都是用servlet來實現(xiàn)的,用servlet來開發(fā)需要程序員在java的源文件中嵌入大量的html代碼。所以后來就出現(xiàn)了JSP,JSP可以方便的嵌入到html文件當中,其實jsp文件在服務器上執(zhí)行的時候首先會被應用服務器轉(zhuǎn)換成servlet,然后再編譯執(zhí)行。Jsp可以通過servlet和JavaBean的支持產(chǎn)生強大的功能。JavaBean 是一種可復用的、跨平臺的軟件組件。使用javabean可以方便的實現(xiàn)java代碼和html的分

33、離,能夠增強系統(tǒng)的功能和軟件的復用性。Java的Web開發(fā)屬于SUN公司定義的J2EE其中的規(guī)范。而且在J2EE中包括了java的Web開發(fā)的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特別適合于做大型的企業(yè)級的應用。二、 數(shù)據(jù)庫訪問比較Java通過JDBC來訪問數(shù)據(jù)庫,通過不同的數(shù)據(jù)庫廠商提供的數(shù)據(jù)庫驅(qū)動方便地訪問數(shù)據(jù)庫。訪問數(shù)據(jù)庫的接口比較統(tǒng)一。PHP對于不同的數(shù)據(jù)庫采用不同的數(shù)據(jù)庫訪問接口,所以數(shù)據(jù)庫訪問代碼的通用性不強。例如:用Java開發(fā)的Web應用從MySQL數(shù)據(jù)庫轉(zhuǎn)到Oracle數(shù)據(jù)庫只需要做很少的修改。而PHP則需要做大量的

34、修改工作。三、 系統(tǒng)設(shè)計架構(gòu)比較采用Java的Web開發(fā)技術(shù),需要使用的是面向?qū)ο蟮南到y(tǒng)設(shè)計方法,而PHP還是采用面向過程的開發(fā)方法。所以用Java進行開發(fā)前期需要做大量的系統(tǒng)分析和設(shè)計的工作。四、 跨平臺性Java和PHP都有很好的跨平臺的特性。幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統(tǒng)上。五、 開發(fā)成本比較PHP最經(jīng)典的組合就是:PHP + MySQL + Apache。非常適合開發(fā)中小型的Web應用,開發(fā)的速度比較快。而且所有的軟件都是開源免費的,可以減少投入。Java的Web應用服務器有免費Tomcat、JBoss等,如果需要更好的商業(yè)化的服務有

35、:Web Sphere和 Web logic。六、 分布式多層架構(gòu)比較PHP只能實現(xiàn)簡單的分布式兩層或三層的架構(gòu),而JAVA在這方面就比較強大,可以實現(xiàn)多層的網(wǎng)絡(luò)架構(gòu)。數(shù)據(jù)庫層(持久化層)、應用(業(yè)務)邏輯層、表示邏輯層彼此分開,而且現(xiàn)在不同的層都已經(jīng)有一些成熟的開發(fā)框架的支持。例如Struts就是利用java的Web開發(fā)技術(shù)實現(xiàn)了MVC的設(shè)計模式,而在業(yè)務邏輯層也有Spring框架,數(shù)據(jù)庫持久化層有Hibernate等框架。這些框架可以方便開發(fā)者高效、合理、科學得架構(gòu)多層的商業(yè)應用。下面簡要的說一下Struts,它實質(zhì)上是在JSP Model2的基礎(chǔ)上實現(xiàn)的一個MVC(Model、View、

36、Controler)框架。JSP Model2體系結(jié)構(gòu)是一種聯(lián)合使用JSP 與Servlet 來提供動態(tài)內(nèi)容的方法。在Struts框架中,模型由實現(xiàn)業(yè)務邏輯的JavaBean或EJB組件構(gòu)成,控制器由Servlet實現(xiàn)的,視圖由一組JSP文件組成。采用Struts可以明確角色的定義和開發(fā)者與網(wǎng)頁設(shè)計者的分工。而且項目越復雜,其優(yōu)勢越明顯。七、 源代碼安全PHP開發(fā)的程序的源代碼都是公開的,他人拿到php開發(fā)的程序后都可以進行修改。Java開發(fā)的程序,最后用戶拿到的是只是一些編譯好的class類,無法看到完整的源代碼,安全性高。八、性能比較有人做過試驗,對這兩種種語言分別做回圈性能測試及存取Or

37、acle數(shù)據(jù)庫測試。在循環(huán)性能測試中,JSP只用了令人吃驚的四秒鐘就結(jié)束了20000*20000的回圈。而PHP測試的是2000*2000循環(huán)(少一個數(shù)量級),卻分別用了63秒。數(shù)據(jù)庫測試中,二者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。所述,我個人認為,PHP適合于快速開發(fā),中小型應用系統(tǒng),開發(fā)成本低,能夠?qū)ψ儎拥男枨笞鞒隹焖俚姆磻?。而Java適合于開發(fā)大型的應用系統(tǒng),應用的前景比較廣闊,系統(tǒng)易維護、可復用性較好。還有,同樣功能的系統(tǒng)用Java開發(fā)的系統(tǒng)要比PHP開發(fā)的系統(tǒng)的價格要高

38、。SSH框架的優(yōu)點1) Struts:首先struts是開源的,使開發(fā)者可以更深了解他的原理和內(nèi)部實現(xiàn)機制,可擴展性采用MVC模式分離業(yè)務邏輯層、顯示層、模型層。低耦合,結(jié)構(gòu)清晰,使開發(fā)者專注于業(yè)務邏輯,還有豐富的標簽庫供使用,支持國際化,還有很高的重用性。2) HibernateHibernate是數(shù)據(jù)庫連接的中間件,而且對程序的依賴性很小,透明性。使用了Java的反射機制輕量級,對jdbc進行了輕量級的封裝,而且可以在程序中取代EJB的cmp,完成持久化性能很好,而且還是輕量級、很靈活,它支持多種數(shù)據(jù)庫的一對多的復雜關(guān)系,可以完全使用面向?qū)ο蟮乃枷肴ゾ幊?,使用了JTA、JDBC和JNDI技

39、術(shù)。3) SpringSpring 是基于ioc(控制反轉(zhuǎn))和aop(面向切面編程)的框架而且封裝了所有的事務,不需要程序員自己去提交事務,一切都由web容器去控制,省去了很多代碼。Spring采用了單態(tài)和工廠模式,采用mvc模式下的java程序 ,盡管已經(jīng)把層與層之間的關(guān)系耦合度降低,但還是有聯(lián)系,這時候使用Spring 把所有bean都交由web容器去控制、創(chuàng)建和銷毀,這樣才真正的降低了耦合度,而且bean的創(chuàng)建的生命周期都在web容器里控制,而且它從工廠里實例的bean都是單態(tài)的,當然可以加一個屬性讓它不是單態(tài)。面向接口編程,只需要知道要實現(xiàn)的接口就可以,不需要知道他的具體實現(xiàn)而且使用s

40、pring框架有利于單元測試。女人,應該活出自己的自信和精彩,不能把賴以生存的東西寄托在他人身上,不管他多么愛你,終有一天會厭倦你的依賴和無所事事。越有能力的女人,越自信;越有能力的女人,越可愛;越有能力的女人,越值得擁有和疼惜。愛情,充滿了熱烈和激情,在熱情戀愛中的男女,都會忽略掉對方的缺點,看到的都是優(yōu)點,甚至失去理智和冷靜。倘若戀愛時候,太過于理智和冷靜,可能就不叫愛情。再熱烈的愛,都有冷卻的時候,冷卻后的我們,始終是要考慮現(xiàn)實生活里的柴米油鹽醬醋茶的。最好的愛情,是能夠經(jīng)歷時間的考驗,在激情過后,依然愿意陪你在俗世煙火里,看細水長流。都說陪伴是最長情的愛,但是最好的陪伴,就是簡單的柴米

41、油鹽。人生充滿世味,需要醉人的浪漫,更離不開俗世煙火,然而不是每一個人都會因為愛情,而走進一生無悔的圓滿婚姻里。再浪漫的婚姻,都離不開柴米油鹽醬醋茶的瓢碗碰撞。好的愛情和婚姻,是兩個人同視著一個方向,攜手并進。在婚姻里,女人的獨立并不是為了證明什么?而是讓自己活的更精彩,讓生活更幸福。優(yōu)秀的女人,也會讓你更具有魅力。真正愛你的人,不光讓你有豐衣足食的生活,更會讓你越來越優(yōu)秀。一個聰明的女人,她不會因為安逸的生活去愛上一個男人,她會因為這個男人的優(yōu)秀而義無反顧的愛上他。一般來說,男人和女人,是一樣的,都希望另一半是可以在生活里獨立行走的人,是可以給自己成長和進步的人,能夠讓自己有安全感,絕不是在患得患失里生活。真正愛你的人,沒有配不配,也許對方不是最好條件的一個,但一定是那個可以讓你進步,也最讓你悸動心靈的人。沒有誰愿意看到自己的另一半,每一天都在渾渾噩噩不思進取的活著。愛你的人,相處中會讓你越活越漂亮,越活越精彩。在愛情的路上,兩個真心相愛的人,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論