java筆試題及答案公司_第1頁(yè)
java筆試題及答案公司_第2頁(yè)
java筆試題及答案公司_第3頁(yè)
java筆試題及答案公司_第4頁(yè)
java筆試題及答案公司_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪(fǎng)問(wèn)SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的 XML解析方式。它順序讀取 XML文件,不需要一次全部裝載整 個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔結(jié)束,或者標(biāo)簽開(kāi)頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶(hù)通過(guò)在其 回調(diào)事件中寫(xiě)入處理代碼來(lái)處理 XML文件,適合對(duì) XML的順序訪(fǎng)問(wèn)3 說(shuō)明 JNDI、JMS、JTA、RMI 的意思?JNDI(Java Nami ng and Directory In terface)是一個(gè)應(yīng)用程序設(shè)計(jì)的API,為開(kāi)發(fā)人員提供了查找和訪(fǎng)問(wèn)各種命名和目錄服務(wù)的通用、統(tǒng)一的接口,

3、類(lèi)似JDBC都是構(gòu)建在抽象層上。JMS (Java Messaging Service )是Java平臺(tái)上有關(guān)面向消息中間件的技術(shù)規(guī)范,翻譯為Java消息服務(wù)。JMS支持點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱兩種消息模型。JTA(Java Transaction API)為J2EE平臺(tái)提供了分布式事務(wù)服務(wù)。要用JTA進(jìn)行事務(wù)界定,應(yīng)用程序要調(diào)用javax.transaction.UserTransaction 接口中的方法.RMI是Java的一組擁護(hù)開(kāi)發(fā)分布式應(yīng)用程序的API。RMI使用Java語(yǔ)言接口定義了遠(yuǎn)程對(duì)象,它集合了 Java序列化和 Java遠(yuǎn)程方法協(xié)議 (Java Remote Method Pro

4、tocol)。它大大增強(qiáng)了Java開(kāi)發(fā)分布式應(yīng)用的能力4.單子模式Public class Sig nlePrivate Sig nle()Pirvate static Signle signle = new Signle();Public static Signle gets()Retrun sig nle;*a public class MyBea n private static MyBean instance = null;private MyBea n()/do someth ingpublic static synchroni zed MyBea n get In sta nce(

5、) if(in sta nce = nu ll)in sta nce = new MyBea n();return in sta nee;你是說(shuō)單例模式是吧,這個(gè)單例模式是延遲加載的模式.還有一種就是即時(shí)加載,不需要判斷是否有實(shí)例存在, 先自己new出一個(gè)實(shí)例.5數(shù)據(jù)庫(kù)中l(wèi)eft join的意思,和在什么場(chǎng)合中應(yīng)用?LEFT JOIN操作用于在任何的 FROM子句中,組合來(lái)源表的記錄。使用LEFT JOIN運(yùn)算來(lái)創(chuàng)建一個(gè)左邊外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(gè)(左邊)開(kāi)始的兩個(gè)表中的全部記錄,即使在第二個(gè)(右邊) 表中并沒(méi)有相符值的記錄。6 ejb中的sessionbean和entitybe

6、an的區(qū)別和含義?Sessi on Bean在J2EE應(yīng)用程序中被用來(lái)完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)、調(diào)用其他EJB組件。EntityBean被用來(lái)代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。對(duì)于客戶(hù)機(jī),Session Bean是一種非持久性對(duì)象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。 對(duì)于客戶(hù)機(jī),EntityBean是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì) 象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。7抽象類(lèi)和接口的區(qū)別1: 一個(gè)類(lèi)可以實(shí)現(xiàn)任意多的接口,但是最多只能對(duì)一個(gè)抽象類(lèi)進(jìn)行子類(lèi)化。2: 個(gè)抽象類(lèi)可以包括非抽象方法,而一個(gè)接口的所有方法在效果上都是抽象的。3: 個(gè)抽象類(lèi)可以

7、申明并使用變量,而一個(gè)接口不行。4: 一個(gè)抽象類(lèi)中的方法的訪(fǎng)問(wèn)修飾符可以使public,internal,protected,protected internal,private,而接口成員的訪(fǎng)問(wèn)修飾符在默認(rèn)情況下都是public,而且,在申明接口成員時(shí),不允許使用訪(fǎng)問(wèn)修飾符(甚至不能使用 public)。5: 個(gè)抽象類(lèi)可以定義構(gòu)造函數(shù),而一個(gè)接口不行。8對(duì)象序列化的含義Java序列化技術(shù)可以使你將一個(gè)對(duì)象的狀態(tài)寫(xiě)入一個(gè)Byte流里,并且可以從其它地方把該Byte流里的數(shù)據(jù)讀出來(lái)。重新構(gòu)造一個(gè)相同的對(duì)象。這種機(jī)制允許你將對(duì)象通過(guò)網(wǎng)絡(luò) 進(jìn)行傳播,并可以隨時(shí)把對(duì)象持久化到數(shù)據(jù)庫(kù)、文件等系統(tǒng)里。Ja

