軟件中間件技術(shù)UNIT8_第1頁
軟件中間件技術(shù)UNIT8_第2頁
軟件中間件技術(shù)UNIT8_第3頁
軟件中間件技術(shù)UNIT8_第4頁
軟件中間件技術(shù)UNIT8_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Servlets Servlets Servlets是基于Java的一種技術(shù)和標(biāo)準(zhǔn)。它是位于Web 服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,與傳統(tǒng)的從命令行啟動的Java應(yīng)用程序不同,Servlets由Web服務(wù)器進行加載,該Web服務(wù)器必須包含支持Servlets的Java虛擬機。Servlets是JSP的基礎(chǔ)。Servlets Servlets Servlets是用Java代碼編寫的服務(wù)器端軟件程序,能夠動態(tài)擴展Web服務(wù)器功能,用于處理客戶機和服務(wù)器之間的消息傳遞。Java Servlet API 為請求和響應(yīng)消息定義了一個標(biāo)準(zhǔn)接口,這樣 Servlets 就可以跨平臺,在不同的 Web

2、 應(yīng)用服務(wù)器間移植。Servlets Servlets Servlets是當(dāng)今萬維網(wǎng)上使用最頻繁的J2EE組件,其結(jié)構(gòu)和設(shè)計都很簡潔和輕巧,大多數(shù)Web開發(fā)人員都把Servlets作為Web客戶訪問服務(wù)器應(yīng)用的主入口點,而且只要客戶端有足夠的清理權(quán)限,Servlets就允許客戶端控制服務(wù)器添加或刪除Web頁面或文件。Servlets Servlets 從理論上講,Java能做的事情,Servlets也能做。但Web開發(fā)人員不會只使用Servlets來構(gòu)建所想要的一切,因為用Servlets處理復(fù)雜的Web交互、事務(wù)處理、數(shù)據(jù)庫同步及其他內(nèi)部邏輯并不是一個非常切實可行的途徑,和傳統(tǒng)的CGI、IS

3、API(Internet Server Application Programming Interface,Internet 服務(wù)應(yīng)用程序編程接口)、NSAPI(Netscape Server Application Programming Interface,網(wǎng)景服務(wù)器應(yīng)用程序編程接口)方式相同,Servlets也是利用輸出HTML語句來實現(xiàn)動態(tài)網(wǎng)頁,如果用它來開發(fā)整個網(wǎng)站,動態(tài)部分和靜態(tài)頁面的整合過程將變得無法想像。這就是Sun還要推出JSP的原因。Servlets主要負(fù)責(zé)處理小型任務(wù),如:收集和驗證用戶輸入,但幾乎不進行實際處理;協(xié)調(diào)輸出,但幾乎不直接生成動態(tài)Web頁面的內(nèi)容;少量的業(yè)務(wù)

4、邏輯。JAVAJAVA ServletsServlets為什么優(yōu)于傳統(tǒng)的為什么優(yōu)于傳統(tǒng)的CGICGI JAVAServlets比傳統(tǒng)的CGI或其它CGI類似替代技術(shù)來說,效率更高,使用更方便,功能更強大,更小巧也更便宜; 1)1)效率效率 傳統(tǒng)CGI對每一個HTTP請求都要產(chǎn)生一個新的進程。如果某個CGI程序是一個執(zhí)行非??斓牟僮鳎蜷_進程的時間也許占用了大部分執(zhí)行時間。而對JAVAServlets來說,在JAVA虛擬機上,每一個請求由一個小JAVA線程(thread)響應(yīng),而不是一個大操作系統(tǒng)進程。類似地,傳統(tǒng)CGI如果對同一個CGI程序有N個同時請求,這個CGI程序的代碼將被導(dǎo)入內(nèi)存N次。

5、JAVAServlets產(chǎn)生N個線程,但只有一個JAVAServletsCLASS的copy。同時JAVAServlets比CGI有更多的優(yōu)化選擇,象預(yù)先計算,打開數(shù)據(jù)庫連接等。 2)2)方便方便 JAVAServlets能自動的粘貼和解碼HTML表單數(shù)據(jù),讀和設(shè)置HTTP頭,處理COOKIES,跟蹤SESSIONS,等其它大量功能。 3)3)強大的功能強大的功能 JAVAServlets可以很容易的實現(xiàn)對CGI來說是不可能或很困難的事務(wù)。JAVAServlets能直接和服務(wù)器進行通訊而CGI是不能的。 4)JAVA4)JAVA ServletsServlets之間能共享數(shù)據(jù)之間能共享數(shù)據(jù) 很

