版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第15章Servlet根底編程主講:朱會東本課教學(xué)內(nèi)容認識Servlet編寫ServletServlet方法Servlet與JSP內(nèi)置對象Servlet是一種運行在效勞器端(一般指的是Web效勞器)的Java應(yīng)用程序,是Sun的效勞器端組件技術(shù)之一??梢陨蓜討B(tài)的Web頁面,它是屬于客戶與效勞器響應(yīng)的中間層。因此,可以說,JSP就是Servlet。兩者可以實現(xiàn)同樣的頁面效果,不過,編寫JSP和編寫Servlet相比,前者本錢低得多。15.1認識ServletJavaServlet是和平臺無關(guān)的效勞器端組件,它運行在Servlet容器中。Servlet容器負責(zé)Servlet和客戶的通信以及調(diào)用Servlet的方法,Servlet和客戶的通信采用“請求/響應(yīng)〞的模式。Servlet可完成如下功能:動態(tài)生成HTML頁面。請求轉(zhuǎn)發(fā)給其它Servlet組件與其它效勞器資源進行通信。15.1認識Servlet學(xué)習(xí)Servlet的價值Servlet屬于JSP的底層,學(xué)習(xí)它有助于了解底層細節(jié);另外,Servlet畢竟是一個Java類,適合純編程,如果是純編程的話,比將Java代碼混合在HTML中的JSP要好得多15.1認識Servlet15.1認識ServletServlet的框架是由兩個Java包組成:javax.servlet包:定義了所有的Servlet類都必須實現(xiàn)或擴展的通用接口和類,存放與HTTP協(xié)議無關(guān)的一般servlet類。包:擴展繼承了javax.servlet.*中某些類/接口,定義了采用HTTP協(xié)議通信的HttpServlet類。15.1認識Servletjava.lang.Object類javax.servlet.GenericServlet類javax.servlet.HttpServlet類javax.servlet.Servlet接口javax.servlet.ServletConfig接口javax.io.Serializable接口javax.servlet.http.HttpServletRequest接口javax.servlet.ServletRequest接口javax.servlet.http.HttpServletResponse接口javax.servlet.ServletResponse接口15.2編寫第一個Servlet制作一個servlet的完整過程編寫servlet配置servlet編譯servlet并部署到指定位置訪問servlet15.2.1建立Servlet步驟:導(dǎo)入需要的類庫重寫HttpServlet的(doGet/doPost或service)方法MyEclipse中建立Servlet〔1〕在工程的src目錄上,右擊鼠標(biāo),選擇NewServlet?!?〕在Name處輸入Servlet名字,單擊Next按鈕?!?〕在Servlet/JSPMappingURL處配置Servlet的mappingurl信息。此處配置的mappingurl即為將來訪問Servlet時的地址格式。單擊Finish按鈕結(jié)束?!?〕查看生成的Servlet源文件: 在Eclipse環(huán)境中,創(chuàng)立Servlet時可以選擇自動生成構(gòu)造方法、init方法、destroy方法、doGet方法和doPost方法。MyEclipse中建立ServletMyEclipse中建立Servlet15.2.2編寫Servletimportjava.io.*;Importjavax.servlet.*;importjavax.servlet..*;publicclassHelloServletextendsHttpServlet{ publicvoidinit(ServletConfigconfig)throwsServletException{ super.init(config); } publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html;charset=GB2312"); PrintWriterout=response.getWriter(); out.println("<html>"); out.println("<head><title>CH2-HelloServlet</title></head>"); out.println("<body>"); out.println("HelloWorld<br>"); out.println("大家好"); out.println("</body>"); out.println("</html>"); out.close(); }publicvoiddestroy(){ }}初始化全局變量從HTTP得到get請求并回復(fù)釋放資源編寫完一個Serlet后,還不能直接訪問必須配置URL和Serlet的對應(yīng)關(guān)系,用戶才能對它進行訪問。Servlet的配置是通過web.xml來實現(xiàn)的,也就是在web-inf\web.xml文件中配置<servlet>和<servlet-mapping>15.2.3配置Servlet<!--聲明一個servlet數(shù)據(jù),如果在工程中有用到Servlet,jsp-file和servlet-class二選一如果有jsp-file和load-on-startup元素存在,那么JSP網(wǎng)頁就會被重新編譯和加載--> <servlet><servlet-name>Servlet的名稱</servlet-name><servlet-class>該servlet類的路徑</servlet-class><init-param><param-name>參數(shù)名</param-name><param-value>參數(shù)值</param-value> <description>參數(shù)描述</description></init-param><jsp-file>/路徑/XXX.JSP</jsp-file><load-on-startup>表示web站臺被啟動時,自動加載該servlet的優(yōu)先級別,越小越優(yōu)先加載</load-on-startup></servlet>15.2.3配置Servlet<!--定義與Servlet中的映射關(guān)系,主要用于IE瀏覽的URL--><servlet-mapping><servlet-name>對應(yīng)的servlet-name名稱</servlet-name><url-pattern>在工程運行時IE中顯示的URL</url-pattern></servlet-mapping>url-pattern取值:1、可以與具體的某個Servlet對應(yīng)。2、也可以用統(tǒng)配符*來指定所有的頁面。15.2.3配置Servlet15.2.3配置Servlet
--HelloServlet配置例子<servlet><servlet-name>HelloServlet</servlet-name><servlet-class></servlet-class></servlet><servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern></servlet-mapping>重新啟動Tomcat后在IE中進行瀏覽://localhost:8080/ServletExample/HelloServlet15.2.4部署Servlet將編譯后的class文件放到web-inf\classes目錄下,編譯時將servlet-api.jar放到lib目錄下。以上工作會在部署整個工程時自動完成。重新啟動Tomcat后在IE中進行瀏覽://localhost:8080/ServletExample/HelloServlet15.2.5測試Servlet本機〔IP〕地址及其訪問的端口號該工程的目錄〔站點〕名url-pattern中的設(shè)置15.2.6Servlet運行機制Web效勞器doGet()方法doPost()方法HTTPGET請求HTTPPOST請求響應(yīng)響應(yīng)客戶機Servlet應(yīng)用模型Servlet
客戶端EJB組件JavaBean組件數(shù)據(jù)庫JDBC15.2.6Servlet運行機制15.2.6Servlet運行機制初次運行,系統(tǒng)會實例化ServletServlet采用的是多線程機制,每一次請求,系統(tǒng)就分配一個線程來運行doGet函數(shù)。但是這樣也會帶來平安問題,一般說來,不要在Servlet內(nèi)定義成員變量,除非這些成員變量是所有的用戶共用的15.3Servlet方法Servlet內(nèi)的方法有以下幾個:init()方法在實例化的過程中,HttpServlet中的init()方法會被調(diào)用doGet()/doPost()/service()方法doGet()在以get方式請求Servlet時運行。常見的get請求方式有:鏈接、get方式表單提交、直接訪問ServletdoPost()在以post方式請求Servlet時運行15.3Servlet方法destroy()方法destroy()方法在Servlet實例消亡時自動調(diào)用。在Web效勞器運行Servlet實例時,會因為一些原因,Servlet對象會消亡。如果在此Servlet消亡之前,還必須進行某些操作,比方釋放數(shù)據(jù)庫連接以節(jié)省資源等,這時就可以重寫destroy()方法15.3Servlet方法Servlet的生命周期Servlet實例調(diào)用init()進行初始化Servlet1Servlet2Servlet3Service1Service2Service3調(diào)用destory()進行銷毀Thread1Thread2Thread3時間讀取配制文件〔JDBC連接等〕或其他必須的執(zhí)行任務(wù),通過ServletConfig對象得到參數(shù)值ServletReques對象接受請求ServletResponse對象響應(yīng)該請求例子SayHi啟動container或是客戶端發(fā)出請求,此時容器就加載和實例化一個servletServlet的生命周期可以歸納為以下幾步由Servlet容器動態(tài)裝載Servlet;Servlet容器創(chuàng)立一個Servlet實例;Servlet容器調(diào)用Servlet的init()方法;客戶發(fā)送請求到Servlet;Servlet創(chuàng)立一個請求對象;Servlet創(chuàng)立一個響應(yīng)對象;Servlet激活service()方法,傳遞請求和響應(yīng)對象作為參數(shù);service()方法獲得請求對象的參數(shù),處理請求。service()方法通過響應(yīng)對象將結(jié)果傳遞給Server,最終到達客戶端當(dāng)Servlet不再需要Servlet時〔關(guān)閉時〕調(diào)用destory()方法。Servlet的生命周期Servlet的生命周期調(diào)用
service()方法
服務(wù)器加載Servlet服務(wù)器創(chuàng)建Servlet類的實例
調(diào)用Servlet實例的init()方法
收到請求service()方法處理請求并將輸出結(jié)果返回客戶端
Servlet等待下一個請求或由服務(wù)器卸載
Servlet在服務(wù)器調(diào)用destroy()方法后被卸載
Servlet生命周期當(dāng)客戶端向Web效勞器提出第一次Servlet請求時,Web效勞器會實例化一個Servlet,并且調(diào)用init()方法;如果Web效勞器中已經(jīng)存在了一個Servlet實例,將直接使用此實例;然后調(diào)用service()方法,service()方法將根據(jù)客戶端的請求方式來決定調(diào)用對應(yīng)的doXXX()方法;當(dāng)Servlet從Web效勞器中消亡時,Web效勞器將會調(diào)用Servlet的destroy()方法利用Servlet制作網(wǎng)站計數(shù)器,CounterServlet.java實現(xiàn)計數(shù)器的功能。packagemyservlet;importjavax.servlet.*;import.*;importjava.io.*;importjava.util.*;publicclassCounterServletextendsHttpServlet{ staticintcount; publicvoidinit(ServletConfigconfig)throwsServletException { super.init(config); }利用Servlet制作計數(shù)器publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ response.setContentType("text/html"); PrintWriterout=response.getWriter(); count++; out.println("<html>"); out.println("<head><title>ServletCounter</title></head>"); out.println("<body>"); out.println("YouarethevisitorofNo:<h3>"+String.valueOf(count)+"<h3>"); out.println(
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖南化工設(shè)計院有限公司招聘筆試參考題庫含答案解析
- 2025年貴州貞豐縣國有集團公司招聘筆試參考題庫含答案解析
- 2025年廣西龍象谷投資有限公司招聘筆試參考題庫含答案解析
- 2025年屆青島地鐵運營有限公司招聘筆試參考題庫含答案解析
- 2025年中國郵政集團湖北分公司招聘筆試參考題庫含答案解析
- 2025年黑龍江前哨農(nóng)場有限公司招聘筆試參考題庫含答案解析
- 2025年工程技術(shù)研究院有限公司招聘筆試參考題庫含答案解析
- 二零二五年度酒店業(yè)勞動合同法條例解讀3篇
- 二零二五年度豪華二手車置換業(yè)務(wù)合作協(xié)議范本3篇
- 二零二五年度邴綺離婚協(xié)議書:婚姻解除及財產(chǎn)分割及子女監(jiān)護權(quán)協(xié)議
- 一年級數(shù)學(xué)20以內(nèi)加減法口算題(4500道)
- 上海上海市醫(yī)療急救中心招聘筆試歷年典型考題及考點附答案解析
- 新概念英語第一冊Lesson103-104筆記(語法點+配套練習(xí)+答案)
- 2024年河南農(nóng)業(yè)職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案
- (正式版)JBT 3300-2024 平衡重式叉車 整機試驗方法
- 養(yǎng)老院健康檔案模板
- (2024年)電工安全培訓(xùn)(新編)課件
- 單位車輛變更名稱的委托書
- 粉塵外協(xié)單位清理協(xié)議書
- 2023年12月首都醫(yī)科大學(xué)附屬北京中醫(yī)醫(yī)院面向應(yīng)屆生招考聘用筆試近6年高頻考題難、易錯點薈萃答案帶詳解附后
- 機電設(shè)備故障診斷與維修(高職)全套教學(xué)課件
評論
0/150
提交評論