8、va的序列化機(jī)制是 RMI、EJB、JNNI等技術(shù)的技術(shù)基礎(chǔ)。9數(shù)據(jù)庫(kù)中的鎖包括什么? 基本的封鎖類(lèi)型有兩種:排它鎖(X鎖)和共享鎖(S鎖).所謂X鎖,是事務(wù)T對(duì)數(shù)據(jù)A加上X鎖時(shí),只允許事務(wù)T讀取和修改數(shù)據(jù) A,.所謂S鎖,是事務(wù)T對(duì)數(shù)據(jù)A加上S鎖時(shí),其他事務(wù)只能再對(duì)數(shù)據(jù) A加S鎖,而不能加X(jué)鎖, 直到T釋放A上的S鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了 S鎖,則T就可以對(duì)A進(jìn)行讀取,但不能 進(jìn)行更新(S鎖因此又稱(chēng)為讀鎖),在T釋放A上的S鎖以前,其他事務(wù)可以再對(duì) A加S鎖,但不 能加X(jué)鎖,從而可以讀取 A,但不能更新A.10 jsp 和 serverlet 的區(qū)別(1).簡(jiǎn)單的來(lái)說(shuō)Jsp就是含有Java

9、代碼的html,而servlet是含有html的Java代碼;(2).Jsp最終也是被解釋為servlet并編譯再執(zhí)行,Jsp不過(guò)是servlet的另一種編寫(xiě)方式;(3).Jsp擅長(zhǎng)表示,servlet擅長(zhǎng)數(shù)據(jù)處理,在MVC三層結(jié)構(gòu)中,Jsp負(fù)責(zé)V (視圖),servlet負(fù)責(zé)C (控制),各有優(yōu)勢(shì),各司其職;11. oracle中數(shù)據(jù)表的交集怎么表示第一種方法:利用操作符intersectintersect操作符用來(lái)合并兩個(gè)查詢(xún),返回兩個(gè)查詢(xún)中都存在的記錄,即返回兩個(gè)查詢(xún)結(jié)果的交集,前提是兩個(gè)查詢(xún)的列的數(shù)量和數(shù)據(jù)類(lèi)型必須完全相同 舉例說(shuō)明:表A的數(shù)據(jù)結(jié)構(gòu):中文名稱(chēng)字段名學(xué)號(hào)code姓名nam

10、e表B的數(shù)據(jù)結(jié)構(gòu):中文名稱(chēng)字段名學(xué)號(hào)Student_code姓名Student_name分?jǐn)?shù)score類(lèi)型CC長(zhǎng)度48類(lèi)型CCN長(zhǎng)度483表A的數(shù)據(jù)為:('1101 ','韓甲'),('1102 ','丁乙')表B的數(shù)據(jù)為:('1101',韓甲',99),('1102 ','丁乙',89),('1103 ',徐靜',94)在oracle中運(yùn)行以下查詢(xún),圖1顯示了這個(gè)查詢(xún)的結(jié)果:SQL>select code, name from Ainterse

11、ctselect student_code,student_name from B;圖1使用intersect操作符查詢(xún)的結(jié)果第二種方法:in子句in子句可以在子查詢(xún)中為 種方法比較多列但只使用一個(gè)where子句計(jì)算所得的值創(chuàng)建一個(gè)列表。這種方法與前一種方法有所不同的是,前一intersect就行了,而一個(gè)in子句用來(lái)比較兩個(gè)子查詢(xún)的一列,比較幾列就要使用幾個(gè)in子句。下面舉例說(shuō)明如何取得兩個(gè)查詢(xún)的交集。仍以A和E兩張數(shù)據(jù)表為例,在oracle中運(yùn)行以下查詢(xún),圖 2顯示了這個(gè)查詢(xún)的結(jié)果:SQL>select code,name from A where A.code in(select

12、student_code from B) and A.name in(select student_name from B) order by A.code;查詢(xún)結(jié)果如圖2所示。圖2使用in子句查詢(xún)的結(jié)果以上為筆者使用oracle7.3的體會(huì),如有不當(dāng)之處,請(qǐng)不吝賜教。12 jsp頁(yè)面中如何傳遞參數(shù)(1)直接在URL請(qǐng)求后添加(2)jsp:param3)設(shè)置 session禾口 request13 jsp中的doget ()和dopost ()方法的作用?這個(gè)兩個(gè)方法都是 http協(xié)議的方法,doget用于傳輸數(shù)據(jù)量較?。艽a會(huì)泄露),dopost數(shù)據(jù)量較大,14什么是用例?如何確定用例?在不

