資源描述:
《分享JSP學(xué)習(xí)經(jīng)驗(yàn)總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、對(duì)簡(jiǎn)單應(yīng)用,可采用JSP+BAEN,對(duì)復(fù)雜的應(yīng)用系統(tǒng),應(yīng)采用JSP+EJB,SERVLET變的無(wú)足輕重。用JSP完全可替代它。一、JSP工作原理在一個(gè)JSP文件第一次被請(qǐng)求時(shí),JSP引擎把該JSP文件轉(zhuǎn)換成為一個(gè)servlet。而這個(gè)引擎本身也是一個(gè)servlet,在JSWDK或WEBLOGIC中,它就是JspServlet。JSP引擎先把該JSP文件轉(zhuǎn)換成一個(gè)Java源文件,在轉(zhuǎn)換時(shí)如果發(fā)現(xiàn)jsp文件有任何語(yǔ)法錯(cuò)誤,轉(zhuǎn)換過(guò)程將中斷,并向服務(wù)端和客戶端輸出出錯(cuò)信息;如果轉(zhuǎn)換成功,JSP引擎用javac把該Java源文
2、件編譯成相應(yīng)的class文件。然后創(chuàng)建一個(gè)該SERVLET的實(shí)例,該SERVLET的jspInit()方法被執(zhí)行,jspInit()方法在servlet的生命周期中只被執(zhí)行一次。然后jspService()方法被調(diào)用來(lái)處理客戶端的請(qǐng)求。對(duì)每一個(gè)請(qǐng)求,JSP引擎創(chuàng)建一個(gè)新的線程來(lái)處理該請(qǐng)求。如果有多個(gè)客戶端同時(shí)請(qǐng)求該JSP文件,則JSP引擎會(huì)創(chuàng)建多個(gè)線程。每個(gè)客戶端請(qǐng)求對(duì)應(yīng)一個(gè)線程。以多線程方式執(zhí)行可大大降低對(duì)系統(tǒng)的資源需求,提高系統(tǒng)的并發(fā)量及響應(yīng)時(shí)間.但應(yīng)該注意多線程的編程限制,由于該servlet始終駐于內(nèi)存,所以
3、響應(yīng)是非常快的。如果.jsp文件被修改了,服務(wù)器將根據(jù)設(shè)置決定是否對(duì)該文件重新編譯,如果需要重新編譯,則將編譯結(jié)果取代內(nèi)存中的servlet,并繼續(xù)上述處理過(guò)程。雖然JSP效率很高,但在第一次調(diào)用時(shí)由于需要轉(zhuǎn)換和編譯而有一些輕微的延遲。此外,如果在任何時(shí)候如果由于系統(tǒng)資源不足的原因,JSP引擎將以某種不確定的方式將servlet從內(nèi)存中移去。當(dāng)這種情況發(fā)生時(shí)jspDestroy()方法首先被調(diào)用,然后servlet實(shí)例便被標(biāo)記加入"垃圾收集"處理。jspInit()及jspDestory()格式如下:可在jspIni
4、t()中進(jìn)行一些初始化工作,如建立與數(shù)據(jù)庫(kù)的連接,或建立網(wǎng)絡(luò)連接,從配置文件中取一些參數(shù)等,在jspDestory()中釋放相應(yīng)的資源。1.<%!??2.public?void?jspInit()??3.{??4.System.out.println("jspinit");??5.}??6.%>;??7.<%!??8.public?void?jspDestory()??9.{??10.System.out.println("jspDestory");??11.}??12.%>;??二、服務(wù)端的輸出緩沖區(qū)缺省情況下:服
5、務(wù)端要輸出到客戶端的內(nèi)容,不直接寫(xiě)到客戶端,而是先寫(xiě)到一個(gè)輸出緩沖區(qū)中.只有在下面三中情況下,才會(huì)把該緩沖區(qū)的內(nèi)容輸出到客戶端上:該JSP網(wǎng)頁(yè)已完成信息的輸出輸出緩沖區(qū)已滿JSP中調(diào)用了out.flush()或response.flushbuffer()輸出緩沖區(qū)的大小可以用:或response.setBufferSize()設(shè)置,如下:設(shè)置輸出緩沖區(qū)的大小為1KB。或1.response.setBufferSize(1);?設(shè)置輸出緩沖區(qū)的大小為0,即不緩沖?;?.response.setBufferSize(0)
6、;??用response.getBufferSize()或out.getBufferSize()可取的輸出緩沖區(qū)的大小,單位為字節(jié).用response.isCommitted()可檢查看服務(wù)端是否已將數(shù)據(jù)輸出到客戶端.如果返回值是TRUE則已將數(shù)據(jù)輸出到客戶端,是FALSE則還沒(méi)有.三、服務(wù)端輸出重定向有以下3種方法可以做到輸出重定向:RESPONSE.SETREDERECT("URL")該方法通過(guò)修改HTTP協(xié)議的HEADER部分,對(duì)瀏覽器下達(dá)重定向指令的,使瀏覽器顯示重定向網(wǎng)頁(yè)的內(nèi)容.1.response.sen
7、dRedirect("http://localhost:7001/index.html");??下面的方法也能改變HTTPHEADER屬性,它的原理和1是一樣的.1.<%??2.response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);??3.String?newLocn="/index.html";??4.response.setHeader("Location",newLocn);??1.%?>;??采用;該方法是利用服務(wù)器
8、端先將數(shù)據(jù)輸出到緩沖區(qū)的機(jī)制,在把緩沖區(qū)的內(nèi)容發(fā)送到客戶端之前,原來(lái)的不發(fā)送,改為發(fā)送該頁(yè)面的內(nèi)容,如果在;之前有很多輸出,前面的輸出已使緩沖區(qū)滿,將自動(dòng)輸出到客戶端,那么該語(yǔ)句將不起作用,這一點(diǎn)應(yīng)該特別注意.如下面的例子(1)會(huì)輸出index.html的內(nèi)容,(2)不會(huì)輸出index.html的內(nèi)容,而是輸出out.