6、容易實現(xiàn)諸如數(shù)據(jù)庫連接池。它能方便的實現(xiàn)管理從REQUEST到REQUEST請求,簡化SESSION和獲取前一頁面。而CGI之間通訊差,由于每個CGI程序的調(diào)用都開始一個新的進程,調(diào)用間通訊通常要通過文件進行,因而相當(dāng)緩慢。同一臺服務(wù)器上的不同CGI程序之間的通訊也相當(dāng)麻煩。 5)5)調(diào)用時間調(diào)用時間 CGI程序是作為單獨過程運行的,通常調(diào)用時間較長,這個間接成本在每次調(diào)用的時候都要發(fā)生。在使用解釋器的時候調(diào)用時間會更長。而內(nèi)存中的Servlet可以非常迅速地加載。 6)6)安全安全 有些CGI版本有明顯的安全弱點。即使是使用最新的標(biāo)準(zhǔn)和PERL等語言,系統(tǒng)也沒有基本安全框架,而要靠一組事實上

7、的規(guī)則。而java定義有完整的安全機制,包括ssl,ca認(rèn)證,安全政策等規(guī)范。 7)7)小巧小巧 JAVAServlets使用JAVA編寫,遵循標(biāo)準(zhǔn)API。它能直接或借助插件在幾乎所有WEB服務(wù)器上運行。 8)8)價格低價格低 顯然,有很多都是FREE。 ServletsServlets的一些應(yīng)用范圍的一些應(yīng)用范圍 1)用于處理HTML表單:通過HTTP產(chǎn)生POSTed數(shù)據(jù),包括買賣訂單或信用卡數(shù)據(jù)。因此servlets可以成為訂單處理系統(tǒng)的一部分,和產(chǎn)品存貨數(shù)據(jù)庫一道工作,也許可以用在在線支付系統(tǒng)上。2)允許人們之間的合作:一個servlets能并發(fā)處理多個請求;他們可以使用在諸如在線會議這

8、樣的同步請求支持系統(tǒng)。ServletsServlets的一些應(yīng)用范圍的一些應(yīng)用范圍 3)轉(zhuǎn)送請求:Servlets可以轉(zhuǎn)送請求給其他的服務(wù)器和servlets。這就允許在鏡象同樣內(nèi)容的幾個服務(wù)器之間平衡負(fù)載。按照任務(wù)類型或組織范圍,可以允許被用來在幾個服務(wù)器中劃分邏輯上的服務(wù)器。 4)servlets編寫者們可以定義彼此之間共同工作的激活代理,每個代理者是一個servlets,而且代理者能夠在他們之間傳送數(shù)據(jù)。 Servlets Servlets 8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)8.8.2 Servlets2 Servlets的接口的接口 8.8.3 Servlet

9、s3 Servlets的生命周期的生命周期 8.8.5 5 調(diào)用調(diào)用Servlets Servlets 8.48.4 JSPJSP與與ServletsServlets 8.8.6 Servlets6 Servlets的開發(fā)的開發(fā) 8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu) Servlets可直接從瀏覽器客戶端訪問調(diào)用,然后完成一些商業(yè)邏輯,比如數(shù)據(jù)庫訪問、計數(shù)等。Servlets可以像普通的CGI腳本一樣接收GET或POST請。 8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)(Servlets(Servlets程序程序) )importjava.io.*;imp

10、ortjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloWorldextendsHttpServletpublicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOExceptionres.setContentType(text/html);PrintWriterout=res.getWriter();out.println(HelloWorld!);out.println(HelloWorld);out.printl