13、展現(xiàn)一個(gè)系統(tǒng)或子系統(tǒng)內(nèi)部結(jié)構(gòu)的情況下,對(duì)系統(tǒng)或子系統(tǒng)的某個(gè)連貫的功能單元的定義和描述。一個(gè)用例可以看作是系統(tǒng)的一個(gè)功能,例如增加用戶(hù),增加角色,查詢(xún)一個(gè)具體的一個(gè)事物,在Ejb的設(shè)計(jì)中,一個(gè) use case 跟 Session bean 的一個(gè)方法是對(duì)應(yīng)的 (使用的 session fasade模式), 你說(shuō)的基礎(chǔ)數(shù)據(jù)管理, 我會(huì)把它處理成為一個(gè)抽象用例 ,因?yàn)槲艺J(rèn)為基礎(chǔ)數(shù)據(jù)這個(gè)概念非常的抽象,什么是真正的基礎(chǔ)數(shù)據(jù) ?例如說(shuō)一個(gè)系統(tǒng)中郵政編碼算是這個(gè)系統(tǒng)的基礎(chǔ)數(shù)據(jù),那么" 郵政編碼修改 "這個(gè)就應(yīng)該算是用例了 .15 活動(dòng)圖和時(shí)序圖的區(qū)別? 時(shí)序圖主要強(qiáng)調(diào)時(shí)間的順序活動(dòng)圖

14、主要強(qiáng)調(diào)空間上類(lèi)的交互16 什么是策略模式?什么情況下使用? 策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們還可以相互替 換Context( 應(yīng)用場(chǎng)景 ):1 、需要使用 ConcreteStrategy 提供的算法。2 、 內(nèi)部維護(hù)一個(gè) Strategy 的實(shí)例。3 、 負(fù)責(zé)動(dòng)態(tài)設(shè)置運(yùn)行時(shí) Strategy 具體的實(shí)現(xiàn)算法。4 、負(fù)責(zé)跟 Strategy 之間的交互和數(shù)據(jù)傳遞。17 面向接口編程的好處 使用接口編程,易于程序擴(kuò)展,降低程序耦合性。 包括結(jié)構(gòu)清晰,類(lèi)之間通信簡(jiǎn)單易懂,擴(kuò)展性好,提高復(fù)用性等等。18 事物事務(wù)就是一系列的操作 ,這些操作完成一項(xiàng)任務(wù) .只要這些操作

15、里有一個(gè)操作沒(méi)有成功,事務(wù)就操作失敗 ,發(fā)生回滾事件 .即撤消前面的操作 ,這樣可以保證數(shù)據(jù)的一致性.而且可以把操作暫時(shí)放在緩存里 ,等所有操作都成功有提交數(shù)據(jù)庫(kù),這樣保證費(fèi)時(shí)的操作都是有效操作.1 簡(jiǎn)答題3) 說(shuō)明 jndi 、 jms 、 jta 、rmi 的意思?web容器:給處于其中的應(yīng)用程序組件(JSP, SERVLET )提供一個(gè)環(huán)境,使 JSP,SERVLET直接更容器中的 環(huán)境變量 接口交互, 不必關(guān)注 其它系統(tǒng) 問(wèn)題。主 要有 WEB 服務(wù)器來(lái)實(shí) 現(xiàn)。例如 :TOMCAT,WEBLOGIC,WEBSPHERE 等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICA

16、TION標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的 WEB 服務(wù)器就叫做 J2EE 中的 WEB 容器。EJB 容器: Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件 EJB 各種管理功 能。只要滿(mǎn)足 J2EE 規(guī)范的 EJB 放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過(guò)現(xiàn)成的接 口來(lái)獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。JNDI :( Java Naming & Directory Interface ) JAVA 命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng), 讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿(mǎn)足快速查找和定位分布

17、式應(yīng)用程序的功能。JMS:(Java Message Service) JAVA 消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。JTA:( Java Transaction API)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口 即可。JAF:(Java Action FrameWork) JAVA 安全認(rèn)證框架。提供一些安全控制方面的框架。讓開(kāi)發(fā)者通過(guò)各種部 署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。RMI/IIOP: ( Remote Method Invocation /internet對(duì)象請(qǐng)求中介協(xié)議) 他們主要用于通過(guò)遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)

18、算機(jī)上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過(guò)一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。4)數(shù)據(jù)庫(kù)中l(wèi)eft join的意思,和在什么場(chǎng)合中應(yīng)用?簡(jiǎn)單說(shuō)左表全都顯示右表可能為空應(yīng)用場(chǎng)合就是當(dāng)左表的數(shù)據(jù)全要右表有就顯示沒(méi)有就不顯這個(gè)比較細(xì)微,我盡量回答??偟膩?lái)說(shuō),2種寫(xiě)法,在oracle里,效率和性能區(qū)別不大。如果非要比較的話(huà),大概有以下區(qū)別:(+)和left join ,在檢索顯示的字段很少的時(shí)候,或者干脆就是檢索count(*)的時(shí)候,在效率和性能上,是一樣,甚至 cpucost都完全一樣;但是在檢索顯示的字段比較多得時(shí)候

19、,第一次執(zhí)行,left join比(+)的效率高;當(dāng)然,執(zhí)行第二次之后,由于數(shù)據(jù)已經(jīng)到了緩存,區(qū)別也不明顯了,基本是一致的。6)ejb中的sessionbean和entitybean的區(qū)別和含義?EntityBean:主要是指可存儲(chǔ)的物件,比如:學(xué)生,學(xué)校, 公司,職員等等。必須是SerializableSessionBean:主要是指商業(yè)邏輯物件,比如:購(gòu)物,執(zhí)行某功能etc.表示的是一種過(guò)程SessionBean又分為:Stateless和Stateful區(qū)別就是,Stateful有狀態(tài)記憶,Stateless無(wú)狀態(tài)記憶Message-Driven Bean:主要是用于做一些 JMS me

