![JavaWeb程序設(shè)計(jì) 課件 ch09 Servlet 編程_第1頁](http://file4.renrendoc.com/view12/M01/0A/07/wKhkGWYbkWiAeiJ-AAEWlXJABSw023.jpg)
![JavaWeb程序設(shè)計(jì) 課件 ch09 Servlet 編程_第2頁](http://file4.renrendoc.com/view12/M01/0A/07/wKhkGWYbkWiAeiJ-AAEWlXJABSw0232.jpg)
![JavaWeb程序設(shè)計(jì) 課件 ch09 Servlet 編程_第3頁](http://file4.renrendoc.com/view12/M01/0A/07/wKhkGWYbkWiAeiJ-AAEWlXJABSw0233.jpg)
![JavaWeb程序設(shè)計(jì) 課件 ch09 Servlet 編程_第4頁](http://file4.renrendoc.com/view12/M01/0A/07/wKhkGWYbkWiAeiJ-AAEWlXJABSw0234.jpg)
![JavaWeb程序設(shè)計(jì) 課件 ch09 Servlet 編程_第5頁](http://file4.renrendoc.com/view12/M01/0A/07/wKhkGWYbkWiAeiJ-AAEWlXJABSw0235.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章Servlet編程本課教學(xué)內(nèi)容認(rèn)識Servlet編寫ServletServlet生命周期Servlet與JSP內(nèi)置對象設(shè)置歡迎頁面在Servlet中讀取參數(shù)使用過濾器異常處理認(rèn)識ServletServlet是一種運(yùn)行在服務(wù)器端(一般指的是Web服務(wù)器)的Java應(yīng)用程序,可以生成動(dòng)態(tài)的Web頁面,它是屬于客戶與服務(wù)器響應(yīng)的中間層。因此,可以說,JSP就是Servlet。兩者可以實(shí)現(xiàn)同樣的頁面效果,不過,編寫JSP和編寫Servlet相比,前者成本低得多認(rèn)識Servlet學(xué)習(xí)Servlet的價(jià)值Servlet屬于JSP的底層,學(xué)習(xí)它有助于了解底層細(xì)節(jié);另外,Servlet畢竟是一個(gè)Java類,適合純編程,如果是純編程的話,比將Java代碼混合在HTML中的JSP要好得多編寫Servlet-建立Servlet步驟:
讓這個(gè)類繼承javax.servlet.http.HttpServlet重寫HttpServlet的doGet()方法編寫Servlet-建立Servlet配置Servlet部署Servlet測試ServletServlet運(yùn)行機(jī)制初次運(yùn)行,系統(tǒng)會(huì)實(shí)例化ServletServlet采用的是多線程機(jī)制,每一次請求,系統(tǒng)就分配一個(gè)線程來運(yùn)行doGet函數(shù)。但是這樣也會(huì)帶來安全問題,一般說來,不要在Servlet內(nèi)定義成員變量,除非這些成員變量是所有的用戶共用的Servlet生命周期Servlet內(nèi)的方法有以下幾個(gè):
init()方法在實(shí)例化的過程中,HttpServlet中的init()方法會(huì)被調(diào)用Servlet生命周期Servlet內(nèi)的方法有以下幾個(gè):doGet()/doPost()/service()方法doGet()在以get方式請求Servlet時(shí)運(yùn)行。常見的get請求方式有:鏈接、get方式表單提交、直接訪問ServletdoPost()在以post方式請求Servlet時(shí)運(yùn)行Servlet生命周期destroy()方法destroy()方法在Servlet實(shí)例消亡時(shí)自動(dòng)調(diào)用。在Web服務(wù)器運(yùn)行Servlet實(shí)例時(shí),會(huì)因?yàn)橐恍┰颍琒ervlet對象會(huì)消亡。如果在此Servlet消亡之前,還必須進(jìn)行某些操作,比如釋放數(shù)據(jù)庫連接以節(jié)省資源等,這時(shí)就可以重寫destroy()方法Servlet生命周期Servlet的生命周期如圖Servlet生命周期當(dāng)客戶端向Web服務(wù)器提出第一次Servlet請求時(shí),Web服務(wù)器會(huì)實(shí)例化一個(gè)Servlet,并且調(diào)用init()方法;如果Web服務(wù)器中已經(jīng)存在了一個(gè)Servlet實(shí)例,將直接使用此實(shí)例;然后調(diào)用service()方法,service()方法將根據(jù)客戶端的請求方式來決定調(diào)用對應(yīng)的doXXX()方法;當(dāng)Servlet從Web服務(wù)器中消亡時(shí),Web服務(wù)器將會(huì)調(diào)用Servlet的destroy()方法Servlet與JSP內(nèi)置對象獲得內(nèi)置對象的方法獲得out對象JSP中的out對象,一般可以使用doXXX方法中的response參數(shù)獲得默認(rèn)情況下,out對象是無法打印中文解決方法:response.setContentType("text/html;charset=gb2312");Servlet與JSP內(nèi)置對象獲得request和response對象 publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //將request參數(shù)當(dāng)成request對象使用 //將response參數(shù)當(dāng)成response對象使用 }Servlet與JSP內(nèi)置對象獲得session對象
HttpSessionsession=request.getSession();//將session當(dāng)成session對象來使用Servlet與JSP內(nèi)置對象獲得application對象
ServletContextapplication=this.getServletContext(); //將application當(dāng)成application對象來使用可以使用application實(shí)現(xiàn)服務(wù)器內(nèi)跳轉(zhuǎn):重定向和服務(wù)器內(nèi)跳轉(zhuǎn)。設(shè)置歡迎頁面在很多的門戶網(wǎng)站中,都會(huì)把自己的首頁作為網(wǎng)站的歡迎頁面。設(shè)置完歡迎頁面后,用戶登錄時(shí)輸入的URL只需為該門戶網(wǎng)站的虛擬路徑時(shí),就可以自動(dòng)訪問歡迎頁面設(shè)置歡迎頁面方法:
<welcome-file-list> <!--所要設(shè)定的歡迎頁面--> <welcome-file>welcome.jsp</welcome-file></welcome-file-list>設(shè)置歡迎頁面規(guī)則:web.xml可以同時(shí)設(shè)置多個(gè)歡迎頁面,Web容器會(huì)默認(rèn)設(shè)置的第一個(gè)頁面為歡迎頁面,如果找不到最前面的頁面,Web容器將會(huì)依次選擇后面的頁面為歡迎頁面在Servlet中讀取參數(shù)-參數(shù)設(shè)定web.xml文件有2種類型的參數(shù)設(shè)定:設(shè)置全局參數(shù),該參數(shù)所有的Servlet都可以訪問
<context-param> <param-name>參數(shù)名</param-name> <param-value>參數(shù)值</param-value> </context-param>
在Servlet中讀取參數(shù)-參數(shù)設(shè)定設(shè)置局部參數(shù),該參數(shù)只有相應(yīng)的Servlet才能訪問
<servlet> <servlet-name>Servlet名稱</servlet-name> <servlet-class>Servlet類路徑</servlet-class> <init-param> <param-name>參數(shù)名</param-name> <param-value>參數(shù)值</param-value> </init-param></servlet>在Servlet中讀取參數(shù)-獲取參數(shù)獲取全局參數(shù)的方法是:
ServletContextapplication=this.getServletContext(); application.getInitParameter("參數(shù)名稱");在Servlet中讀取參數(shù)-獲取參數(shù)獲取局部參數(shù)的方法是:
this.getInitParameter("參數(shù)名稱");*此處的this是指Servlet本身使用過濾器過濾器屬于一種小巧的、可插入的Web組件,它能夠?qū)eb應(yīng)用程序的前期處理和后期處理進(jìn)行控制,可以攔截請求和響應(yīng),查看、提取或者以某種方式操作正在客戶端和服務(wù)器之間進(jìn)行交換的數(shù)據(jù)使用過濾器需要過濾器的情況情況一: 為了解決中文亂碼問題,我們經(jīng)常看到一段代碼:request.setCharacterEncoding("gb2312");response.setContentType("text/html;charset=gb2312");這是Servlet用來設(shè)置編碼用的,如果Servlet的處理方法最前面沒有加入這一段代碼,就很可能會(huì)出現(xiàn)亂碼問題。如果是一個(gè)大工程的話,會(huì)有很多很多的Servlet,于是很多人發(fā)現(xiàn)在這么多代碼中重復(fù)設(shè)置編碼,非常麻煩。而且,一旦需求變了,需要換成另外的編碼,對程序員來說將是一件很繁瑣的事情使用過濾器需要過濾器的情況情況二:很多的門戶網(wǎng)站都會(huì)有登錄頁面,這是為了業(yè)務(wù)需求,同時(shí)也是為了使用戶控制更加的安全。如果客戶沒有登錄就訪問網(wǎng)站的某一頁面,在很多情況下會(huì)引發(fā)安全問題。應(yīng)該如何避免這種情況?傳統(tǒng)情況下,可以使用session檢查來完成,但是在很多頁面上都添加session檢查代碼,也會(huì)比較繁瑣使用過濾器需要過濾器的情況情況三:許多的網(wǎng)站都存在著各種不同的權(quán)限,比如,只有管理員才可以對網(wǎng)站的某些數(shù)據(jù)進(jìn)行維護(hù)和修改,一般的普通用戶是無法完成該功能的。登錄過后,網(wǎng)頁如何區(qū)分普通用戶與管理員?如果是每一個(gè)頁面寫一個(gè)判斷用戶類型的代碼,似乎也非常繁瑣編寫過濾器Servlet過濾器可以當(dāng)作一個(gè)只需要在web.xml文件中配置就可以靈活使用、可以重用的模塊化組件。它能夠?qū)SP、HTML、Servlet文件進(jìn)行過濾編寫過濾器實(shí)現(xiàn)一個(gè)過濾器需要兩個(gè)步驟:
實(shí)現(xiàn)接口javax.servlet.Filter;編寫過濾器實(shí)現(xiàn)一個(gè)過濾器需要兩個(gè)步驟:實(shí)現(xiàn)3個(gè)方法初始化方法:表示的是過濾器初始化時(shí)的動(dòng)作。publicvoidinit(FilterConfigconfig);消亡方法:表示的是過濾器消亡時(shí)候的動(dòng)作。publicvoiddestroy();過濾函數(shù):表示的是過濾器過濾時(shí)的動(dòng)作。publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain);過濾器的配置過濾器的配置有以下幾個(gè)步驟: 用<filter>元素定義過濾器<filter>元素有兩個(gè)必要子元素:
<filter-name>元素用來設(shè)定過濾器的名字
<filter-class>元素用來設(shè)定過濾器的類路徑過濾器的配置過濾器的配置有以下幾個(gè)步驟: 用<filter-mapping>配置過濾器的映射 過濾所有文件
<filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/*</url-pattern></filter-mapping>過濾器的配置過濾一個(gè)或者多個(gè)Servlet(JSP)
<filter-mapping>
<filter-name>FilterName</filter-name> <url-pattern>/PATH1/ServletName1(JSPName1)</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/PATH2/ServletName2(JSPName2)</url-pattern></filter-mapping>
過濾器的配置過濾一個(gè)或者多個(gè)文件目錄 <filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/PATH1/*</url-pattern> </filter-mapping>
需要注意的問題關(guān)于過濾器,有以下幾個(gè)問題需要注意過濾器的初始化和doFilter的調(diào)用時(shí)機(jī)過濾器的初始化是在服務(wù)器運(yùn)行的時(shí)候自動(dòng)運(yùn)行需要注意的問題過濾器常見應(yīng)用場合總結(jié)如下:獲取請求數(shù)據(jù)并操作性能保障安全保障會(huì)話處理異常處理在Web應(yīng)用程序中,總會(huì)發(fā)生各種各樣的異常:比如數(shù)據(jù)庫連接失敗,0被作為除數(shù),得到的值是空,或者是數(shù)組溢出等等。如果出現(xiàn)了這些異常,系統(tǒng)不做任何處理,顯然是不行的。本節(jié)將介紹一種異常處理方法,比前面章節(jié)中講解的異常處理更加簡便異常處理異常處理步驟如下:創(chuàng)建一個(gè)error.jsp頁面
<%@pagelanguage="java"pageEncoding="gb2312"isErrorPage="true"%> <html> <body> 對不起,您操作錯(cuò)誤 </body></html>異常處理異常處理步驟如下:在web.xml中注冊該頁面<error> <exception-type>某種Exception</exception-type> <location>/erro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人房屋租賃的合同(2篇)
- 2025年個(gè)人房屋買賣協(xié)議參考模板(2篇)
- 2025年二手房轉(zhuǎn)讓房產(chǎn)協(xié)議范文(2篇)
- 2025年五年級上班隊(duì)工作總結(jié)(二篇)
- 2025年主要農(nóng)作物新品種展示示范協(xié)議(6篇)
- 大型機(jī)械拆卸運(yùn)輸合同
- 兒童樂園對公裝修合同
- 鐵路熱熔標(biāo)線施工方案
- 賓館改造瓦工單包合同
- 化妝品快遞配送合同范本
- 行政區(qū)域代碼表Excel
- 少兒財(cái)商教育少兒篇
- GB 1886.114-2015食品安全國家標(biāo)準(zhǔn)食品添加劑紫膠(又名蟲膠)
- 初二上冊期末數(shù)學(xué)試卷含答案
- envi二次開發(fā)素材包-idl培訓(xùn)
- 2022年上海市初中語文課程終結(jié)性評價(jià)指南
- 西門子starter軟件簡易使用手冊
- 隧道施工監(jiān)控量測方案及措施
- 桂花-作文ppt-PPT課件(共14張)
- 配電房日常檢查記錄表.docx
- 高一數(shù)學(xué)概率部分知識點(diǎn)總結(jié)及典型例題解析 新課標(biāo) 人教版 必修
評論
0/150
提交評論