11、n();out.close();8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)(Servlets(Servlets程序程序) ) 該Servlets處理的是GET請求,所謂的GET請求,如果不熟悉HTTP,可以把它看成是當(dāng)用戶在瀏覽器地址欄輸入URL、單擊Web頁面中的鏈接、提交沒有指定METHOD的表單時瀏覽器所發(fā)出的請求。Servlets也可以很方便地處理POST請求,POST請求是提交那些指定了METHOD=post的表單時所發(fā)出的請求。8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)(Servlets(Servlets程序程序) )HelloWorld的基類是

12、HttpServlet,HttpServlet實現(xiàn)了Servlet接口,HttpServlet繼承GenericServlet類,GenericServlet實現(xiàn)Servlet接口,Servlet包含所有與Servlet相關(guān)的接口和類,最常用的是HttpServlet,如圖所示。8.1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)(Servlets(Servlets程序程序) )如果某個類要成為Servlets,則它應(yīng)該從HttpServlet繼承,根據(jù)接受的信息是通過GET還是POST發(fā)送,覆蓋doGet、doPost方法之一或全部。doGet和doPost方法都有兩個 參 數(shù) ,

13、分 別 為 H t t p S e r v l e t R e q u e s t 類 型 和HttpServletResponse類型。HttpServletRequest提供訪問有關(guān)請求信息的方法,例如表單數(shù)據(jù)、HTTP請求頭等。HttpServletResponse除了提供用于指定HTTP應(yīng)答狀態(tài)(200,404等)、應(yīng)答頭(Content-Type,Set-Cookie等)的方法之外,最重要的是它還提供了一個用于向客戶端發(fā)送數(shù)據(jù)的PrintWriter()方法。對于簡單的Servlets來說,PrintWriter()方法的大部分工作是通過println語句生成向客戶端發(fā)送的頁面。8.

14、1 8.1 ServletsServlets的結(jié)構(gòu)的結(jié)構(gòu)(Servlets(Servlets程序程序) )在編寫Servlets時要注意doGet和doPost拋出兩個異常,因此必須在Servlets聲明中包含它們;另外,還必須導(dǎo)入java.io包(要用到PrintWriter等類)、javax.servlet包(要用到HttpServlet等類)及javax.servlet.http包(要用到HttpServletRequest類和HttpServletResponse類)。doGet和doPost這兩個方法是由service()方法調(diào)用的,有時可能需要直接覆蓋service()方法,譬如S

15、ervlets要處理GET和POST兩種請求時。8.8.2 Servlets2 Servlets的接口的接口 JavaServletsAPI在兩個Java擴展包中定義:javax.servlet和javax.servlet.http包。在這兩個包中,javax.servlet包中定義的類和接口是獨立于協(xié)議的;而第二個包javax.servlet.http中包含了具體于HTTP協(xié)議的類和接口。Javax.servlet.http包中的某些類/接口擴展繼承了某些java.servlet包中的類/接口。8.8.2 Servlet2 Servlet的接口的接口在JavaServletAPI中最重要的是

16、Servlet接口(interface),Servlet接口定義了幾個方法用于初始化一個Servlets、接受客戶的請求、響應(yīng)客戶的請求等。8.8.2 Servlets2 Servlets的接口的接口Servlets接口的定義如下:PublicinterfaceServlet/釋放Servlets所占用的全部資源(如:內(nèi)存、線程等)Publicabstractvoiddestroy();/返回一個Servlets的設(shè)置對象,該對象包含了該Servlets的所有初始化參數(shù)和啟動設(shè)置PublicabstractServletConfiggetServletConfig();/初始化Servlets

17、。Publicabstractvoidinit(ServletConfig)throwsServletException;/執(zhí)行一個來自客戶端的請求Publicabstractvoidservice(ServletRequest,ServletResponse)throwsServletExceptionIOException;8.8.2 Servlets2 Servlets的接口的接口所有的Servlets都必須實現(xiàn)該Servlet接口,實現(xiàn)的途徑有很多:一是直接實現(xiàn)該接口,二是通過擴展類(class)來實現(xiàn),如HttpServlet(HttpServlet繼承GenericServlet類

18、;GenericServlet實現(xiàn)Servlet接口)。這個Servlet接口提供了Servlets與客戶端聯(lián)系的方法。Servlets編寫者可以在開發(fā)Servlets程序時提供部分或者所有方法。8.8.2 Servlets2 Servlets的接口的接口 HttpServlet類擴展了GenericServlet,并且提供了Servlet接口中具體于HTTP的實現(xiàn)。它更像是一個其他Servlet都要擴展的類。這個類定義了下面的這些方法。8.8.2 Servlets2 Servlets的接口的接口HttpServlet類中有兩種形式的service()方法。Publicvoidservice(

19、ServletRequestrequest,ServletResponseresponse)throwsServletException,IoException它是GenericServlet中的service()方法的實現(xiàn)。這個方法把request和response對象分別轉(zhuǎn)換成HttpServletRequest和HttpServletResponse,并且調(diào)用下面這個重載的service()方法。Protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)這個重載的方法用具體于HTTP的reques

