java筆試題及答案(公司)_第1頁
java筆試題及答案(公司)_第2頁
java筆試題及答案(公司)_第3頁
java筆試題及答案(公司)_第4頁
免費預覽已結束,剩余10頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精品文檔1.web 中的 forward和 redirect 的區別?(前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward() 方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。2. xml 在解釋的時候 DOM 和 SAX 協議的區別和含義?DOM: 處理大型文件時其性能下降的非常厲害。這個問題是由DOM

2、 的樹結構所造成的, 這種結構占用的內存較多,而且 DOM 必須在解析文件之前把整個文檔裝入內存,適合對 XML的隨機訪問SAX: 不現于 DOM,SAX是事件驅動型的 XML解析方式。它順序讀取 XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML 文件,適合對 XML 的順序訪問3 說明 JNDI 、 JMS 、 JTA 、 RMI 的意思?JNDI(Java Naming and Directory Interface)是一個應用程序設計的API ,為開發人員提供了查找和訪問各種命名

3、和目錄服務的通用、統一的接口,類似JDBC 都是構建在抽象層上。JMS ( Java Messaging Service )是 Java 平臺上有關面向消息中間件的技術規范,翻譯為Java 消息服務。 JMS 支持點對點和發布/訂閱兩種消息模型。JTA(Java Transaction API)為 J2EE平臺提供了分布式事務服務。要用 JTA 進行事務界定,應用程序要調用javax.transaction.UserTransaction 接口中的方法 .RMI 是 Java 的一組擁護開發分布式應用程序的API 。RMI 使用 Java 語言接口定義了遠程對象,它集合了Java序列化和 Ja

4、va 遠程方法協議 (JavaRemote Method Protocol) 。它大大增強了Java開發分布式應用的能力4.單子模式Public class SignlePrivate Signle()Pirvate static Signle signle = new Signle();Public static Signle gets()Retrun signle;*2public class MyBean private static MyBean instance = null;private MyBean()/do somethingpublic static synchronize

5、d MyBean getInstance()if(instance = null)instance = new MyBean();.精品文檔return instance;你是說單例模式是吧,這個單例模式是延遲加載的模式.還有一種就是即時加載,不需要判斷是否有實例存在,先自己 new 出一個實例 .5 數據庫中 left join的意思,和在什么場合中應用?LEFT JOIN操作用于在任何的FROM 子句中,組合來源表的記錄。使用LEFT JOIN 運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中并沒有相符值的記錄。6 ejb

6、中的 sessionbean 和 entitybean的區別和含義?SessionBean 在 J2EE 應用程序中被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他 EJB 組件。 EntityBean 被用來代表應用系統中用到的數據。對于客戶機, SessionBean 是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。對于客戶機, EntityBean 是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。7 抽象類和接口的區別1:一個類可以實現任意多的接口,但是最多只能對一個抽象類進行子類化。2:一個抽象類可以包括非抽象方

7、法,而一個接口的所有方法在效果上都是抽象的。3:一個抽象類可以申明并使用變量,而一個接口不行。4:一個抽象類中的方法的訪問修飾符可以使public,internal,protected,protected internal,private ,而接口成員的訪問修飾符在默認情況下都是public ,而且,在申明接口成員時,不允許使用訪問修飾符(甚至不能使用 public )。5:一個抽象類可以定義構造函數,而一個接口不行。8 對象序列化的含義Java 序列化技術可以使你將一個對象的狀態寫入一個Byte 流里,并且可以從其它地方把該 Byte 流里的數據讀出來。重新構造一個相同的對象。這種機制允許你

8、將對象通過網絡進行傳播,并可以隨時把對象持久化到數據庫、文件等系統里。Java 的序列化機制是RMI 、EJB、JNNI 等技術的技術基礎。9 數據庫中的鎖包括什么?基本的封鎖類型有兩種:排它鎖 (X 鎖 )和共享鎖 (S 鎖 ).所謂 X 鎖 ,是事務 T 對數據 A 加上 X 鎖時 ,只允許事務T 讀取和修改數據A,.所謂 S 鎖 ,是事務 T 對數據 A 加上 S 鎖時 ,其他事務只能再對數據A 加 S 鎖,而不能加X 鎖 ,直到 T 釋放 A 上的 S 鎖若事務T 對數據對象A 加了 S 鎖,則 T 就可以對A 進行讀取 ,但不能進行更新 (S 鎖因此又稱為讀鎖),在 T 釋放 A 上

9、的 S 鎖以前 ,其他事務可以再對A 加 S 鎖,但不能加 X 鎖 ,從而可以讀取A, 但不能更新A.10 jsp 和 serverlet 的區別(1).簡單的來說Jsp 就是含有Java 代碼的 html ,而 servlet 是含有 html 的 Java 代碼;(2).Jsp 最終也是被解釋為servlet 并編譯再執行,Jsp 不過是 servlet 的另一種編寫方式;(3).Jsp 擅長表示, servlet 擅長數據處理,在 MVC 三層結構中, Jsp 負責 V (視圖), servlet 負責 C(控制),各有優勢,各司其職;11. oracle 中數據表的交集怎么表示第一種方

10、法:利用操作符intersectintersect操作符用來合并兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前.精品文檔提是兩個查詢的列的數量和數據類型必須完全相同。舉例說明:表 A 的數據結構:中文名稱字段名類型長度學號codeC4姓名nameC8表 B 的數據結構:中文名稱字段名類型長度學號Student_codeC4姓名Student_nameC8分數scoreN3表 A 的數據為:( '1101 ' , '韓甲 '),( '1102 ' ,'丁乙 ')表 B 的數據為:( '1101 '

11、 , '韓甲 ',99 ),('1102 ' , '丁乙 ',89 ),('1103 ' , '徐靜 ' ,94 )在 oracle 中運行以下查詢,圖1 顯示了這個查詢的結果:SQL>select code, name from Aintersectselect student_code,student_name from B;圖 1 使用 intersect 操作符查詢的結果第二種方法: in 子句in 子句可以在子查詢中為where 子句計算所得的值創建一個列表。這種方法與前一種方法有所不同的是,前一種

12、方法比較多列但只使用一個intersect就行了,而一個in 子句用來比較兩個子查詢的一列,比較幾列就要使用幾個 in 子句。下面舉例說明如何取得兩個查詢的交集。.精品文檔仍以和兩張數據表為例,在oracle 中運行以下查詢,圖2 顯示了這個查詢的結果:SQL>select code,name from Awhere A.code in(select student_code from B)and A.name in(select student_name from B)order by A.code;查詢結果如圖2 所示。圖 2 使用 in 子句查詢的結果以上為筆者使用oracle7.

13、3的體會,如有不當之處,請不吝賜教。12 jsp 頁面中如何傳遞參數( 1)直接在 URL請求后添加( 2) jsp:param3)設置 session和 request13 jsp 中的 doget ()和 dopost ()方法的作用?這個兩個方法都是 http 協議的方法, doget 用于傳輸數據量較小 (密碼會泄露) ,dopost 數據量較大,14 什么是用例?如何確定用例?在不展現一個系統或子系統內部結構的情況下,對系統或子系統的某個連貫的功能單元的定義和描述。一個用例可以看作是系統的一個功能,例如增加用戶 , 增加角色 ,查詢一個具體的一個事物, 在 Ejb的設計中 ,.精品文

