




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第4 4章章 Java ServletJava Servlet技術(shù)技術(shù)主要內(nèi)容主要內(nèi)容n 4.1 Servlet概述n 4.2 Servlet生命周期n 4.3 使用Servlet n 4.4 Applet與Servlet通信4.1 Servlet4.1 Servlet概述概述nServlet是服務(wù)器端的小應(yīng)用程序,用于響應(yīng)客戶端的請(qǐng)求;并且一般會(huì)把處理的結(jié)果以HTML的形式返回給客戶端。nServlet是由服務(wù)器端調(diào)用和執(zhí)行的Java類。nServlet與JSP有著直接的血緣關(guān)系。 (JSP代碼就是先轉(zhuǎn)換為Servlet,然后才被編譯執(zhí)行)ServletServlet介紹介紹n什么是Ser
2、vlet Servlet是服務(wù)器端的小應(yīng)用程序,用于響應(yīng)客戶端的請(qǐng)求;并且一般會(huì)把處理的結(jié)果以HTML的形式返回給客戶端。 Servlet是由服務(wù)器端調(diào)用和執(zhí)行的Java類。 Servlet與JSP有著直接的血緣關(guān)系。 (JSP代碼就是先轉(zhuǎn)換為Servlet,然后才被編譯執(zhí)行)ServletServlet介紹介紹n Servlet的生命周期 當(dāng)客戶端第一次請(qǐng)求Sevlet時(shí),Servlet被加載到內(nèi)存 服務(wù)器創(chuàng)建這個(gè)Servlet的實(shí)例,并調(diào)用該對(duì)象的init()方法進(jìn)行初始化 每當(dāng)客戶端發(fā)來(lái)請(qǐng)求的時(shí)候,容器創(chuàng)建請(qǐng)求對(duì)象和響應(yīng)對(duì)象,并調(diào)用該對(duì)象的service()方法對(duì)用戶的請(qǐng)求進(jìn)行處理,并對(duì)
3、用戶進(jìn)行響應(yīng) 當(dāng)服務(wù)器端不再需要該Servlet的時(shí)候,服務(wù)器調(diào)用destroy()方法卸載該Servlet 注意:在Servlet的生命周期中,service()方法是其中的核心。每當(dāng)客戶端向Servlet發(fā)出一個(gè)請(qǐng)求時(shí),service()方法就會(huì)被調(diào)用。ServletServlet介紹介紹 默認(rèn)條件下,service()方法會(huì)調(diào)用與HTTP請(qǐng)求相應(yīng)的do功能。比如:客戶是以GET方式提交請(qǐng)求,則service()方法會(huì)調(diào)用doGet()方法;客戶是以POST方式提交請(qǐng)求,則service()方法會(huì)調(diào)用doPost()方法。 注意:用戶在地址欄中輸入該JSP頁(yè)面的URL直接訪問(wèn)該頁(yè)面時(shí),使用
4、的是get請(qǐng)求。n Servlet是用Java編寫的且協(xié)議和平臺(tái)都獨(dú)立的服務(wù)器端的組件。與客戶端組件Applet相對(duì)應(yīng)。Servlet擴(kuò)展了面向請(qǐng)求/響應(yīng)的服務(wù)器的模塊,使用平臺(tái)專用的API進(jìn)行服務(wù)器端的編程。Servlet為服務(wù)器和基于Web的客戶之間的通信提供了一條更為簡(jiǎn)單的途徑。它的特殊用途包括:n (1) 允許用戶之間的合作。一個(gè)Servlet可以同時(shí)并發(fā)處理大量的請(qǐng)求,而且可以同步請(qǐng)求,因此使Servlets能夠支持像在線會(huì)議這樣的系統(tǒng)。Servlets能夠并發(fā)地服務(wù)多個(gè)客戶。n (2) 轉(zhuǎn)發(fā)請(qǐng)求。Servlets能夠轉(zhuǎn)發(fā)請(qǐng)求到其它的服務(wù)器和Servlets,因此Servlets能夠
5、被用來(lái)在多個(gè)鏡像同一個(gè)內(nèi)容的服務(wù)器之間來(lái)平衡負(fù)載,在多個(gè)服務(wù)器上根據(jù)任務(wù)類型或者組織邊界分割單一的邏輯服務(wù)。4.2 Servlet生命周期生命周期圖4.1 Servlet的生命周期服務(wù)器服務(wù)器處理用戶請(qǐng)求載入銷毀服務(wù)器Servlet代碼Servlet代碼客戶客戶Servlet代碼 1. 初始化初始化Servlet 當(dāng)服務(wù)器載入一個(gè)Servlet時(shí),服務(wù)器運(yùn)行Servlet的init方法。初始化在客戶請(qǐng)求被處理和Servlet被銷毀之前完成。 2. Servlet_Client交互交互 初始化成功后,HTTP Servlet調(diào)用Service方法處理客戶請(qǐng)求,Service方法將每個(gè)請(qǐng)求分配到處
6、理這個(gè)請(qǐng)求的方法,從而支持標(biāo)準(zhǔn)的HTTP客戶請(qǐng)求。HttpServlet類中的方法處理客戶請(qǐng)求時(shí)使用以下兩個(gè)參數(shù): (1) HttpServletRequest對(duì)象:封裝了從客戶來(lái)的數(shù)據(jù),主要提供了訪問(wèn)初始請(qǐng)求數(shù)據(jù)的方法和字段;訪問(wèn)客戶數(shù)據(jù)時(shí)使用getParameter方法得到一個(gè)已命名參數(shù)的值。 (2) HttpServletResponse對(duì)象:封裝了對(duì)客戶的響應(yīng)。使用getWriter方法返回文本數(shù)據(jù)給客戶(可以以HTML網(wǎng)頁(yè)的形式表現(xiàn)出來(lái))。Service方法支配的HTTP請(qǐng)求如表13.1所示。表表4.1 Service方法支配的方法支配的HTTP請(qǐng)求請(qǐng)求Service 方法 處理的
7、HTTP 請(qǐng)求 doGet 處理 GET、條件 GET 和 HEAD 請(qǐng)求 doPost 處理 POST 請(qǐng)求 doPut 處理 PUT 請(qǐng)求 deDelete 處理 DELETE 請(qǐng)求 通常,編寫的Servlet應(yīng)該重載處理它支持的HTTP交互的方法。如果出錯(cuò),這些方法返回一個(gè)BAD_REQUEST(400)錯(cuò)誤。當(dāng)Servlet收到OPTIONS請(qǐng)求時(shí),HttpServlet的Service方法調(diào)用doOptions方法。默認(rèn)的doOptions的實(shí)現(xiàn)自動(dòng)地決定了支持何種HTTP選項(xiàng)和返回信息。HTTP Servlets通常能夠并發(fā)地服務(wù)多個(gè)客戶。如果Servlet中的這個(gè)方法對(duì)于客戶訪問(wèn)
8、共享資源是可行的,那么你可以通過(guò)創(chuàng)建在某一時(shí)刻只能處理一個(gè)客戶請(qǐng)求的Servlet來(lái)處理并發(fā)。 3. 銷毀銷毀Servlet Servlet一直運(yùn)行直到服務(wù)器銷毀它們,比如在系統(tǒng)管理員的要求下。當(dāng)一個(gè)服務(wù)器銷毀一個(gè)Servlet時(shí),服務(wù)器運(yùn)行Servlet的Destroy()方法。方法只運(yùn)行一次,服務(wù)器將不再運(yùn)行Servlet,直到服務(wù)器重新載入和重新初始化Servlet。4.3 使用使用Servlet4.3.1 編寫編寫Servlet 【例13.1】 在客戶端填寫“用戶注冊(cè)信息”網(wǎng)頁(yè),并將此網(wǎng)頁(yè)提交到后臺(tái)服務(wù)器端Servlet,服務(wù)器端Servlet程序給予響應(yīng),并以網(wǎng)頁(yè)的形式按行輸出用戶提
9、交的基本信息。 1. 客戶端客戶端 客戶端是一個(gè)“用戶注冊(cè)信息”的HTML網(wǎng)頁(yè),如圖13.2所示。用戶輸入個(gè)人信息,點(diǎn)擊“確定”按鈕,將表單數(shù)據(jù)提交到服務(wù)器,然后等待服務(wù)器的響應(yīng)。Index.html源文件代碼如下:用戶注冊(cè)信息收集用戶注冊(cè)信息 姓名: 身份證號(hào): 性別男女職業(yè) 計(jì)算機(jī)業(yè) 醫(yī)生 教師 軍隊(duì) 個(gè)性化宣言 圖4.2 “用戶注冊(cè)信息”網(wǎng)頁(yè) 在網(wǎng)頁(yè)index.html中要注意表單的書寫,表單的action屬性對(duì)應(yīng)服務(wù)器端的Servlet,本例中取值為3:8080/examples/Servlet/user.UserServlet;method屬性是
10、訪問(wèn)方法,本例中為POST方法。表13.2是表單中的元素標(biāo)簽和命名,可以看到除去“確定”和“清空”,其它的元素標(biāo)簽在第三欄都有一個(gè)對(duì)應(yīng)的名字,Servlet通過(guò)這些名字獲得用戶在界面上輸入的值,而用戶單擊“確定”按鈕時(shí),表單內(nèi)容就提交到action屬性指定的Servlet。表表4.2 表單元素標(biāo)簽及命名表單元素標(biāo)簽及命名元素標(biāo)簽 類 型 標(biāo) 簽 命 名 姓名 text name 身份證號(hào) text number 性別 radio sex 職業(yè) select job 個(gè)性化宣言 textarea ta 確定 submit 清空 reset 2. 服務(wù)器端服務(wù)器端 服務(wù)器端Servlet收集用戶界
11、面輸入的數(shù)據(jù)(見圖4.3),然后按行返回這些內(nèi)容,結(jié)果如圖4.4所示。注意傳輸過(guò)程中中文字符可能會(huì)有出錯(cuò)情況,因此再添加一個(gè)轉(zhuǎn)換字段,使得Servlet能夠正確打印輸出。/程序文件名:UserServlet.javapackage user;import java.io.*;import javax.Servlet.*;import javax.Servlet.http.*;public class UserServlet extends HttpServlet String name,number,sex,job,ta;public void init() throws ServletExc
12、eptionsuper.init();name = new String();number = new String();sex = new String();job = new String();ta = new String();/解決中文轉(zhuǎn)換問(wèn)題public String parseChinese(String inStr) String s = null; byte temp; if (inStr = null) /System.out.println(Warn:Chinese null founded!); return new String(); try temp=inStr.ge
13、tBytes(iso-8859-1); s = new String(temp); catch(UnsupportedEncodingException e) System.out.println (e.toString(); return s; public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException /獲取用戶界面輸入的值name = req.getParameter(name);number = req.getParameter(numb
14、er);sex = req.getParameter(sex);job = req.getParameter(job);ta = req.getParameter(ta); /進(jìn)行輸出res.setContentType(text/html; charset=GB2312);PrintWriter out = res.getWriter();out.println();out.println(注冊(cè)信息返回結(jié)果);out.println( 姓名: + parseChinese(name);out.println( 身份證號(hào): + number);out.println( 性別: + parseC
15、hinese(sex) + 職業(yè): + parseChinese(job);out.println(個(gè)性化宣言: + parseChinese(ta) + ); 圖4.3 用戶輸入注冊(cè)信息圖4.4 Servlet返回信息4.3.2 編譯、配置編譯、配置Servlet 安裝的Java包是沒有帶Servlet的JAR文件,所以將D:Apache Tomcat 4.0commonlib目錄下的Servlet.jar配置到路徑包的安裝路徑下庫(kù)的擴(kuò)展目錄中,編譯時(shí)會(huì)自動(dòng)連接庫(kù),如本書配置到的目錄為D:j2sdk1.4.0_01jrelibext。在命令行提示符下鍵入命令javac UserServlet
16、.java編譯文件,生成類UserServlet.class。 Servlet是服務(wù)器端組件,所以必須配置到服務(wù)器端。對(duì)于Tomcat 4.0服務(wù)器,將index.html配置到物理路徑D:Apache Tomcat 4.0webappsROOTuser目錄下,對(duì)應(yīng)的網(wǎng)絡(luò)路徑就是3:8080/user/index.html;將UserServlet配置到物理路徑下的D:Apache Tomcat 4.0webappsexamplesWEB-INFclassesuser目錄下,對(duì)應(yīng)的網(wǎng)絡(luò)地址就是3:8080/exampl
17、es/Servlet/user.UserServlet。這些配置信息由index.html中的Action屬性標(biāo)明。 如果希望能夠配置到根目錄下,則在開始-程序-Apache Tomcat 4.0-Configuration中單擊EditServer Configuration,然后找到行: !- - -刪除第二個(gè),將以上語(yǔ)句變成: 將機(jī)器重啟動(dòng),使得配置文件生效,并在D:Apache Tomcat 4.0webappsROOTWEB-INF路徑下建立classes目錄,然后將UserServlet.java源文件中的語(yǔ)句行package user;去掉,重新編譯成.class類文件并放入此目
18、錄,則action屬性對(duì)應(yīng)的網(wǎng)絡(luò)地址為3:8080/Servlet/ UserServlet4.4 Applet與與Servlet通信通信 Applet與Servlet的通信過(guò)程的基本原理相當(dāng)于HTML網(wǎng)頁(yè)的POST請(qǐng)求。首先兩者之間建立一個(gè)連接,使用URLConnection類對(duì)象打開連接后,Applet將請(qǐng)求發(fā)送給Servlet,Servlet處理請(qǐng)求并返回處理結(jié)果。注意,發(fā)送請(qǐng)求數(shù)據(jù)時(shí)一定用URLEncoder類的Encode方法進(jìn)行格式編碼,在Servlet端還需用URLDecoder類的Decode方法進(jìn)行格式解碼。 在HTTP協(xié)議中POST請(qǐng)求
19、是以參數(shù)名=參數(shù)值的方式自動(dòng)進(jìn)行URL編碼后傳送的,編程中要手工實(shí)現(xiàn),例如名-值對(duì) qry = SELECT number,code,score from chengji WHERE code=3001進(jìn)行URL編碼如下: String qry = URLEncoder.encode(qry,UTF-8) + = + URLEncoder.encode(qryString,UTF-8); 建立連接時(shí),注意將DbServlet配置到路徑D:Apache Tomcat 4.0webappsROOTWEB-INFclasses下。String str = 3:8
20、080/Servlet/DbServlet;URL urlName = new URL(str);打開連接。URLConnection uc = urlName.openConnection();設(shè)置參數(shù)。uc.setDoOutput(true);uc.setDoInput(true);uc.setUseCaches(false); uc.setRequestProperty(Content-type,application/x-www-form-urlencoded); 得到數(shù)據(jù)流發(fā)送格式轉(zhuǎn)換后的POST請(qǐng)求。 DataOutputStream dos = new DataOutputStr
21、eam(uc.getOutputStream(); dos.writeBytes(qry); 在DbServlet中接收數(shù)據(jù)并進(jìn)行解碼。 String qry = req.getParameter(qry); qry = URLDecoder.decode(qry,UTF-8); 【例4.2】編寫Applet和Servlet交互的程序,使得用戶在Applet界面(見圖4.5)上輸入數(shù)據(jù)庫(kù)查詢語(yǔ)句,單擊“查詢”按鈕后,后臺(tái)Servlet接收請(qǐng)求,對(duì)后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行查詢,并將查詢結(jié)果返回到Applet界面的文本區(qū)域內(nèi)。圖4.5 Applet用戶界面圖4.6 Applet和Servlet交互原理圖數(shù)據(jù)
22、庫(kù)SQL查詢ResultSet對(duì)象URLConnection打開連接,發(fā)送請(qǐng)求流對(duì)象接收返回結(jié)果Java AppletJava Servlet4.4.1 Servlet文件文件 首先書寫查詢數(shù)據(jù)庫(kù)的Servlet文件,編譯通過(guò)后配置到上面提到的路徑。/程序文件名DbServlet.javaimport javax.Servlet.*;import javax.Servlet.http.*;import java.util.*;import java.sql.*;import java.io.*;import .*;public class DbServlet extends HttpServl
23、etpublic void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletExceptionPrintWriter out = res.getWriter();res.setContentType(text/html;charset=GB2312); /得到Applet請(qǐng)求參數(shù),解碼后輸出String qry = req.getParameter(qry);qry = URLDecoder.decode(qry,UTF-8);out.println(qry);Connecti
24、on dbCon = null;try /同數(shù)據(jù)庫(kù)建立連接Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);String dbURL = jdbc:odbc:STU;dbCon = DriverManager.getConnection(dbURL,);PreparedStatement p = dbCon.prepareStatement(qry);ResultSet rs = p.executeQuery();/輸出查詢結(jié)果while(rs.next()out.print(rs.getString(1);out.print(rs.getString(2
25、) + );out.println(rs.getInt(3);catch(Exception e)out.println(讀寫數(shù)據(jù)庫(kù)出錯(cuò): + e.getMessage();finallytrydbCon.close();out.close();catch(Exception e) out.println(關(guān)閉數(shù)據(jù)庫(kù)連接出錯(cuò): + e.getMessage(); ;4.4.2 Applet文件文件編寫與Servlet通信的Applet文件。/程序文件名DbApplet.javaimport java.awt.*;import java.applet.*;import java.awt.even
26、t.*;import java.io.*;import .*;public class DbApplet extends Applet implements ActionListenerTextField tfQuery;TextArea taResults;Button btnExecute;URL chatURL;public void init()Panel pa = new Panel();pa.setLayout(new FlowLayout(FlowLayout.LEFT);pa.add(new Label(查詢串:);tfQuery = new TextField(SELECT
27、number,code,score from chengji WHERE code=3001,50);pa.add(tfQuery);btnExecute = new Button(查詢);btnExecute.addActionListener(this);pa.add(btnExecute);add(North,pa);taResults = new TextArea(30,60);add(Center,taResults);chatURL = getCodeBase();public void actionPerformed(ActionEvent evt)String lbl = ev
28、t.getActionCommand();if(lbl.equals(查詢) String qryString = tfQuery.getText(); try /查詢串編碼 String qry = URLEncoder.encode(qry,UTF-8) + = + URLEncoder.encode(qryString,UTF-8); /打開到DbServlet的連接String str = 3:8080/Servlet/DbServlet;URL urlName = new URL(str);URLConnection uc = urlName.openConnection();uc.setDoOutput(true);uc.setDoInput(true);uc.setUseCaches(false); uc.setRequestProperty(C
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025光纖布線產(chǎn)品購(gòu)銷合同范本
- 2025上海市區(qū)房地產(chǎn)買賣合同
- 2025深入理解合同詐騙現(xiàn)象
- 2025深圳房屋租賃合同書
- LED顯示屏系統(tǒng)制作安裝合同
- 2025企業(yè)之間借款合同樣式版本
- 2025太陽(yáng)能發(fā)電站項(xiàng)目合作開發(fā)合同
- 標(biāo)準(zhǔn)員專業(yè)基礎(chǔ)知識(shí)統(tǒng)考考試歷年真題(含答案)
- 2025年長(zhǎng)沙貨車從業(yè)資格證題
- 寒假趣事放鞭炮550字
- 2024年中國(guó)機(jī)械工業(yè)集團(tuán)有限公司國(guó)機(jī)集團(tuán)總部招聘筆試真題
- 高新技術(shù)企業(yè)認(rèn)定代理服務(wù)協(xié)議書范本
- 安全生產(chǎn)、文明施工資金保障制度11142
- 中藥性狀鑒定技術(shù)知到課后答案智慧樹章節(jié)測(cè)試答案2025年春天津生物工程職業(yè)技術(shù)學(xué)院
- 2025年全屋定制家居市場(chǎng)分析與經(jīng)營(yíng)計(jì)劃
- 電動(dòng)汽車結(jié)構(gòu)原理與檢修課件:慢充系統(tǒng)檢修
- 2024年臺(tái)州職業(yè)技術(shù)學(xué)院招聘筆試真題
- GB/T 33744-2025應(yīng)急避難場(chǎng)所管護(hù)使用規(guī)范
- 專題09 產(chǎn)業(yè)區(qū)位與產(chǎn)業(yè)發(fā)展【知識(shí)精研】高考地理二輪復(fù)習(xí)
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗(yàn)
- 2024年中考模擬試卷道法(全國(guó)卷)
評(píng)論
0/150
提交評(píng)論