2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、5. Servlet編程入門,計(jì)算機(jī)與通信學(xué)院 軟件工程學(xué)院,1.回顧和擴(kuò)展,JSP語法JSP模版元素 , JSP表達(dá)式 ,JSP腳本片斷 , JSP靜態(tài)聲明,JSP注釋,JSP指令,JSP標(biāo)簽 ,JSP內(nèi)置對象,1.回顧和擴(kuò)展,九種JSP內(nèi)置對象其中request, response, out, session ,application最為常用??梢园垂δ芊譃樗拇箢悾号c輸入輸出有關(guān)的:out, request,

2、response與上下文有關(guān)的:session,applixation, pageContext與servlet有關(guān)的:page, config與錯誤處理有關(guān)的:exception,2.認(rèn)識servlet,Servlet的概念Servlet是一種用于擴(kuò)展服務(wù)器功能的java應(yīng)用程序,是JSP的底層。Java Servlet 是運(yùn)行在帶有支持 Java Servlet 規(guī)范的解釋器的 web 服務(wù)器上的 Java 類,是java

3、EE標(biāo)準(zhǔn)的組成部分之一。與JSP類似,servlet可以生成動態(tài)的 Web 頁面,它是屬于客戶與服務(wù)器響應(yīng)的中間層。不過,編寫 JSP 和編寫 Servlet 相比,前者成本低得多。,2.認(rèn)識servlet,學(xué)習(xí)Servlet的價值Servlet 屬于 JSP 的底層,學(xué)習(xí)它有助于了解底層細(xì)節(jié);另外,Servlet 作為一個Java 類適合純編程。如果是純編程的話,比將 Java 代碼混合在 HTML 中的 JSP 要好得多,3.

4、Servlet 的主要方法,Servlet 的生命周期,與其他java程序一樣,servlet也有自己的生命周期。與其他java程序相比,servlet最大的特點(diǎn)是包含了與客戶端/瀏覽器的交互。,3.Servlet 的主要方法,init() 方法Servlet 創(chuàng)建于用戶第一次調(diào)用對應(yīng)于該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務(wù)器第一次啟動時被加載。init 方法被設(shè)計(jì)成只調(diào)用一次。它在第一次創(chuàng)建

5、 Servlet 時被調(diào)用,在后續(xù)每次用戶請求時不再調(diào)用。init() 方法簡單地創(chuàng)建或加載一些數(shù)據(jù),這些數(shù)據(jù)將被用于 Servlet 的整個生命周期。,3.Servlet 的主要方法,service() 方法service() 方法是執(zhí)行實(shí)際任務(wù)的主要方法。Servlet 容器(即 Web 服務(wù)器)調(diào)用 service() 方法來處理來自客戶端(瀏覽器)的請求,并把格式化的響應(yīng)寫回給客戶端。每次服務(wù)器接收到一個 Servlet

6、請求時,服務(wù)器會產(chǎn)生一個新的線程并調(diào)用服務(wù)。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當(dāng)?shù)臅r候調(diào)用 doGet、doPost、doPut,doDelete 等方法。所以您不用對 service() 方法做任何動作,您只需要根據(jù)來自客戶端的請求類型來重載 doGet() 或 doPost() 即可。,3.Servlet 的主要方法,doGet() 方法doGet() 和 do

7、Post() 方法是每次服務(wù)請求中最常用的方法。GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。doPost() 方法POST 請求來自于一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。,3.Servlet 的主要方法,destroy() 方法destroy() 方法只會被調(diào)用一次,在 Servl

8、et 生命周期結(jié)束時被調(diào)用。destroy() 方法可以讓您的 Servlet 關(guān)閉數(shù)據(jù)庫連接、停止后臺線程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫入到磁盤,并執(zhí)行其他類似的清理活動。在調(diào)用 destroy() 方法之后,servlet 對象被標(biāo)記為垃圾并被JVM的垃圾回收器回收。,4. Servlet 實(shí)例,Hello world現(xiàn)在我們嘗試在myEclipse里創(chuàng)建一個項(xiàng)目,起名叫helloworld。注意,如果你使用的是my

9、Eclipse 2016及其之后的版本,注意創(chuàng)建web Project的時候不要直接點(diǎn)finish,先選next,勾選自動生成web.xml的選項(xiàng)按鈕。這將有助于我們后續(xù)的操作。,4. Servlet 實(shí)例,Hello world展開項(xiàng)目,選中“src”目錄,右鍵選擇“New”進(jìn)入下級選項(xiàng)卡,選擇創(chuàng)建“Servlet”,4. Servlet 實(shí)例,Hello world在打開的“Create Servlet”窗口中,在“Packag

10、e”后的文本框中填寫“com.nodo”,在“Name”文本框中填寫Servlet的名稱helloworld,然后點(diǎn)擊“Next”。,4. Servlet 實(shí)例,Hello world在servlet配置頁面,可以設(shè)置其中的值。建議按照右圖的標(biāo)識,更改其中的選項(xiàng)值。這樣生成的servlet頁面將直接包含幾個主要的方法函數(shù)。最后點(diǎn)擊finish完成創(chuàng)建。,4. Servlet 實(shí)例,Hello world創(chuàng)建好的servlet文件