20、ssage的處理。這一點(diǎn)可以從 Message-Driven Bean的構(gòu)架 里看到: 當(dāng)客戶(hù) 發(fā)送一個(gè) message至U JMS,Container就會(huì)從 Beans Pool中把注冊(cè)了的 Message-DrivenBean調(diào)出來(lái)并且后臺(tái)運(yùn)行我這里是概述,建議你最好找一本EJB的書(shū)來(lái)讀最新的EJB的版本是3.07)抽象類(lèi)和接口的區(qū)別(java經(jīng)典筆試題中也有)?8)對(duì)象序列化的含義?1、序列化是干什么的?簡(jiǎn)單說(shuō)就是為了保存在內(nèi)存中的各種對(duì)象的狀態(tài),并且可以把保存的對(duì)象狀態(tài)再讀出來(lái)。雖然你可以用 你自己的各種各樣的方法來(lái)保存Object States,但是Java給你提供一種應(yīng)該比你自己好

21、的保存對(duì)象狀態(tài)的機(jī)制,那就是序列化。2、什么情況下需要序列化a)當(dāng)你想把的內(nèi)存中的對(duì)象保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中時(shí)候;b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;c)當(dāng)你想通過(guò)RMI傳輸對(duì)象的時(shí)候;3、當(dāng)對(duì)一個(gè)對(duì)象實(shí)現(xiàn)序列化時(shí),究竟發(fā)生了什么?在沒(méi)有序列化前,每個(gè)保存在堆(Heap)中的對(duì)象都有相應(yīng)的狀態(tài)(state),即實(shí)例變量(instance ariable)比如:Foo myFoo = new Foo();myFoo .setWidth(37);myFoo.setHeight(70);當(dāng)通過(guò)下面的代碼序列化之后,MyFoo對(duì)象中的width和Height實(shí)例變量的值(37,70)都被保

22、存到foo.ser文件中,這樣以后又可以把它從文件中讀岀來(lái),重新在堆中創(chuàng)建原來(lái)的對(duì)象。當(dāng)然保存時(shí)候不僅僅是保存對(duì)象的實(shí)例變量的值,JVM還要保存一些小量信息,比如類(lèi)的類(lèi)型等以便恢復(fù)原來(lái)的對(duì)象。FileOutputStream fs = new FileOutputStream("foo.ser");ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myFoo);4、實(shí)現(xiàn)序列化(保存到一個(gè)文件)的步驟a) Make a FileOutputStreamjava代碼FileOutputStream

23、 fs = new FileOutputStream("foo.ser");b) Make a ObjectOutputStreamjava代碼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、舉例說(shuō)明java代碼impo

24、rt java.io.*;public class Box implements Serializableprivate int width;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);tryFileOu

25、tputStream fs = new FileOutputStream("foo.ser");ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myBox);os.close();catch(Exception ex)ex.printStackTrace();6、相關(guān)注意事項(xiàng)a) 當(dāng)一個(gè)父類(lèi)實(shí)現(xiàn)序列化,子類(lèi)自動(dòng)實(shí)現(xiàn)序列化,不需要顯式實(shí)現(xiàn)Serializable接口;b) 當(dāng)一個(gè)對(duì)象的實(shí)例變量引用其他對(duì)象,序列化該對(duì)象時(shí)也把引用對(duì)象進(jìn)行序列化;c) 并非所有的對(duì)象都可以序列化,至于為什么不可以

26、,有很多原因了,比如:1. 安全方面的原因,比如一個(gè)對(duì)象擁有private, public等f(wàn)ield,對(duì)于一個(gè)要傳輸?shù)膶?duì)象,比如寫(xiě)到文件,或者進(jìn)行rmi傳輸?shù)鹊?,在序列化進(jìn)行傳輸?shù)倪^(guò)程中,這個(gè)對(duì)象的private等域是不受保護(hù)的。2. 資源分配方面的原因,比如socket,thread類(lèi),如果可以序列化,進(jìn)行傳輸或者保存,也無(wú)法對(duì)他們進(jìn)行重新的資源分配,而且,也是沒(méi)有必要這樣實(shí)現(xiàn)。2選擇題說(shuō)明:不是太難所以,我只說(shuō)下大概考試的內(nèi)容。1) 抽象類(lèi)可以是 final、private嘛?java類(lèi)一旦被聲明為abstract(抽象類(lèi)),必須要繼承或者匿名(其實(shí)匿名也是種繼承)才能使用。而final