20、t和response對象作為參數(shù),并且由上面的第一種方法來調(diào)用。HttpServlet實現(xiàn)這個方法后就成為一個HTTP請求分發(fā)者。service()方法把請求代理給doGet(),doPost(),doOptions(),doDelete(),doPut()或doTrace()之一。8.8.2 Servlets2 Servlets的接口的接口doGet doGet 用來處理用來處理HTTPHTTP的的GETGET請求請求這個GET操作僅僅允許客戶從HTTP server上取得(GET)資源。重載此方法的用戶自動允許支持方法HEAD。這個GET操作被認(rèn)為是安全的,沒有任何的負(fù)面影響,對用戶來說是

21、很可靠的。比如,大多數(shù)的正規(guī)查詢都沒有副作用。打算改變存儲數(shù)據(jù)的請求必須用其他的HTTP方法。這些方法也必須是個安全的操作。方法doGet的缺省執(zhí)行將返回一個HTTP的BAD_REQUEST錯誤。 8.8.2 Servlets2 Servlets的接口的接口 方法方法doGetdoGet的格式:的格式:protected void doGet(HttpServletResquest request, HttpServletResponse response)throws ServletException,IOException;8.8.2 Servlets2 Servlets的接口的接口doP

22、ost doPost 用來處理用來處理HTTPHTTP的的POSTPOST請求。請求。 這個POST操作包含了在必須通過此Servlet執(zhí)行的請求中的數(shù)據(jù)。由于它不能立即取得資源,故對于那些涉及到安全性的用戶來說,通過POST請求操作會有一些副作用。8.8.2 Servlets2 Servlets的接口的接口 方法方法doPostdoPost的格式:的格式:protected void doPost(HttpServletResquest request, HttpServletResponse response)throws ServletException,IOException; 8.8

23、.2 Servlets2 Servlets的接口的接口doPutdoPut用來處理用來處理HTTPHTTP的的PUTPUT請求請求 此PUT操作模擬通過FTP發(fā)送一個文件。對于那些涉及到安全性的用戶來說,通過PUT請求操作也會有一些副作用。 8.8.2 Servlets2 Servlets的接口的接口 方法方法doPutdoPut的格式的格式:protected void doPut(HttpServletResquest request,HttpServletResponse response)throws ServletException,IOException;8.8.2 Servlet

24、s2 Servlets的接口的接口doDeletedoDelete用來處理用來處理HTTPHTTP的的DELETEDELETE請求請求 此操作允許客戶端請求一個從server移出的URL。對于那些涉及到安全性的用戶來說,通過DELETE請求操作會有一些副作用。 當(dāng)編寫servlet時,為了支持DELETE操作,必須在子類HttpServlet中實現(xiàn)(implement)此方法。8.8.2 Servlets2 Servlets的接口的接口 方法方法doDeletedoDelete的格式:的格式:protected void doDelete (HttpServletResquest reques

25、t, HttpServletResponse response) throws ServletException,IOException;8.8.2 Servlets2 Servlets的接口的接口doHead doHead 用來處理用來處理HTTPHTTP的的HEADHEAD請求請求 缺省地,它會在無條件的GET方法執(zhí)行時運行,但是不返回任何數(shù)據(jù)到客戶端。只返回包含內(nèi)容信息的長度的header。由于用到GET操作,此方法應(yīng)該是很安全的(沒有副作用)也是可重復(fù)使用的。此方法的缺省實現(xiàn) (implement)自動地處理了HTTPDE的HEAD操作并且不需要通過一個子類實現(xiàn)(implement)。