14、檔一個 use case跟 Session bean的一個方法是對應的( 使用的 session fasade模式 ), 你說的基礎數據管理, 我會把它處理成為一個抽象用例, 因為我認為基礎數據這個概念非常的抽象, 什么是真正的基礎數據?例如說一個系統中郵政編碼算是這個系統的基礎數據,那么 " 郵政編碼修改 " 這個就應該算是用例了.15 活動圖和時序圖的區別?時序圖主要強調時間的順序活動圖主要強調空間上類的交互16 什么是策略模式?什么情況下使用?策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換Context(應用場景):1 、需要使用Conc

15、reteStrategy提供的算法。2、 內部維護一個Strategy 的實例。3、 負責動態設置運行時Strategy 具體的實現算法。4、負責跟 Strategy之間的交互和數據傳遞。17 面向接口編程的好處使用接口編程,易于程序擴展,降低程序耦合性。包括結構清晰,類之間通信簡單易懂,擴展性好,提高復用性等等。18 事物事務就是一系列的操作,這些操作完成一項任務.只要這些操作里有一個操作沒有成功,事務就操作失敗 ,發生回滾事件 .即撤消前面的操作 ,這樣可以保證數據的一致性 .而且可以把操作暫時放在緩存里 ,等所有操作都成功有提交數據庫 ,這樣保證費時的操作都是有效操作 .1 簡答題3)說