27、則是讓該類(lèi)無(wú)法被繼承,所以final是必然不能和abstract同時(shí)聲明的但是private呢?一個(gè)類(lèi)被聲明為private的時(shí)候,它當(dāng)然是內(nèi)部類(lèi),內(nèi)部類(lèi)是可以被它的外部類(lèi)訪(fǎng)問(wèn)到的,所以,可以繼承,private 和 abstract 不沖突。2)異常能岀來(lái)的情況有什么?3) finally塊的運(yùn)用,就是出一道程序,然后讓你寫(xiě)出輸出的結(jié)果來(lái),在finally塊中的printin ("”不管 如何總是要輸岀岀來(lái)的。4)jsp 中的 doget () 和 dopost ()方法的作用?第一:doGet方法是servlet提交報(bào)頭數(shù)據(jù)之類(lèi)的用的,doGet方法提交表單的時(shí)候會(huì)在url后邊顯

28、示提交的內(nèi)容,正是因?yàn)檫@樣所以我們一般對(duì)于需要保密的的信息(比如密碼等)不用這樣的提交方式;而且doGet方法只能提交256個(gè)字符,這就指岀了它的使用環(huán)境,對(duì)于我們傳遞短的文字信息的時(shí)候可以用它,但是 當(dāng)我們傳遞的是比較大的媒體文件的時(shí)候就不能夠使用它了。doPost則沒(méi)有這個(gè)限制。通常我們使用的都是 doPost方法,你只要在servlet中讓這兩個(gè)方法互相調(diào)用就行 了,例如在doGet方法中這樣寫(xiě)public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException

29、, lOException doPost(request,response);再把業(yè)務(wù)邏輯直接寫(xiě)在doPost方法中。servlet碰到doGet方法調(diào)用直接就會(huì)去調(diào)用doPost因?yàn)樗麄兊膮?shù)都一樣。而且doGet方法處理中文問(wèn)題很困難,要寫(xiě)過(guò)濾器之類(lèi)的。第二:不管是post還是get方法提交過(guò)來(lái)的連接,都會(huì)在 service中處理,然后,由 service來(lái)交由相應(yīng)的 doPost或doGet方法處理,如果你重寫(xiě)了 service方法,就不會(huì)再處理doPost或doGet 了。不管是post還是 get方法提交過(guò)來(lái)的連接, 都會(huì)在service中處理,然后,由service來(lái)交由相應(yīng)的do

30、Post或doGet方法處理, 如果你重寫(xiě)了 service方法,就不會(huì)再處理 doPost或doGet了。5)數(shù)據(jù)庫(kù)中的鎖包括什么?數(shù)據(jù)庫(kù)是一個(gè)多用戶(hù)使用的共享資源。當(dāng)多個(gè)用戶(hù)并發(fā)地存取數(shù)據(jù)時(shí),在數(shù)據(jù)庫(kù)中就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí) 存取同一數(shù)據(jù)的情況。若對(duì)并發(fā)操作不加控制就可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性。加鎖是實(shí)現(xiàn)數(shù)據(jù)庫(kù)并發(fā)控制的一個(gè)非常重要的技術(shù)。當(dāng)事務(wù)在對(duì)某個(gè)數(shù)據(jù)對(duì)象進(jìn)行操作前,先向系統(tǒng)發(fā)岀請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對(duì) 此數(shù)據(jù)對(duì)象進(jìn)行更新操作。在數(shù)據(jù)庫(kù)中有兩種基本的鎖類(lèi)型:排它鎖( Exclusive Locks

31、,即X鎖)和共享鎖(Share Locks,即 S鎖)。當(dāng)數(shù)據(jù)對(duì)象被加上排它鎖時(shí),其他的事務(wù)不能對(duì)它讀取和修改。加了共享鎖的數(shù)據(jù)對(duì)象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫(kù)利用這兩種基本的鎖類(lèi)型來(lái)對(duì)數(shù)據(jù)庫(kù)的事務(wù)進(jìn)行并發(fā)控制。根據(jù)保護(hù)的對(duì)象不同,Oracle數(shù)據(jù)庫(kù)鎖可以分為以下幾大類(lèi):DML鎖(data locks,數(shù)據(jù)鎖),用于保護(hù)數(shù)據(jù)的完整性;DDL鎖(dictionary locks,字典鎖),用于保護(hù)數(shù)據(jù)庫(kù)對(duì)象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義;內(nèi)部鎖和閂(internal locks and latches),保護(hù)數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu),應(yīng)用于 SGA;在我們實(shí)際應(yīng)用開(kāi)發(fā)中涉及較多的是DML鎖,其

32、他兩種的話(huà) DBA會(huì)更加關(guān)心點(diǎn);DML鎖的目的在于保證并發(fā)情況下的數(shù)據(jù)完整性,主要包括TM鎖和TX鎖,其中TM鎖稱(chēng)為表級(jí)鎖,TX鎖稱(chēng)為事務(wù)鎖或行級(jí)鎖。當(dāng)Oracle執(zhí)行DML語(yǔ)句時(shí),系統(tǒng)自動(dòng)在所要操作的表上申請(qǐng)TM類(lèi)型的鎖。當(dāng)TM鎖獲得后,系統(tǒng)再自動(dòng)申請(qǐng)TX類(lèi)型的鎖,并將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位進(jìn)行置位。這樣在事務(wù)加鎖前檢查T(mén)X鎖相容性時(shí)就不用再逐行檢查鎖標(biāo)志,而只需檢查T(mén)M鎖模式的相容性即可,大大提高了系統(tǒng)的效率。TM鎖包括了 SS、SX、S、X等多種模式,在數(shù)據(jù)庫(kù)中用 0 6來(lái)表示。不同的SQL操作產(chǎn)生不同類(lèi)型的 TM鎖。如 下圖所示:值鎖模式鎖描述 SQL0 NONE1 NULL 空