26、8.8.2 Servlets2 Servlets的接口的接口 方法方法doHeaddoHead的格式:的格式:protected void doHead (HttpServletResquest request,HttpServletResponse response) throws ServletException,IOException; 8.8.2 Servlets2 Servlets的接口的接口doOptionsdoOptions用來處理用來處理HTTPHTTP的的OPTIONSOPTIONS請求請求 此操作自動地決定支持什么HTTP方法。比如說,如果創(chuàng)建HttpServlet的子類并

27、重載方法doGet,然后方法doOptions會返回下面的header:Allow:GET,HEAD,TRACE,OPTIONS一般不需要重載方法doOptions。8.8.2 Servlets2 Servlets的接口的接口 方法方法doOptionsdoOptions的格式:的格式:protected void doOptions HttpServletResquest request, HttpServletResponse response)throws ServletException,IOException;8.8.2 Servlets2 Servlets的接口的接口doTrace

28、doTrace用來處理用來處理HTTPHTTP的的TRACETRACE請求請求 此方法的缺省實現(xiàn)產(chǎn)生一個包含所有在trace請求中的header的信息的應(yīng)答(response)。在開發(fā)servlet時,多數(shù)情況下需要重載此方法。 8.8.2 Servlets2 Servlets的接口的接口 方法方法doTracedoTrace的格式:的格式:protected void doTrace (HttpServletResquest request, HttpServletResponse response)throws ServletException,IOException;8.8.2 Serv

29、lets2 Servlets的接口的接口 在開發(fā)以HTTP為基礎(chǔ)的servlet中,Servlet開發(fā)者關(guān)心方法doGet和方法doPost即可。8.8.3 Servlets3 Servlets的生命周期的生命周期 如果寫過Java的小應(yīng)用程序(Applet),那Servlet對你來說就不會太難,也許更為簡單。因為Servlet不用考慮圖形界面的應(yīng)用。與小應(yīng)用程序一樣,Servlet也有一個生命周期。Servlet的生命周期是當(dāng)服務(wù)器裝載運行Servlets;接收來自客戶端的多個請求并且返回數(shù)據(jù)給客戶端,然后再刪除移開Servlets。下面詳細(xì)描述如下: 8.8.3 Servlets3 Ser

30、vlets的生命周期的生命周期 當(dāng)一個服務(wù)器裝載Servlet時,它運行Servlet的 init() 方法。publicvoidinit(ServletConfigconfig)throwsServletExceptionsuper.init();/一些初始化的操作,如數(shù)據(jù)庫的連接需要記住的是一定要在init()結(jié)束時調(diào)用super.init()。init()方法不能反復(fù)調(diào)用,一旦調(diào)用就是重裝載Servlet。直到服務(wù)器調(diào)用destroy方法卸載Servlet后才能再調(diào)用。8.8.3 Servlets3 Servlets的生命周期的生命周期 在服務(wù)器裝載初始化Servlet后,Servlet

31、就能夠處理客戶端的請求,我們可以用 service 方法來實現(xiàn)。每個客戶端請求有它自己service方法:這些方法接收客戶端請求,并且發(fā)回相應(yīng)的響應(yīng)。Servlets能同時運行多個service。這是很重要的,這樣,service方法可以按一個thread-safe 樣式編寫。如:service方法更新Servlet對象中的一個字段field,這個字段是可以同時存取的。假如某個服務(wù)器不能同時并發(fā)運行 service方法,也可以用SingleThreadModel 接口。這個接口保證不會有兩個以上的線程(threads)并發(fā)運行。在Servlet執(zhí)行期間其最多的應(yīng)用是處理客戶端的請求并產(chǎn)生一個網(wǎng)

32、頁。其代碼如下: 8.8.3 Servlets3 Servlets的生命周期的生命周期 PrintWriterout=response.getWriter();out.println(html);out.println(headtitleServlet/title/head);out.println(body);out.println(HelloWorld);out.println(/body/html);out.close();8.8.3 Servlets3 Servlets的生命周期的生命周期 Servlets一直運行到他們被服務(wù)器卸載。在結(jié)束的時候需要收回在init()方法中使用的資源,