16、明 jndi 、jms 、 jta 、 rmi 的意思?web 容器:給處于其中的應用程序組件(JSP,SERVLET )提供一個環境,使JSP,SERVLET 直接更容器中的環境變量接口交互,不必關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。該容器提供的接口嚴格遵守 J2EE 規范中的 WEB APPLICATION 標準。我們把遵守以上標準的 WEB 服務器就叫做 J2EE 中的 WEB 容器。EJB 容器: Enterprise java bean 容器。更具有行業領域特色。他提供給運行在其中的組件EJB 各種管理功能。只要滿足

17、J2EE 規范的 EJB 放入該容器,馬上就會被容器進行高效率的管理。并且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理。JNDI :( Java Naming & Directory Interface ) JAVA 命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序的功能。JMS:( Java Message Service)JAVA 消息服務。主要實現各個應用程序之間的通訊。包括點對點和廣播。JTA:( Java Transaction API)JAVA 事務服務。提供各種分布式事務服

18、務。應用程序只需調用其提供的接口即可。JAF:(Java Action FrameWork )JAVA 安全認證框架。提供一些安全控制方面的框架。讓開發者通過各種部署和自定義實現自己的個性安全控制策略。.精品文檔RMI/IIOP: ( Remote Method Invocation /internet 對象請求中介協議) 他們主要用于通過遠程調用服務。 例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,我們可以在本地計算機上實現對其直接調用。當然這是要通過一定的規范才能在異構的系統之間進行通信。RMI 是 JAVA 特有的。4)數據庫中left join的意思,和在什么場合中應用?簡

19、單說左表全都顯示右表可能為空應用場合就是當左表的數據全要右表有就顯示沒有就不顯這個比較細微,我盡量回答。總的來說, 2 種寫法,在oracle 里,效率和性能區別不大。如果非要比較的話,大概有以下區別:(+) 和 left join,在檢索顯示的字段很少的時候,或者干脆就是檢索count(*) 的時候,在效率和性能上,是一樣,甚至cpucost 都完全一樣;但是在檢索顯示的字段比較多得時候,第一次執行,left join比( + )的效率高;當然,執行第二次之后,由于數據已經到了緩存,區別也不明顯了,基本是一致的。6) ejb 中的 sessionbean 和 entitybean 的區別和含

20、義?EntityBean: 主要是指可存儲的物件,比如:學生,學校,公司,職員等等。 必須是SerializableSessionBean: 主要是指商業邏輯物件,比如:購物,執行某功能etc.表示的是一種過程SessionBean 又分為:Stateless 和 Stateful 區別就是, Stateful 有狀態記憶, Stateless 無狀態記憶Message-Driven Bean: 主要是用于做一些JMS message的處理。這一點可以從Message-Driven Bean 的構架里看到:當客戶發送一個message 到 JMS,Container 就會從Beans Pool

21、 中把注冊了的Message-DrivenBean 調出來并且后臺運行.我這里是概述,建議你最好找一本EJB 的書來讀.最新的 EJB 的版本是3.07)抽象類和接口的區別(java 經典筆試題中也有)?8)對象序列化的含義?1、序列化是干什么的?簡單說就是為了保存在內存中的各種對象的狀態,并且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存 Object States,但是 Java 給你提供一種應該比你自己好的保存對象狀態的機制 ,那就是序列化。2、什么情況下需要序列化a)當你想把的內存中的對象保存到一個文件中或者數據庫中時候;b)當你想用套接字在網絡上傳送對象的時候

22、;c)當你想通過RMI 傳輸對象的時候;3、當對一個對象實現序列化時,究竟發生了什么?.精品文檔在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實例變量(instance ariable)比如:Foo myFoo = new Foo();myFoo .setWidth(37);myFoo.setHeight(70);當通過下面的代碼序列化之后, MyFoo 對象中的 width 和 Height 實例變量的值(37,70)都被保存到 foo.ser 文件中, 這樣以后又可以把它 從文件中讀出來, 重新在堆中創建原來的對象。當然保存時候不僅僅是保存對象的實例變量的