33、SELECT2 SS(ROW-S)行級(jí)共享鎖其他對(duì)象只能查詢(xún)這些數(shù)據(jù)行SELECT FOR UPDA TE、LOCK FOR UPDA TE、LOCK ROW SHARE3 SX(ROW-X) 行級(jí)排它鎖在提交前不允許做 DML操作 INSERT、UPDATE、DELETE、LOCK ROW SHARE4 S(SHARE)共享鎖 CREATE INDEX、LOCK SHARE5 SSX(S/ROW-X) 共享行級(jí)排它鎖LOCK SHARE ROW EXCLUSIVE6 X(eXclusive) 排它鎖 ALTER TABLE、DROP TABLE、DROP INDEX、TRUNCATE TAB

34、LE、LOCK EXCLUSIVE在數(shù)據(jù)行上只有X鎖(排他鎖)。在Oracle數(shù)據(jù)庫(kù)中,當(dāng)一個(gè)事務(wù)首次發(fā)起一個(gè)DML語(yǔ)句時(shí)就獲得一個(gè)TX鎖,該鎖保持到事務(wù)被提交或回滾。當(dāng)兩個(gè)或多個(gè)會(huì)話(huà)在表的同一條記錄上執(zhí)行DML語(yǔ)句時(shí),第一個(gè)會(huì)話(huà)在該條記錄上加鎖,其他的會(huì)話(huà)處于等待狀態(tài)。當(dāng)?shù)谝粋€(gè)會(huì)話(huà)提交后,TX鎖被釋放,其他會(huì)話(huà)才可以加鎖。在大概了解oracle的鎖機(jī)制之后,我們來(lái)解決幾個(gè)基本的問(wèn)題:1. UPDATE/DELETE操作會(huì)將 RS鎖定,直至操作被 COMMIT 或者ROLLBACK ;若操作未COMMIT之前其他session對(duì)同樣的RS做變更操作,則操作會(huì)被 hold,直至前session的

35、 UPDATE/DELETE 操作被 COMMIT ;2. session 內(nèi)外 SELECT 的 RS 范圍前提:INSERT、UPDATE操作未COMMIT 之前進(jìn)行SELECT ;若在同一 session內(nèi),SELECT出來(lái)的RS會(huì)包括之前INSERT、UPDATE影響的記錄;若不在同一 session內(nèi),SELECT出來(lái)的RS不會(huì)包括未被 COMMIT的記錄;3.SELECT. FOR UPDA TE OF cols NOWAIT/WAIT SKIP LOCKEDOF cols:只鎖定指定字段所在表的RS,而沒(méi)有指定的表則不會(huì)鎖定,只會(huì)在多表聯(lián)合查詢(xún)時(shí)岀現(xiàn);NOWAIT :語(yǔ)句不會(huì) h

36、old,而是直接返回錯(cuò)誤 ORA-00054: resource busy and acquire with NOWAIT specified ; WAIT N :語(yǔ)句被 hold N 秒,之后返回錯(cuò)誤 0RA-30006: resource busy; acquire with WAIT timeout expired ; SKIP LOCKED :不提示錯(cuò)誤,而是直接返回no rows selected;以上幾個(gè)選項(xiàng)可以聯(lián)合使用的,比較推薦的有:SELECT. FOR UPDA TE NOWAIT :對(duì)同一 RS執(zhí)行該SQL時(shí),直接返回錯(cuò)誤;SELECT. FOR UPDA TE NOWA

37、IT SKIP LOCKED :對(duì)同一 RS 執(zhí)行該 SQL 時(shí),直接返回空行;PS:當(dāng)RS被LOCK住之后,只對(duì)同樣請(qǐng)求 LOCK的語(yǔ)句有效,對(duì)無(wú)需 LOCK的SELECT語(yǔ)句并沒(méi)有任 何影響;6)jsp和serverlet的區(qū)別或者是他們的關(guān)系?一.Servlet 是什么?客戶(hù)機(jī)/服務(wù)器計(jì)算的發(fā)展。Java提供了一整套客戶(hù)機(jī)/服務(wù)器解決方案,在這個(gè)方案中,程序可以自動(dòng)地下 載到客戶(hù)端并執(zhí)行,這就是 applet。但是它僅僅是問(wèn)題的一半。問(wèn)題的另一半就是Servletoservlet可以被認(rèn)為是服務(wù)器端的applet。servlet被Web服務(wù)器加載和執(zhí)行,就如同 applet被瀏覽器加載和