33、在Servlet中是通過destroy()方法來實現(xiàn)的。publicvoiddestroy()/回收在init()中啟用的資源,如關(guān)閉數(shù)據(jù)庫的連接等。8.4 JSPJSP與與servletsservlets 簡單的說,SUN首先發(fā)展出Servlet,其功能比較強勁,體系設(shè)計也很先進,只是,它輸出HTML語句還是采用了老的CGI方式,是一句一句輸出,所以,編寫和修改HTML非常不方便。后來SUN推出了類似于ASP的嵌套型的JSP,把JSP TAG嵌套到HTML語句中,這樣,就大大簡化和方便了網(wǎng)頁的設(shè)計和修改。新型的網(wǎng)絡(luò)語言如ASP,PHP都是嵌套型的。8.4 JSPJSP與與servletsse

34、rvlets Servlets是用Java編寫的服務(wù)器端程序,它與協(xié)議和平臺無關(guān),運行于Web服務(wù)器中。Servlets可以動態(tài)地擴展服務(wù)器的能力,并采用請求響應(yīng)模式提供Web服務(wù)。 JSP是Sun公司推出的Web開發(fā)語言,它類似于Microsfot公司的ASP,但由于它的跨平臺性,愈來愈受到廣泛的應(yīng)用。 Servlets與JSP之間的交互為開發(fā)Web服務(wù)提供了優(yōu)秀的解決方案。8.4 JSPJSP與與servletsservletsJSP主要關(guān)注HTML(或者XML)與Java代碼的結(jié)合,以及加入其中的JSP標(biāo)簽。如果一個支持JSP的服務(wù)器遇到一個JSP頁面,它首先查看該頁面是否已被編譯成為一

35、個Servlets。由此可見,JSP被編譯成Servlets即被轉(zhuǎn)變?yōu)榧僇ava,然后被裝載入服務(wù)器執(zhí)行。當(dāng)然,這一過程根據(jù)不同的JSP引擎而略有不同。8.4 JSPJSP與與servletsservlets(1)JSP是HTML(或者XML)與Java代碼結(jié)合的嵌套型語言;而Servlets則是純Java類。(2)JSP是以顯示為中心的,它為Web顯示開發(fā)人員提供了更加自然的開發(fā)模式。而Servlets不適宜開發(fā)顯示內(nèi)容改動頻繁的頁面,而在處理更為復(fù)雜的邏輯任務(wù)時,更多使用Servlets。(3)JSP使人們把顯示和邏輯分隔成為可能。這意味著顯示和邏輯開發(fā)可以并行進行。而Servlets并沒

36、有將輸出HTML語句和邏輯處理分離開。(4)從網(wǎng)絡(luò)三層結(jié)構(gòu)的角度看,一個網(wǎng)絡(luò)項目最少分三層:數(shù)據(jù)層、商業(yè)邏輯層和表示層。當(dāng)然也可以更復(fù)雜。Servlets用來編寫商業(yè)邏輯層是很強大的,但是對于編寫表示層就很不方便。JSP則主要是為了方便編寫表示層而設(shè)計的。8.4 JSPJSP與與servletsservlets在特定的軟件系統(tǒng)環(huán)境中,選擇使用Servlets或JSP通常不是一個對應(yīng)的關(guān)系。把它們結(jié)合起來使用以達到一個平衡的系統(tǒng)是合情合理的。例如,可以把Servlets用做控制器,以讓Servlets處理請求。一旦Servlets完成了請求處理,就把結(jié)果轉(zhuǎn)交給JSP并顯示給用戶。8.4 JSPJ

37、SP與與servletsservlets Servlet訪問JSP:fromjspToservlet.jspfromjspToservlet.jsp8.4 JSPJSP與與servletsservlets servletToJsp.javaservletToJsp.java:import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletToJsp extends HttpServlet public void doGet(HttpServletRequest req, HttpSe

38、rvletResponse res)throws ServletException, IOExceptiontry req.setAttribute (ServletName, ServletToJsp);getServletConfig().getServletContext().getRequestDispatcher(/ServletUseJsp.jsp).forward(req,res); catch (Exception e)e.printStackTrace();8.4 JSPJSP與與servletsservlets getServletConfig().getServletCo