23、值,JVM 還要保存一些小量信息,比如類的類型等以便恢復原來的對象。FileOutputStream fs = new FileOutputStream("foo.ser");ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myFoo);4、實現序列化(保存到一個文件)的步驟a) Make a FileOutputStreamjava 代碼FileOutputStream fs = new FileOutputStream("foo.ser");b) Make a Obj

24、ectOutputStreamjava 代碼ObjectOutputStream os = new ObjectOutputStream(fs);c) write the objectjava 代碼os.writeObject(myObject1);os.writeObject(myObject2);os.writeObject(myObject3);d) close the ObjectOutputStreamjava 代碼os.close();5、舉例說明java 代碼public class Box implements Serializable.精品文檔private int widt

25、h;private int height;public void setWidth(int width)this.width = width;public void setHeight(int height)this.height = height;public static void main(String args)Box myBox = new Box();myBox.setWidth(50);myBox.setHeight(30);tryFileOutputStream fs = new FileOutputStream("foo.ser");ObjectOutpu

26、tStream os = new ObjectOutputStream(fs);os.writeObject(myBox);os.close();catch(Exception ex)ex.printStackTrace();6、相關注意事項a)當一個父類實現序列化,子類自動實現序列化,不需要顯式實現Serializable 接口;b)當一個對象的實例變量引用其他對象,序列化該對象時也把引用對象進行序列化;c)并非所有的對象都可以序列化,,至于為什么不可以,有很多原因了,比如:1.安全方面的原因,比如一個對象擁有private, public 等 field,對于一個要傳輸的對象,比如寫到文件

27、,或者進行 rmi 傳輸等等,在序列化進行傳輸的過程中,這個對象的private 等域是不受保護的。2. 資源分配方面的原因,比如 socket, thread 類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。2 選擇題說明:不是太難所以,我只說下大概考試的內容。1)抽象類可以是final 、private 嘛?java 類一旦被聲明為abstract(抽象類),必須要繼承或者匿名(其實匿名也是種繼承)才能使用。.精品文檔而 final 則是讓該類無法被繼承,所以final 是必然不能和abstract 同時聲明的但是 private 呢?一

28、個類被聲明為private 的時候, 它當然是內部類,內部類是可以被它的外部類訪問到的,所以,可以繼承,private 和 abstract 不沖突。2)異常能出來的情況有什么?3) finally 塊的運用,就是出一道程序,然后讓你寫出輸出的結果來,在finally 塊中的 println ( “”)不管如何總是要輸出出來的。4) jsp 中的 doget ()和 dopost ()方法的作用?第一: doGet 方法是 servlet 提交報頭數據之類的用的,doGet 方法提交表單的時候會在url 后邊顯示提交的內容,正是因為這樣所以我們一般對于需要保密的的信息(比如密碼等) 不用這樣的

29、提交方式;而且 doGet方法只能提交 256 個字符,這就指出了它的使用環境,對于我們傳遞短的文字信息的時候可以用它,但是當我們傳遞的是比較大的媒體文件的時候就不能夠使用它了。doPost 則沒有這個限制。通常我們使用的都是 doPost 方法,你只要在 servlet 中讓這兩個方法互相調用就行了,例如在 doGet 方法中這樣寫public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request,respo

30、nse);再把業務邏輯直接寫在 doPost 方法中。 servlet 碰到 doGet 方法調用直接就會去調用 doPost 因為他們的參數都一樣。而且 doGet 方法處理中文問題很困難,要寫過濾器之類的。第二:不管是post 還是 get 方法提交過來的連接,都會在service 中處理,然后,由service 來交由相應的doPost 或 doGet 方法處理, 如果你重寫了service 方法,就不會再處理doPost 或 doGet 了。不管是 post 還是get 方法提交過來的連接, 都會在 service 中處理,然后,由 service 來交由相應的 doPost 或 do