38、執(zhí)行一樣。servlet從客戶(hù)端(通過(guò)Web服務(wù)器)接收請(qǐng)求,執(zhí)行某種作業(yè),然后返回結(jié)果。使用servlet的基本流程如下:客戶(hù)端通過(guò)HTTP提岀請(qǐng)求.Web服務(wù)器接收該請(qǐng)求并將其發(fā)給servlet。如果這個(gè)servlet尚未被加載,Web服務(wù)器將把它加載到Java虛擬機(jī)并且執(zhí)行它。servlet將接收該HTTP請(qǐng)求并執(zhí)行某種處理。servlet將向Web服務(wù)器返回應(yīng)答。Web服務(wù)器將從servlet收到的應(yīng)答發(fā)送給客戶(hù)端。由于servlet是在服務(wù)器上執(zhí)行,通常與applet相關(guān)的安全性的問(wèn)題并不需實(shí)現(xiàn)。要注意的是 Web瀏覽器并不直接和servlet通信,servlet是由Web服務(wù)器加載

39、和執(zhí)行的。而servlet是用Java編寫(xiě)的,所以它們一開(kāi)始就是平臺(tái)無(wú)關(guān)的。這樣,Java編寫(xiě)一次就可以在任何平臺(tái)運(yùn)行(write once,run anywhere)的承諾就同樣可以在服務(wù)器上實(shí)現(xiàn)了。servlet還有一些CGI腳本所不具備的獨(dú)特優(yōu)點(diǎn):(本人對(duì)CGI并不是十分了解,所以這些特點(diǎn)不能完全的體會(huì)到,這也是摘自論壇的貼子,請(qǐng)見(jiàn)諒)servlet是持久的。servlet只需Web服務(wù)器加載一次,而且可以在不同請(qǐng)求之間保持服務(wù)(例如一次數(shù)據(jù)庫(kù)連接)。與之相反,CGI腳本是短暫的、瞬態(tài)的。每一次對(duì)CGI腳本的請(qǐng)求,都會(huì)使 Web服務(wù)器加載并執(zhí)行該腳本。一旦這個(gè) CGI腳本運(yùn)行結(jié)束,它就會(huì)

40、被從內(nèi)存中清除,然后將結(jié)果返回到客戶(hù)端。CGI腳本的每一次使用,都會(huì)造成程序初始化過(guò)程(例如連接數(shù)據(jù)庫(kù))的重復(fù)執(zhí)行。servlet是與平臺(tái)無(wú)關(guān)的。如前所述,servlet是用Java編寫(xiě)的,它自然也繼承了Java的平臺(tái)無(wú)關(guān)性。servlet是可擴(kuò)展的。由于servlet是用Java編寫(xiě)的,它就具備了 Java所能帶來(lái)的所有優(yōu)點(diǎn)。Java是健壯的、 面向?qū)ο蟮木幊陶Z(yǔ)言,它很容易擴(kuò)展以適應(yīng)你的需求。servlet自然也具備了這些特征。servlet是安全的。從外界調(diào)用一個(gè)servlet的惟一方法就是通過(guò) Web服務(wù)器。這提供了高水平的安全性保障, 尤其是在你的Web服務(wù)器有防火墻保護(hù)的時(shí)候。set

41、vlet可以在多種多樣的客戶(hù)機(jī)上使用。由于servlet是用Java編寫(xiě)的,所以你可以很方便地在 HTML中使用它們,就像你使用 applet 一樣。那么,Servlet是怎樣執(zhí)行的?怎樣來(lái)寫(xiě)一個(gè)Servlet,它的基本架構(gòu)是怎么樣的?這些問(wèn)題,將在后面部分給予介紹。二 JSP與 Servlet現(xiàn)在已經(jīng)對(duì)Servlet有了大概的了解,現(xiàn)在我們就來(lái)說(shuō)說(shuō)JSP和Servlet的關(guān)系。JSP是一種腳本語(yǔ)言,包裝了 Java Servlet系統(tǒng)的界面,簡(jiǎn)化了 Java和Servlet的使用難度,同時(shí)通過(guò)擴(kuò)展 JSP標(biāo)簽(TAG)提供了網(wǎng)頁(yè)動(dòng)態(tài)執(zhí)行的能力。盡管如此,JSP仍沒(méi)有超出Java和Servle

42、t的范圍,不僅JSP頁(yè)面上可以直接寫(xiě)Java代碼,而且JSP是先被譯成Servlet之后才實(shí)際運(yùn)行的。JSP在服務(wù)器上執(zhí)行,并將 執(zhí)行結(jié)果輸出到客戶(hù)端瀏覽器,我們可以說(shuō)基本上與瀏覽器無(wú)關(guān)。它是與JavaScript不同的,JavaScript是在客戶(hù)端的腳本語(yǔ)言,在客戶(hù)端執(zhí)行,與服務(wù)器無(wú)關(guān)。那么JSP是什么?就是Servlet.JSP與Servlet之間的主要差異在于,JSP提供了一套簡(jiǎn)單的標(biāo)簽,和HTML融合的比較好,可以使不了解Servlet的人可以做出動(dòng)態(tài)網(wǎng)頁(yè)來(lái)。對(duì)于Java語(yǔ)言不熟悉的人(比如像我),會(huì)覺(jué)得JSP開(kāi)發(fā)比較方便。JSP修改后可以立即看到結(jié)果,不需要手工編譯,JSP引擎會(huì)來(lái)