39、ntext(). getRequestDispatcher(/ServletUseJsp.jsp).forward(req,res);這句話的意思大致是這句話的意思大致是: : 從從Servlet ConfigServlet Config中取得中取得ServletServlet上下文上下文, ,并根據(jù)給出的并根據(jù)給出的pathpath將請求轉(zhuǎn)移到令一個處理單元將請求轉(zhuǎn)移到令一個處理單元, ,主要是完成請求轉(zhuǎn)移主要是完成請求轉(zhuǎn)移和分發(fā)的功能和分發(fā)的功能. .8.4 JSPJSP與與servletsservlets servletUseJsp.jspservletUseJsp.jsp:Servle

40、t 使用JSPServlet使用JSP的例子:這個頁面是被這個Servlet調(diào)用的。8.8.5 5 調(diào)用調(diào)用ServletsServlets 要調(diào)用Servlet或Web應(yīng)用程序,可以使用下列方法:由URL調(diào)用、在FORM標(biāo)記中調(diào)用、在SERVLET標(biāo)記中調(diào)用。8.8.5 5 調(diào)用調(diào)用ServletsServlets 1 1由由URLURL調(diào)用調(diào)用 ServletServlet 指定 Servlet 名稱:當(dāng)應(yīng)用服務(wù)器管理器來將一個Servlet實例添加(注冊)到服務(wù)器配置中時,必須指定“Servlet 名稱”參數(shù)的值。例如,可以指定將hi作為HelloWorldServlet的Servlet

41、名稱。要調(diào)用該Servlet,需打開/path/hi。也可以指定Servlet和類使用同一名稱(HelloWorldServlet)。在這種情況下,將由/path/ HelloWorldServlet 來調(diào)用Servlet的實例。8.8.5 5 調(diào)用調(diào)用ServletsServlets 2 2在在FORMFORM標(biāo)記中指定標(biāo)記中指定ServletServlet 可以在FORM標(biāo)記中調(diào)用Servlet。HTML 格式使用戶能在Web頁面(即從瀏覽器)上輸入數(shù)據(jù),并向Servlet提交數(shù)據(jù)。例如:8.8.5 5

42、 調(diào)用調(diào)用ServletsServlets 2 2在在FORMFORM標(biāo)記中指定標(biāo)記中指定ServletServletFORMMETHOD=GETACTION=/servlet/myservletOLINPUTTYPE=radioNAME=broadcastVALUE=amAMBRINPUTTYPE=radioNAME=broadcastVALUE=fmFMBR/OL(用于放置文本輸入?yún)^(qū)域的標(biāo)記、按鈕和其它的提示符。/FORM 8.8.5 5 調(diào)用調(diào)用ServletsServlets 2 2在在FORMFORM標(biāo)記中指定標(biāo)記中指定ServletServlet ACTION特性表明了用于調(diào)用Se

43、rvlet的URL。關(guān)于METHOD的特性,如果用戶輸入的信息是通過GET方法向Servlet提交的,則 Servlet 必須優(yōu)先使用doGet()方法。反之,如果用戶輸入的信息是通過POST方法向Servlet提交的,則 Servlet 必須優(yōu)先使用doPost()方法。 8.8.5 5 調(diào)用調(diào)用ServletsServlets 3 3在在SERVLETSERVLET標(biāo)記中指定標(biāo)記中指定ServletServlet當(dāng)使用SERVLET標(biāo)記來調(diào)用Servlet時,如同使用FORM標(biāo)記一樣,無需創(chuàng)建一個完整的HTML頁面。作為替代,Servlet的輸出僅是HTML頁面的一部分,且被動態(tài)嵌入到原始HTML頁面中的其它靜態(tài)文本中。所有這些都發(fā)生在服務(wù)器上,且發(fā)送給用戶的僅是結(jié)果HTML頁面。8.8.5 5 調(diào)用調(diào)用ServletsServlets 3 3在在SERVLETSERVLET標(biāo)記中指定標(biāo)記中指定ServletServlet下列 HTML 代碼段顯示了如何使用該技術(shù)。 SERVLET NAME=my

溫馨提示

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

最新文檔

評論

0/150

提交評論