JavaWeb程序設(shè)計 課件 ch09 Servlet 編程_第1頁
JavaWeb程序設(shè)計 課件 ch09 Servlet 編程_第2頁
JavaWeb程序設(shè)計 課件 ch09 Servlet 編程_第3頁
JavaWeb程序設(shè)計 課件 ch09 Servlet 編程_第4頁
JavaWeb程序設(shè)計 課件 ch09 Servlet 編程_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章Servlet編程本課教學(xué)內(nèi)容認識Servlet編寫ServletServlet生命周期Servlet與JSP內(nèi)置對象設(shè)置歡迎頁面在Servlet中讀取參數(shù)使用過濾器異常處理認識ServletServlet是一種運行在服務(wù)器端(一般指的是Web服務(wù)器)的Java應(yīng)用程序,可以生成動態(tài)的Web頁面,它是屬于客戶與服務(wù)器響應(yīng)的中間層。因此,可以說,JSP就是Servlet。兩者可以實現(xiàn)同樣的頁面效果,不過,編寫JSP和編寫Servlet相比,前者成本低得多認識Servlet學(xué)習(xí)Servlet的價值Servlet屬于JSP的底層,學(xué)習(xí)它有助于了解底層細節(jié);另外,Servlet畢竟是一個Java類,適合純編程,如果是純編程的話,比將Java代碼混合在HTML中的JSP要好得多編寫Servlet-建立Servlet步驟:

讓這個類繼承javax.servlet.http.HttpServlet重寫HttpServlet的doGet()方法編寫Servlet-建立Servlet配置Servlet部署Servlet測試ServletServlet運行機制初次運行,系統(tǒng)會實例化ServletServlet采用的是多線程機制,每一次請求,系統(tǒng)就分配一個線程來運行doGet函數(shù)。但是這樣也會帶來安全問題,一般說來,不要在Servlet內(nèi)定義成員變量,除非這些成員變量是所有的用戶共用的Servlet生命周期Servlet內(nèi)的方法有以下幾個:

init()方法在實例化的過程中,HttpServlet中的init()方法會被調(diào)用Servlet生命周期Servlet內(nèi)的方法有以下幾個:doGet()/doPost()/service()方法doGet()在以get方式請求Servlet時運行。常見的get請求方式有:鏈接、get方式表單提交、直接訪問ServletdoPost()在以post方式請求Servlet時運行Servlet生命周期destroy()方法destroy()方法在Servlet實例消亡時自動調(diào)用。在Web服務(wù)器運行Servlet實例時,會因為一些原因,Servlet對象會消亡。如果在此Servlet消亡之前,還必須進行某些操作,比如釋放數(shù)據(jù)庫連接以節(jié)省資源等,這時就可以重寫destroy()方法Servlet生命周期Servlet的生命周期如圖Servlet生命周期當(dāng)客戶端向Web服務(wù)器提出第一次Servlet請求時,Web服務(wù)器會實例化一個Servlet,并且調(diào)用init()方法;如果Web服務(wù)器中已經(jīng)存在了一個Servlet實例,將直接使用此實例;然后調(diào)用service()方法,service()方法將根據(jù)客戶端的請求方式來決定調(diào)用對應(yīng)的doXXX()方法;當(dāng)Servlet從Web服務(wù)器中消亡時,Web服務(wù)器將會調(diào)用Servlet的destroy()方法Servlet與JSP內(nèi)置對象獲得內(nèi)置對象的方法獲得out對象JSP中的out對象,一般可以使用doXXX方法中的response參數(shù)獲得默認情況下,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實現(xiàn)服務(wù)器內(nèi)跳轉(zhuǎn):重定向和服務(wù)器內(nèi)跳轉(zhuǎn)。設(shè)置歡迎頁面在很多的門戶網(wǎng)站中,都會把自己的首頁作為網(wǎng)站的歡迎頁面。設(shè)置完歡迎頁面后,用戶登錄時輸入的URL只需為該門戶網(wǎng)站的虛擬路徑時,就可以自動訪問歡迎頁面設(shè)置歡迎頁面方法:

