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

下載本文檔

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

文檔簡介

第9章Servlet編程本課教學內(nèi)容認識Servlet編寫ServletServlet生命周期Servlet與JSP內(nèi)置對象設(shè)置歡迎頁面在Servlet中讀取參數(shù)使用過濾器異常處理認識ServletServlet是一種運行在服務器端(一般指的是Web服務器)的Java應用程序,可以生成動態(tài)的Web頁面,它是屬于客戶與服務器響應的中間層。因此,可以說,JSP就是Servlet。兩者可以實現(xiàn)同樣的頁面效果,不過,編寫JSP和編寫Servlet相比,前者成本低得多認識Servlet學習Servlet的價值Servlet屬于JSP的底層,學習它有助于了解底層細節(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服務器運行Servlet實例時,會因為一些原因,Servlet對象會消亡。如果在此Servlet消亡之前,還必須進行某些操作,比如釋放數(shù)據(jù)庫連接以節(jié)省資源等,這時就可以重寫destroy()方法Servlet生命周期Servlet的生命周期如圖Servlet生命周期當客戶端向Web服務器提出第一次Servlet請求時,Web服務器會實例化一個Servlet,并且調(diào)用init()方法;如果Web服務器中已經(jīng)存在了一個Servlet實例,將直接使用此實例;然后調(diào)用service()方法,service()方法將根據(jù)客戶端的請求方式來決定調(diào)用對應的doXXX()方法;當Servlet從Web服務器中消亡時,Web服務器將會調(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ù)當成request對象使用 //將response參數(shù)當成response對象使用 }Servlet與JSP內(nèi)置對象獲得session對象

HttpSessionsession=request.getSession();//將session當成session對象來使用Servlet與JSP內(nèi)置對象獲得application對象

ServletContextapplication=this.getServletContext(); //將application當成application對象來使用可以使用application實現(xiàn)服務器內(nèi)跳轉(zhuǎn):重定向和服務器內(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ù)只有相應的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應用程序的前期處理和后期處理進行控制,可以攔截請求和響應,查看、提取或者以某種方式操作正在客戶端和服務器之間進行交換的數(shù)據(jù)使用過濾器需要過濾器的情況情況一: 為了解決中文亂碼問題,我們經(jīng)常看到一段代碼:request.setCharacterEncoding("gb2312");response.setContentType("text/html;charset=gb2312");這是Servlet用來設(shè)置編碼用的,如果Servlet的處理方法最前面沒有加入這一段代碼,就很可能會出現(xiàn)亂碼問題。如果是一個大工程的話,會有很多很多的Servlet,于是很多人發(fā)現(xiàn)在這么多代碼中重復設(shè)置編碼,非常麻煩。而且,一旦需求變了,需要換成另外的編碼,對程序員來說將是一件很繁瑣的事情使用過濾器需要過濾器的情況情況二:很多的門戶網(wǎng)站都會有登錄頁面,這是為了業(yè)務需求,同時也是為了使用戶控制更加的安全。如果客戶沒有登錄就訪問網(wǎng)站的某一頁面,在很多情況下會引發(fā)安全問題。應該如何避免這種情況?傳統(tǒng)情況下,可以使用session檢查來完成,但是在很多頁面上都添加session檢查代碼,也會比較繁瑣使用過濾器需要過濾器的情況情況三:許多的網(wǎng)站都存在著各種不同的權(quán)限,比如,只有管理員才可以對網(wǎng)站的某些數(shù)據(jù)進行維護和修改,一般的普通用戶是無法完成該功能的。登錄過后,網(wǎng)頁如何區(qū)分普通用戶與管理員?如果是每一個頁面寫一個判斷用戶類型的代碼,似乎也非常繁瑣編寫過濾器Servlet過濾器可以當作一個只需要在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)用時機過濾器的初始化是在服務器運行的時候自動運行需要注意的問題過濾器常見應用場合總結(jié)如下:獲取請求數(shù)據(jù)并操作性能保障安全保障會話處理異常處理在Web應用程序中,總會發(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>/error.jsp</location></error>異常處理異常處理步驟如下:使當出現(xiàn)某種異常的時候由error.jsp頁面處理。如:……<error> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location></error>……本章結(jié)束本章總結(jié)認識Servlet編寫ServletServlet生命周期Servlet與JSP內(nèi)置對象設(shè)置歡迎頁面在Servlet中讀取參數(shù)使用過濾器異常處理課后習題第10章JSP和JavaBean本課教學內(nèi)容認識JavaBean在JSP中使用JavaBeanJavaBean的范圍DAO和VO認識JavaBean訪問數(shù)據(jù)庫JSPHTML大量Java代碼數(shù)據(jù)庫JSP訪問數(shù)據(jù)庫認識JavaBeanJava類訪問數(shù)據(jù)庫JSPHTML少量Java代碼數(shù)據(jù)庫Java類這些可能使用到的Java類,就是JavaBean認識JavaBean在JavaBean中,可以將控制邏輯、值、數(shù)據(jù)庫訪問和其他對象進行封裝,并且其可以被其他應用來調(diào)用。實際上,JavaBean就是一種Java的組件技術(shù)。JavaBean的作用是向用戶提供實現(xiàn)特定邏輯的方法接口,而具體的實現(xiàn)則封裝在組件的內(nèi)部,不同的用戶就根據(jù)具體的應用情況來使用該組件的部分或者全部控制邏輯認識JavaBeanJavaBean支持兩種組件:可視化組件和非可視化組件。對于可視化組件,開發(fā)人員可以在運行的結(jié)果中看到界面效果;而非可視化組件一般不能觀察到,其主要用在服務器端。JSP只支持非可視化組件。認識JavaBeanJavaBean有廣義的和狹義的兩種概念。廣義的JavaBean是指普通的Java類;狹義的JavaBean是指嚴格按照JavaBean規(guī)范編寫的Java類在MyEclipse中編寫JavaBean時,一般情況下,將JavaBean的源代碼放在src根目錄下,首先建立項目Prj10,然后在src根目錄下創(chuàng)建一個包,名為beans,然后右擊包名,建立相應的類,如Student。代碼見書上p146。編寫JavaBean編寫JavaBean從上面的例子可以看出,在JavaBean中不僅要定義其成員變量,還對成員變量定義了setter/getter方法。對于每一個成員變量,定義了一個getter方法,一個setter方法編寫JavaBeanJavaBean規(guī)定,成員變量的讀寫,通過getter和setter方法進行。此時,該成員變量成為屬性。對于每一個可讀屬性,定義一個getter方法,而對于每一個可寫屬性,定義了一個setter方法編寫JavaBeanJavaBean組件屬性編寫時,需要滿足:通過getter/setter方法來讀/寫變量的值,對應的變量首字母必須大寫屬性名稱由getter和setter方法決定特殊JavaBean屬性特殊JavaBean屬性給boolean類型設(shè)置屬性,要將getter方法改為is方法數(shù)組屬性定義要遵循相應規(guī)范:String[]在JSP中使用JavaBean使用JavaBean步驟定義JavaBean直接在JSP中實例化JavaBean<%Studentstudent=newStudent(); //使用student%>在JSP中使用JavaBean使用<jsp:useBean>標簽<jsp:useBeanid="idName"class="package.class"scope="page|session|"></jsp:useBean>在JSP中使用JavaBean設(shè)置JavaBean屬性直接編寫Java代碼<jsp:useBeanid="student"class="beans.Student"></jsp:useBean> <% student.setStuname("張華"); %>在JSP中使用JavaBean使用<jsp:setProperty>標簽String常量:<jsp:setPropertyproperty="屬性名稱"name="bean對象名"value="常量"/>

<jsp:useBeanid="student"class="beans.Student"></jsp:useBean><jsp:setPropertyproperty="stuname“name="student"value="張華"/>在JSP中使用JavaBean使用<jsp:setProperty>標簽request參數(shù):<jsp:setPropertyproperty="屬性名稱"name="bean對象名"

param="參數(shù)名"/>在JSP中使用JavaBean獲取JavaBean屬性使用JSP表達式或者JSP程序段

<%@pagelanguage="java"import="beans.Student" contentType="text/html;charset=gb2312"%> <jsp:useBeanid="student"class="beans.Student"></jsp:useBean> <jsp:setPropertyproperty="name"name="student"value="rose"/> <%=student.getStuname()%>在JSP中使用JavaBean獲取JavaBean屬性使用jsp:getProperty動作<jsp:getPropertyproperty="屬性名稱"name="bean對象名"/>

所以上段jsp代碼中最后一句可以改為:<jsp:getPropertyproperty="stuname"name="student"/>JavaBean的范圍回顧jsp:useBean動作的用法 <jsp:useBeanid="idName"class="package.class"scope="page|session|"></jsp:useBean>scope可以有如下幾種選擇:page、re

溫馨提示

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

評論

0/150

提交評論