31、Get 方法處理,如果你重寫了 service 方法,就不會再處理 doPost 或 doGet 了。5)數據庫中的鎖包括什么?數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。加鎖是實現數據庫并發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向系統發出請求,對其加鎖。加鎖后事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此數據對象進行更新操作。在數據庫中有兩種基本的鎖類型:排它鎖( Exclusive Locks ,即 X

32、 鎖)和共享鎖( Share Locks,即 S 鎖)。當數據對象被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的數據對象可以被其他事務讀取,但不能修改。數據庫利用這兩種基本的鎖類型來對數據庫的事務進行并發控制。根據保護的對象不同,Oracle 數據庫鎖可以分為以下幾大類:DML 鎖( data locks,數據鎖),用于保護數據的完整性;.精品文檔DDL 鎖( dictionary locks ,字典鎖),用于保護數據庫對象的結構,如表、索引等的結構定義;內部鎖和閂( internal locks and latches),保護數據庫的內部結構,應用于SGA ;在我們實際應用開發中

33、涉及較多的是DML 鎖,其他兩種的話DBA 會更加關心點;DML 鎖的目的在于保證并發情況下的數據完整性,主要包括 TM 鎖和 TX 鎖,其中 TM 鎖稱為表級鎖, TX鎖稱為事務鎖或行級鎖。當 Oracle 執行 DML 語句時,系統自動在所要操作的表上申請TM 類型的鎖。當 TM 鎖獲得后,系統再自動申請 TX 類型的鎖,并將實際鎖定的數據行的鎖標志位進行置位。這樣在事務加鎖前檢查TX 鎖相容性時就不用再逐行檢查鎖標志,而只需檢查TM 鎖模式的相容性即可,大大提高了系統的效率。TM 鎖包括了 SS、SX、 S、 X 等多種模式,在數據庫中用0 6 來表示。不同的 SQL 操作產生不同類型的

34、 TM 鎖。如下圖所示:值鎖模式鎖描述 SQL0NONE1NULL空 SELECT2SS(ROW-S)行級共享鎖其他對象只能查詢這些數據行SELECT FOR UPDA TE、 LOCK FOR UPDA TE 、LOCK ROW SHARE3SX(ROW-X)行級排它鎖在提交前不允許做DML 操作INSERT 、 UPDA TE、 DELETE 、LOCK ROW SHARE4S(SHARE) 共享鎖CREA TE INDEX 、LOCK SHARE5SSX(S/ROW-X)共享行級排它鎖LOCK SHARE ROW EXCLUSIVE6X(eXclusive)排它鎖ALTER TABLE

35、、DROP TABLE 、 DROP INDEX 、TRUNCATE TABLE 、 LOCK EXCLUSIVE在數據行上只有X 鎖(排他鎖) 。在Oracle 數據庫中,當一個事務首次發起一個DML 語句時就獲得一個TX 鎖,該鎖保持到事務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行DML 語句時, 第一個會話在該條記錄上加鎖,其他的會話處于等待狀態。當第一個會話提交后,TX 鎖被釋放,其他會話才可以加鎖。在大概了解oracle 的鎖機制之后,我們來解決幾個基本的問題:1.UPDA TE/DELETE 操作會將RS 鎖定,直至操作被COMMIT或者 ROLLBACK ;若操作未 C

36、OMMIT之前其他 session 對同樣的 RS 做變更操作,則操作會被hold,直至前session的UPDA TE/DELETE 操作被 COMMIT ;2.session內外 SELECT 的 RS 范圍前提: INSERT 、 UPDATE 操作未 COMMIT之前進行 SELECT ;若在同一 session 內, SELECT 出來的 RS 會包括之前 INSERT 、 UPDATE 影響的記錄;若不在同一 session 內, SELECT 出來的 RS 不會包括未被 COMMIT 的記錄;3.SELECT. FOR UPDA TE OF cols NOWAIT/WAIT SK

37、IP LOCKED.精品文檔OF cols:只鎖定指定字段所在表的RS,而沒有指定的表則不會鎖定,只會在多表聯合查詢時出現;NOWAIT :語句不會 hold ,而是直接返回錯誤ORA-00054: resource busy and acquire with NOWAIT specified ;WAIT N :語句被 hold N 秒,之后返回錯誤ORA-30006: resource busy; acquire with WAIT timeout expired;SKIP LOCKED :不提示錯誤,而是直接返回no rows selected;以上幾個選項可以聯合使用的,比較推薦的有:S