43、做這些工作;而Servelt缺需要編譯,重新啟動(dòng)Servlet 引擎等一系列動(dòng)作。但是在JSP中,HTML與程序代碼混雜在一起,而Servlet卻不是這樣。也許大家比較混亂了,那么Servlet又是什么?下面我們對(duì) JSP的運(yùn)行來(lái)做一個(gè)簡(jiǎn)單的介紹, 告訴大家怎樣來(lái)執(zhí)行一個(gè) JSP 文件:當(dāng)Web服務(wù)器(或Servlet引擎,應(yīng)用服務(wù)器)支持JSP引擎時(shí),JSP引擎會(huì)照著JSP的語(yǔ)法,將JSP文件轉(zhuǎn)換 成Servlet代碼源文件,接著Servlet會(huì)被編譯成Java可執(zhí)行字節(jié)碼(bytecode),并以一般的Servlet方式載入 執(zhí)行JSP語(yǔ)法簡(jiǎn)單,可以方便的嵌入 HTML之中,很容易加入動(dòng)態(tài)

44、的部分,方便的輸出HTML。在Servlet中輸出HTML缺需要調(diào)用特定的方法,對(duì)于引號(hào)之類(lèi)的字符也要做特殊的處理,加在復(fù)雜的HTML頁(yè)面中作為動(dòng)態(tài)部分,比起JSP來(lái)說(shuō)是比較困難的。除去了轉(zhuǎn)換和編譯階段,JSP和Servlet之間的區(qū)別實(shí)在是不大。JSP引擎通常架構(gòu)在 Servlet引擎之上,本身就是一個(gè) Servlet,把JSP文件轉(zhuǎn)譯成Servlet源代碼,再調(diào)用Java 編譯器,編譯成Servlet。這也是JSP在第一次調(diào)用時(shí)速度比較慢的原因, 在第一次編譯之后,JSP與Servlet 速度相同.下面我們來(lái)看看為什么他們?cè)诘谝淮尉幾g后再編譯的速度相同:在整個(gè)運(yùn)行過(guò)程中,JSP引擎會(huì)檢查編

45、譯好的 JSP(以Servlet形式存在)是否比原始的JSP文件還新,如果是, JSP引擎不會(huì)編譯;如果不是,表示JSP文件比較新,就會(huì)重新執(zhí)行轉(zhuǎn)譯與編譯的過(guò)程。為了有個(gè)深刻的了解,我們看一下JSP的運(yùn)行和開(kāi)發(fā)環(huán)境:瀏覽器:常見(jiàn)的瀏覽器有 IE和Netscape兩種。數(shù)據(jù)庫(kù):常用的數(shù)據(jù)庫(kù)有 Oracle,SQL Server,lnformix,DB2,Sybase,Access,MySQL 等。 操作系統(tǒng):常見(jiàn)的有 Windows,Linux,以及各種Unix系統(tǒng)。Web 服務(wù)器:常見(jiàn)的有 IIS,Apache,Netscape Enterprise Server 等。JSP引擎:一般JSP引

46、擎都以Servlet引擎為基礎(chǔ),并以Servlet的形式出現(xiàn)。同時(shí),在各種免費(fèi)和商業(yè)引擎 的實(shí)現(xiàn)中,Servlet引擎和Jsp引擎通常也是一起出現(xiàn),我們成為Servlet/JSP引擎,或從某種成為JSP引擎。JSP引擎是可以提供JSP和Servlet運(yùn)行支持并對(duì)其生存周期進(jìn)行管理的系統(tǒng)級(jí)實(shí)體。在JSP頁(yè)面第一次被請(qǐng)求時(shí),JSP引擎會(huì)將JSP原始文件轉(zhuǎn)換成Servlet源代碼,然后調(diào)用Java編譯器,編 譯成Servlet,并在Servlet引擎中執(zhí)行。當(dāng)再次有請(qǐng)求的時(shí)候,JSP引擎會(huì)見(jiàn)差異編譯好的 JSP是否比原來(lái)的 JSP原始文件要新,如果是,運(yùn)行Servlet;如果不是,表示文件已經(jīng)更新的了,就會(huì)從新執(zhí)行轉(zhuǎn)換和編譯的 過(guò)程。說(shuō)到這里,也基本把 JSP和Servlet的關(guān)系說(shuō)清楚了,從我的感覺(jué)上看用JSP就可以了,簡(jiǎn)單又方便,又可以和Bean很好的兼容使用,功能又很強(qiáng)大,為什么又出現(xiàn)了Servlet,它又有什么用?何況它的編寫(xiě)又相對(duì)復(fù)雜。為了把問(wèn)題說(shuō)得更清楚一點(diǎn),我想在這里說(shuō)一下

溫馨提示

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

評(píng)論

0/150

提交評(píng)論