<welcome-file-list> <!--所要設(shè)定的歡迎頁面--> <welcome-file>welcome.jsp</welcome-file></welcome-file-list>設(shè)置歡迎頁面規(guī)則:web.xml可以同時設(shè)置多個歡迎頁面,Web容器會默認設(shè)置的第一個頁面為歡迎頁面,如果找不到最前面的頁面,Web容器將會依次選擇后面的頁面為歡迎頁面在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)用程序的前期處理和后期處理進行控制,可以攔截請求和響應(yīng),查看、提取或者以某種方式操作正在客戶端和服務(wù)器之間進行交換的數(shù)據(jù)使用過濾器需要過濾器的情況情況一: 為了解決中文亂碼問題,我們經(jīng)??吹揭欢未a:request.setCharacterEncoding("gb2312");response.setContentType("text/html;charset=gb2312");這是Servlet用來設(shè)置編碼用的,如果Servlet的處理方法最前面沒有加入這一段代碼,就很可能會出現(xiàn)亂碼問題。如果是一個大工程的話,會有很多很多的Servlet,于是很多人發(fā)現(xiàn)在這么多代碼中重復(fù)設(shè)置編碼,非常麻煩。而且,一旦需求變了,需要換成另外的編碼,對程序員來說將是一件很繁瑣的事情使用過濾器需要過濾器的情況情況二:很多的門戶網(wǎng)站都會有登錄頁面,這是為了業(yè)務(wù)需求,同時也是為了使用戶控制更加的安全。如果客戶沒有登錄就訪問網(wǎng)站的某一頁面,在很多情況下會引發(fā)安全問題。應(yīng)該如何避免這種情況?傳統(tǒng)情況下,可以使用session檢查來完成,但是在很多頁面上都添加session檢查代碼,也會比較繁瑣使用過濾器需要過濾器的情況情況三:許多的網(wǎng)站都存在著各種不同的權(quán)限,比如,只有管理員才可以對網(wǎng)站的某些數(shù)據(jù)進行維護和修改,一般的普通用戶是無法完成該功能的。登錄過后,網(wǎng)頁如何區(qū)分普通用戶與管理員?如果是每一個頁面寫一個判斷用戶類型的代碼,似乎也非常繁瑣編寫過濾器Servlet過濾器可以當(dāng)作一個只需要在web.xml文件中配置就可以靈活使用、可以重用的模塊化組件。它能夠?qū)SP、HTML、Servlet文件進行過濾編寫過濾器實現(xiàn)一個過濾器需要兩個步驟:

實現(xiàn)接口javax.servlet.Filter;編寫過濾器實現(xiàn)一個過濾器需要兩個步驟:實現(xiàn)3個方法初始化方法:表示的是過濾器初始化時的動作。publicvoidinit(FilterConfigconfig);消亡方法:表示的是過濾器消亡時候的動作。publicvoiddestroy();過濾函數(shù):表示的是過濾器過濾時的動作。publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain);過濾器的配置過濾器的配置有以下幾個步驟: 用<filter>元素定義過濾器<filter>元素有兩個必要子元素:

<filter-name>元素用來設(shè)定過濾器的名字

<filter-class>元素用來設(shè)定過濾器的類路徑過濾器的配置過濾器的配置有以下幾個步驟: 用<filter-mapping>配置過濾器的映射 過濾所有文件

<filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/*</url-pattern></filter-mapping>過濾器的配置過濾一個或者多個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>

過濾器的配置過濾一個或者多個文件目錄 <filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/PATH1/*</url-pattern> </filter-mapping>

需要注意的問題關(guān)于過濾器,有以下幾個問題需要注意過濾器的初始化和doFilter的調(diào)用時機過濾器的初始化是在服務(wù)器運行的時候自動運行需要注意的問題過濾器常見應(yīng)用場合總結(jié)如下:獲取請求數(shù)據(jù)并操作性能保障安全保障會話處理異常處理在Web應(yīng)用程序中,總會發(fā)生各種各樣的異常:比如數(shù)據(jù)庫連接失敗,0被作為除數(shù),得到的值是空,或者是數(shù)組溢出等等。如果出現(xiàn)了這些異常,系統(tǒng)不做任何處理,顯然是不行的。本節(jié)將介紹一種異常處理方法,比前面章節(jié)中講解的異常處理更加簡便異常處理異常處理步驟如下:創(chuàng)建一個error.jsp頁面

<%@pagelanguage="java"pageEncoding="gb2312"isErrorPage="true"%> <html> <body> 對不起,您操作錯誤 </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)容里面會有圖紙預(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論