38、ELECT. FOR UPDA TE NOWAIT :對同一 RS 執行該 SQL 時,直接返回錯誤;SELECT. FOR UPDA TE NOWAIT SKIP LOCKED:對同一 RS 執行該 SQL 時,直接返回空行;PS:當 RS 被 LOCK 住之后,只對同樣請求 LOCK 的語句有效,對無需 LOCK 的 SELECT 語句并沒有任何影響;6) jsp 和 serverlet 的區別或者是他們的關系?一. Servlet 是什么 ?客戶機 / 服務器計算的發展。Java 提供了一整套客戶機/服務器解決方案,在這個方案中, 程序可以自動地下載到客戶端并執行,這就是applet。但

39、是它僅僅是問題的一半。問題的另一半就是Servlet。servlet 可以被認為是服務器端的applet。 servlet 被 Web 服務器加載和執行,就如同applet 被瀏覽器加載和執行一樣。 servlet 從客戶端 (通過 Web 服務器 )接收請求,執行某種作業,然后返回結果。使用servlet 的基本流程如下:·客戶端通過HTTP 提出請求 .·Web 服務器接收該請求并將其發給 servlet。如果這個 servlet 尚未被加載, Web 服務器將把它加載到 Java 虛擬機并且執行它。·servlet 將接收該HTTP 請求并執行某種處理。&#

40、183;servlet 將向 Web 服務器返回應答。·Web 服務器將從servlet 收到的應答發送給客戶端。由于 servlet 是在服務器上執行, 通常與 applet 相關的安全性的問題并不需實現。要注意的是 Web 瀏覽器并不直接和 servlet 通信, servlet 是由 Web 服務器加載和執行的。而 servlet 是用 Java 編寫的,所以它們一開始就是平臺無關的。這樣,Java 編寫一次就可以在任何平臺運行(write once,run anywhere)的承諾就同樣可以在服務器上實現了。servlet 還有一些 CGI 腳本所不具備的獨特優點: (本人對

41、 CGI 并不是十分了解,所以這些特點不能完全的體會到,這也是摘自論壇的貼子,請見諒)servlet 是持久的。 servlet 只需 Web 服務器加載一次, 而且可以在不同請求之間保持服務( 例如一次數據庫連接) 。與之相反, CGI 腳本是短暫的、瞬態的。每一次對CGI 腳本的請求,都會使 Web 服務器加載并執行該腳本。一旦這個 CGI 腳本運行結束,它就會被從內存中清除,然后將結果返回到客戶端。CGI 腳本的每一次使用,都會造成程序初始化過程(例如連接數據庫 )的重復執行。servlet 是與平臺無關的。如前所述,servlet 是用 Java 編寫的,它自然也繼承了Java 的平臺

42、無關性。servlet 是可擴展的。由于 servlet 是用 Java 編寫的,它就具備了Java 所能帶來的所有優點。Java 是健壯的、面向對象的編程語言,它很容易擴展以適應你的需求。servlet 自然也具備了這些特征。servlet 是安全的。從外界調用一個servlet 的惟一方法就是通過Web 服務器。這提供了高水平的安全性保障,尤其是在你的 Web 服務器有防火墻保護的時候。setvlet 可以在多種多樣的客戶機上使用。由于 servlet 是用 Java 編寫的,所以你可以很方便地在HTML中使用它們,就像你使用 applet 一樣。那么, Servlet 是怎樣執行的?怎樣

43、來寫一個Servlet,它的基本架構是怎么樣的?這些問題,將在后面部分給予介紹。二.JSP 與 Servlet現在已經對Servlet 有了大概的了解,現在我們就來說說JSP 和 Servlet 的關系。JSP 是一種腳本語言,包裝了Java Servlet 系統的界面,簡化了Java 和 Servlet 的使用難度,同時通過擴展JSP 標簽 (TAG) 提供了網頁動態執行的能力。盡管如此,JSP 仍沒有超出Java 和 Servlet 的范圍,不僅JSP.精品文檔頁面上可以直接寫Java 代碼,而且JSP 是先被譯成Servlet 之后才實際運行的。JSP 在服務器上執行,并將執行結果輸出到