11、,在工程項(xiàng)目的src目錄下。生成的服務(wù)器配置文件web.xml,在webRoot/WEB-INF/目錄下。,4. Servlet 實(shí)例,Hello world我們將helloworld.java的內(nèi)容替換為右邊的代碼。,package com.nodo;//導(dǎo)入必需的 java 庫import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/

12、/擴(kuò)展 HttpServlet 類public class helloworld extends HttpServlet {private String message;public void init() throws ServletException {// 執(zhí)行必需的初始化message = "Hello World";}public void doGet(HttpServl

13、etRequest request, HttpServletResponse response)throws ServletException, IOException {// 設(shè)置響應(yīng)內(nèi)容類型response.setContentType("text/html");// 實(shí)際的邏輯是在這里PrintWriter out = response.getWriter();out.p

14、rintln("" + message + "");}public void destroy() {// 什么也不做}},4. Servlet 實(shí)例,Hello worldweb.xml是tomcat服務(wù)器運(yùn)行時的配置文件。服務(wù)器要找到我們創(chuàng)建的服務(wù),必須編輯這個文件。我們在其中的標(biāo)簽內(nèi)加上右圖所示的內(nèi)容。, …. HelloWorl

15、d HelloWorld HelloWorld /HelloWorld ,Tips: 如果是myEclipse 10 ,web.xml將自動生成,url-pattern路徑會略有不同,為/servlet/helloworld,4. Servlet 實(shí)例,Hello world最后在瀏覽器的地址欄中輸入 http://localhost:8080/

16、helloworld//servlet/helloworld。如果一切順利,您會看到右邊的結(jié)果:,Tips: 不能顯示?解決方法:重啟服務(wù)器。查看web.xml中路徑是否正確。根據(jù)錯誤提示百度谷歌。,4. Servlet 實(shí)例,servlet與JSP在應(yīng)用上的區(qū)別Servlet是一種特殊的java類,在服務(wù)器端只init一次,所以每次修改后,都必須重啟服務(wù)器才能看到修改后的結(jié)果。JSP是在servlet基礎(chǔ)上重新構(gòu)建的語言標(biāo)準(zhǔn)

17、,使用起來較為簡單,每次修改后,只需要刷新瀏覽器就能看到修改后的結(jié)果。,5.Servlet 與JSP內(nèi)置對象,獲得JSP內(nèi)置對象的方法由于servlet是底層服務(wù)程序,因此使用時語法相較JSP更為嚴(yán)格。想要獲取其中內(nèi)置對象,必須在相應(yīng)的方法中:例如,獲取request和response對象,必須在doGet或doPost等方法中通過參數(shù)獲取:public void doGet(HttpServletRequest request

18、, HttpServletResponse response) throws ServletException, IOException { //將 request 參數(shù)當(dāng)成 request 對象使用 //將 response 參數(shù)當(dāng)成 response 對象使用 },獲得JSP內(nèi)置對象的方法獲取out對象,必須通過response參數(shù)獲取:public void doGet(HttpServletRequest

19、request, HttpServletResponse response) throws ServletException, IOException { response.out.println(); } 默認(rèn)情況下,out 對象是無法打印中文解決方法:response.setContentType("text/html;charset=gb2312");,5.Servlet 與JSP內(nèi)

20、置對象,獲得JSP內(nèi)置對象的方法獲取session對象,必須通過request參數(shù)獲?。篐ttpSession session = request.getSession();,5.Servlet 與JSP內(nèi)置對象,獲得JSP內(nèi)置對象的方法獲得 application 對象 ServletContext application = this.get ServletContext(); //將 application 當(dāng)成 a

21、pplication 對象來使用,5.Servlet 與JSP內(nèi)置對象,6. Servlet 的基本功能,概覽JSP的功能,servlet都能實(shí)現(xiàn)。但由于servlet編程較為繁瑣,所以在一般動態(tài)頁面的編程流程中,servlet已經(jīng)完全讓位予JSP。不過,在一些較為復(fù)雜的場合,常常使用servlet作為服務(wù)器端的控制器(controller),處理來自JSP頁面的輸入?yún)?shù),以及從 JavaBean 中讀取來自數(shù)據(jù)庫的數(shù)據(jù),最后跳轉(zhuǎn)到

22、目標(biāo)頁面。,6. Servlet 的基本功能,1. 頁面重定向方法1,與JSP 內(nèi)置對象response的 sendRedirect方法相同:response.sendRedirect("URL 地址"); 方法2,與JSP 的forward標(biāo)簽相同:ServletContext application = this.getServletContext(); RequestDispatcher rd = a

23、pplication.getRequestDispatcher("URL 地址"); rd.forward(request, response);,6. Servlet 的基本功能,1. 頁面重定向以上兩種方法使用場合:當(dāng)不需要傳遞參數(shù)或者需要跳轉(zhuǎn)到另一個服務(wù)器頁面時使用重定向當(dāng)需要從 A 頁面跳轉(zhuǎn)到 B 頁面時,存在著大量暫態(tài)數(shù)據(jù)(即在 B 頁面顯示過后就可以不用的數(shù)據(jù))時,為了節(jié)省內(nèi)存,可以使用服務(wù)器內(nèi)跳