44、客戶端瀏覽器,我們可以說基本上與瀏覽器無關。它是與JavaScript 不同的, JavaScript 是在客戶端的腳本語言,在客戶端執行,與服務器無關。那么 JSP是什么?就是Servlet.JSP與 Servlet 之間的主要差異在于,JSP 提供了一套簡單的標簽,和HTML 融合的比較好,可以使不了解Servlet 的人可以做出動態網頁來。對于Java 語言不熟悉的人( 比如像我 ),會覺得 JSP 開發比較方便。JSP 修改后可以立即看到結果, 不需要手工編譯, JSP引擎會來做這些工作; 而 Servelt 缺需要編譯,重新啟動 Servlet引擎等一系列動作。但是在JSP 中, H

45、TML 與程序代碼混雜在一起,而Servlet 卻不是這樣。也許大家比較混亂了,那么 Servlet 又是什么?下面我們對JSP的運行來做一個簡單的介紹,告訴大家怎樣來執行一個JSP文件:當 Web 服務器 (或 Servlet 引擎 ,應用服務器 )支持 JSP引擎時, JSP 引擎會照著 JSP的語法,將 JSP 文件轉換成 Servlet 代碼源文件, 接著 Servlet 會被編譯成 Java 可執行字節碼 (bytecode),并以一般的 Servlet 方式載入執行JSP語法簡單,可以方便的嵌入HTML 之中,很容易加入動態的部分,方便的輸出HTML 。在 Servlet 中輸出

46、HTML缺需要調用特定的方法,對于引號之類的字符也要做特殊的處理,加在復雜的HTML頁面中作為動態部分,比起JSP 來說是比較困難的。除去了轉換和編譯階段,JSP 和 Servlet 之間的區別實在是不大。JSP引擎通常架構在Servlet 引擎之上,本身就是一個Servlet,把 JSP 文件轉譯成Servlet 源代碼,再調用 Java編譯器,編譯成 Servlet。這也是 JSP 在第一次調用時速度比較慢的原因,在第一次編譯之后,JSP 與 Servlet速度相同 .下面我們來看看為什么他們在第一次編譯后再編譯的速度相同:在整個運行過程中, JSP引擎會檢查編譯好的JSP(以 Servl

47、et 形式存在 )是否比原始的JSP 文件還新,如果是,JSP引擎不會編譯 ;如果不是,表示JSP 文件比較新,就會重新執行轉譯與編譯的過程。為了有個深刻的了解,我們看一下JSP 的運行和開發環境:瀏覽器:常見的瀏覽器有IE 和 Netscape 兩種。數據庫:常用的數據庫有Oracle,SQL Server,Informix,DB2,Sybase,Access,MySQL等。操作系統:常見的有Windows,Linux, 以及各種 Unix 系統。Web 服務器:常見的有IIS,Apache,Netscape Enterprise Server 等。JSP引擎:一般 JSP 引擎都以 Ser

48、vlet 引擎為基礎,并以 Servlet的形式出現。同時,在各種免費和商業引擎的實現中, Servlet 引擎和 Jsp 引擎通常也是一起出現,我們成為Servlet/JSP 引擎,或從某種成為 JSP 引擎。JSP引擎是可以提供 JSP 和 Servlet 運行支持并對其生存周期進行管理的系統級實體。在 JSP 頁面第一次被請求時, JSP 引擎會將 JSP 原始文件轉換成Servlet 源代碼,然后調用Java 編譯器,編譯成 Servlet,并在 Servlet 引擎中執行。 當再次有請求的時候, JSP 引擎會見差異編譯好的JSP 是否比原來的JSP 原始文件要新,如果是 ,運行 Servlet;如果不是,表示文件已經更新的了,就會從新執行轉換和編譯的過程。說到這里,也基本把 JSP和 Servlet 的關系說清楚了,從我的感覺上看用JSP 就可以了,簡單又方便,又可以和 Bean 很好的兼容使用,功能又很強大,為什么又出現了Servlet,它又有什么用?何況它的編寫又相對復雜。為了把問題說得更清楚一點,我想在這里說一下歷

溫馨提示

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

評論

0/150

提交評論