24、轉(zhuǎn),可以避免把很多內(nèi)容存儲在 session中,從而導(dǎo)致服務(wù)器內(nèi)存消耗過大的情況,6. Servlet 的基本功能,2. 處理客戶端輸入在Web程序設(shè)計(jì)中,以表單方式向服務(wù)器提交數(shù)據(jù)是最常見的方法。表單數(shù)據(jù)的提交方法有兩種:Post方法和Get方法。當(dāng)使用Post方法時,數(shù)據(jù)由標(biāo)準(zhǔn)的輸入設(shè)備讀入。當(dāng)使用Get方法時,數(shù)據(jù)由CGI變量QUERY_STRING傳遞給表單數(shù)據(jù)處理程序,即附加在請求地址的后面,在瀏覽器的地址欄中可以看到。

25、用戶只要簡單的調(diào)用HttpServletRequest的getParameter()方法,給出變量名稱即可取得該變量的值。,6. Servlet 的基本功能,3. 發(fā)送非HTML文檔隨著Internet應(yīng)用的不斷擴(kuò)展,為了支持多媒體數(shù)據(jù)類型,HTTP協(xié)議中就使用了附加在文檔之前的MIME數(shù)據(jù)類型信息來標(biāo)識數(shù)據(jù)類型。例如,想要發(fā)送PDF文件,需要將 response 對象中header 的 content 類型設(shè)置成 相應(yīng)的MIME

26、標(biāo)志res.setContentType(“application/pdf”),7. Servlet 的過濾器,1. 過濾器簡介過濾器是servlet的應(yīng)用。過濾器是一種小巧的、可插入的 Web 組件,它能夠?qū)?Web 應(yīng)用程序的前期處理和后期處理進(jìn)行控制,可以攔截請求和響應(yīng),查看、提取或者以某種方式操作正在客戶端和服務(wù)器之間進(jìn)行交換的數(shù)據(jù)。,7. Servlet 的過濾器,2. 使用過濾器的場景情況一:為了解決中文亂碼問題,我們

27、經(jīng)??吹揭欢未a:request.setCharacterEncoding("gb2312"); response.setContentType("text/html;charset=gb2312"); 這是 Servlet 用來設(shè)置編碼用的,如果 Servlet 的處理方法最前面沒有加入這一段代碼, 就很可能會出現(xiàn)亂碼問題。如果是一個大工程的話,會有很多很多的 Servlet,于是很多人發(fā)

28、現(xiàn)在這么多代碼中重復(fù)設(shè)置編碼,非常麻煩。而且,一旦需求變了,需要換成另外的編碼,對程序員來說將是一件很繁瑣的事情。,7. Servlet 的過濾器,2. 使用過濾器的場景情況三:登錄過后,網(wǎng)頁如何區(qū)分普通用戶與管理員?如果是每一個頁面寫一個判斷用戶類型的代碼,似乎也非常繁瑣。許多的網(wǎng)站都存在著各種不同的權(quán)限,比如,只有管理員才可以對網(wǎng)站的某些數(shù)據(jù)進(jìn)行維護(hù)和修改,一般的普通用戶是無法完成該功能的。,7. Servlet 的過濾器,2.

29、 使用過濾器的場景情況二:如果客戶沒有登錄就訪問網(wǎng)站的某一頁面,在很多情況下會引發(fā)安全問題。應(yīng)該如何避免這種情況?傳統(tǒng)情況下,可以使用 session 檢查來完成,但是在很多頁面上都添加 session檢查代碼,也會比較繁瑣。,7. Servlet 的過濾器,2. 使用過濾器的場景情況三:登錄過后,網(wǎng)頁如何區(qū)分普通用戶與管理員?如果是每一個頁面寫一個判斷用戶類型的代碼,似乎也非常繁瑣。許多的網(wǎng)站都存在著各種不同的權(quán)限,比如,只有

30、管理員才可以對網(wǎng)站的某些數(shù)據(jù)進(jìn)行維護(hù)和修改,一般的普通用戶是無法完成該功能的。,7. Servlet 的過濾器,3. 實(shí)現(xiàn)編碼過濾器創(chuàng)建一個servlet文件,filter.java, 我們添加如右側(cè)代碼,目的是實(shí)現(xiàn)對每個頁面的設(shè)置編碼功能:,package filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.Fi

31、lterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class filter implements Filter {public void init(Fi

32、lterConfig config) throws ServletException {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//設(shè)置編碼格式request.set

33、CharacterEncoding("gb2312");chain.doFilter(request, response);}},7. Servlet 的過濾器,3. 實(shí)現(xiàn)編碼過濾器然后,在web.xml配置文件中增加配置內(nèi)容如下:, filterfilter.filterfilter> /*,7. Servlet 的過濾器,3. 實(shí)現(xiàn)編碼過濾器最后,訪問帶有中文的servlet文件,我

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論