




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第2章 Servlet編程本章內(nèi)容創(chuàng)建Servletweb.xml配置文件Servlet獲取請求參數(shù)Servlet實現(xiàn)登錄功能請求參數(shù)為空的問題復(fù)選框提交參數(shù)GET請求與POST請求本章內(nèi)容中文亂碼問題Servlet跳轉(zhuǎn)Servlet生命周期ServletContextServletConfig2.1 創(chuàng)建ServleServlet是Java Web應(yīng)用中的核心組件,也是學(xué)習(xí)Java Web開發(fā)的重點與難點。掌握Servlet是進(jìn)行Java Web開發(fā)的基礎(chǔ),如果沒有充分理解Servlet及其相關(guān)知識,將無法寫出高效的Java Web應(yīng)用程序。2.1 創(chuàng)建Servle1)新建Web Proje
2、ct項目 2.1 創(chuàng)建Servle2)輸入項目名稱2.1 創(chuàng)建Servle3)Web Project項目結(jié)構(gòu) 2.1 創(chuàng)建Servle4)新建Servlet 2.1 創(chuàng)建Servle5) Create a new Servlet對話框2.1 創(chuàng)建Servle6) Create a new Servlet對話框 2.1 創(chuàng)建Servle7)MyEclipse生成的Servlet代碼 2.1 創(chuàng)建Servle8) MyServlet類中的方法2.1 創(chuàng)建Servle定義一個最簡單的Servlet 1 public void doGet(HttpServletRequest request, Htt
3、pServletResponse response)2 throws ServletException, IOException 3 PrintWriter out = response.getWriter();4 out.println(Hello Servlet!);5 out.close();6 2.1 創(chuàng)建Servle9)發(fā)布項目servlet_first 2.1 創(chuàng)建Servle10) Project Deployments對話框 2.1 創(chuàng)建Servle11) New Deployments對話框 2.1 創(chuàng)建Servle12)選擇Tomcat服務(wù)器 2.1 創(chuàng)建Servle13)
4、設(shè)置后的發(fā)布對話框 2.1 創(chuàng)建Servle14)啟動Tomcat服務(wù)器 2.1 創(chuàng)建Servle訪問Servlethttp:/localhost:8080/servlet_first/servlet/MyServlet2.1 創(chuàng)建Servle15)MyServlet的運行結(jié)果 2.2 web.xml配置文件通過MyEclipse創(chuàng)建Servlet,除了生成與Servlet相關(guān)的Java代碼文件,還會在項目目錄WebRoot/WEB-INF下的web.xml文件中添加該Servlet的配置信息。開發(fā)Java Web除了要編寫Java代碼,還要維護(hù)相應(yīng)的XML配置文件,這些XML配置文件是保障J
5、ava Web應(yīng)用正確運行的前提,也是學(xué)習(xí)Java Web開發(fā)時的重點和難點。2.2 web.xml配置文件對于學(xué)習(xí)Servlet的初學(xué)者而言,所犯的常見錯誤大都出現(xiàn)在web.xml配置文件中。雖然可以借助MyEclipse在web.xml中生成配置,但也要學(xué)會手工修改web.xml文件,因為熟練配置web.xml是學(xué)會Java Web開發(fā)的標(biāo)志之一。2.2 web.xml配置文件1 2 MyServlet3 servlet.MyServlet4 5 6 MyServlet7 /servlet/MyServlet8 2.2 web.xml配置文件2.3 Servlet獲取請求參數(shù)通過URL向服
6、務(wù)器提交參數(shù)http:/localhost:8080/servlet_first/servlet/MyServlet?username=zhanghttp:/localhost:8080/servlet_first/servlet/MyServlet?username=zhang&password=123452.3 Servlet獲取請求參數(shù)在doGet()方法中可借助request來獲取請求參數(shù)public String getParameter(String name)getParameter()方法根據(jù)請求參數(shù)名返回請求參數(shù)值,方法的參數(shù)name指定了欲獲取的參數(shù)名,而返回值即為對應(yīng)的參
7、數(shù)值2.3 Servlet獲取請求參數(shù)1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 2 String username = request.getParameter(username); 3 PrintWriter out = response.getWriter();4 out.println(username=+username);5 out.close();6 2.4 Servlet實現(xiàn)登錄功能LoginS
8、ervlet類的doGet()方法的核心代碼 String username = request.getParameter(username); String password = request.getParameter(password); PrintWriter out = response.getWriter(); if(username.equals(zhang)&password.equals(12345) out.println(Login Success!); else out.println(Login Error!); out.println(username=+usern
9、ame); out.println(password=+password); out.close();2.4 Servlet實現(xiàn)登錄功能訪問該Servlet的URL http:/localhost:8080/servlet_first/servlet/LoginServlet ?username=zhang&password=123452.4 Servlet實現(xiàn)登錄功能登錄頁面login.html2.4 Servlet實現(xiàn)登錄功能登錄頁面login.html核心代碼 Username: Password: 2.5 請求參數(shù)為空的問題Web應(yīng)用面對著各式各樣的用戶。用戶常會有意或無意地輸入非法參
10、數(shù),如果Web應(yīng)用處理不當(dāng),就會引起異常及安全問題。因此需要處理最為常見的參數(shù)為空的問題。參數(shù)值為null參數(shù)值為2.5 請求參數(shù)為空的問題以下兩種URL訪問LoginServlet,則會在瀏覽器頁面和Tomcat控制臺同時觸發(fā)空指針異常NullPointerExceptionhttp:/localhost:8080/servlet_first/servlet/LoginServlethttp:/localhost:8080/servlet_first/servlet/LoginServlet?Username=zhang&password=123452.5 請求參數(shù)為空的問題2.5 請求參數(shù)
11、為空的問題第1個URL中未指定username的參數(shù)值,第2個URL中指定了錯誤的username參數(shù)值(即“Username”中的首字母U不應(yīng)該大寫),這兩者都會造成username的值為null,所以username.equals(“zhang”)語句就觸發(fā)了“NullPointerException”。為了使程序更健壯,就需要加入對參數(shù)值是否為null的判斷。2.5 請求參數(shù)為空的問題參數(shù)值為”以下URL訪問LoginServlet,輸出結(jié)果是什么?http:/localhost:8080/servlet_first/servlet/LoginServlet?username=&pass
12、word=2.5 請求參數(shù)為空的問題 if(username=null | username.equals() out.println(username=+username); out.close(); return; if(password=null | password.equals() out.println(password=+password); out.close(); return; 2.6 復(fù)選框提交參數(shù)在HTML頁面中,文本框、單選按鈕等組件所表示的請求參數(shù)都是單個值,而復(fù)選框、列表框等組件所表示的請求參數(shù)則是數(shù)組類型。2.6 復(fù)選框提交參數(shù) Basketball: Voll
13、eyball: Footall: 2.6 復(fù)選框提交參數(shù)因為3個復(fù)選框表達(dá)的是同一組請求參數(shù),所以它們的name屬性都是一樣的(即都是“balls”),此時請求參數(shù)balls的值就是數(shù)組類型的。HttpServletRequest下的getParameter()方法只能處理單個值,因此為了接收數(shù)組類型的參數(shù),就需要調(diào)用HttpServletRequest下的getParameterValues()方法。String getParameterValues(String name)2.6 復(fù)選框提交參數(shù) String balls = request.getParameterValues(balls
14、); PrintWriter out = response.getWriter(); if(balls=null)/沒有選擇3個復(fù)選框中的任何一個,則balls為null out.println(balls=null); out.close(); return; for(String ball : balls) out.println(balls=+ball); out.close();2.7 GET請求與POST請求構(gòu)建一個Servlet的關(guān)鍵就是繼承HttpServlet類并重寫其中的doGet()和doPost()方法。GET方式會將請求參數(shù)顯示在瀏覽器地址欄中,而POST方式則不會。這
15、是因為GET方式的請求參數(shù)是放在HTTP請求報文的報頭,而POST方式的請求參數(shù)是放在HTTP請求報文的正文。如果請求參數(shù)中攜帶有安全性、敏感性信息(如密碼),則應(yīng)該使用POST方式;而GET方式十分便于調(diào)試程序。2.7 GET請求與POST請求值為post時,其以POST方式提交,Servlet會調(diào)用doPost()方法來處理請求。值為get或者屬性未設(shè)置時(如login.html中的標(biāo)簽),則以GET方式提交,Servlet會調(diào)用doGet()方法來處理請求。 Username: Password: 2.7 GET請求與POST請求單擊“提交”按鈕后,兩種方式在瀏覽器地址欄中生成的URL也
16、不同GET方式:http:/localhost:8080/servlet_first/servlet/LoginServlet?username=zhang&password=12345POST方式:http:/localhost:8080/servlet_first/servlet/LoginServlet2.8 中文亂碼問題Servlet輸出亂碼out.println(登錄成功!)在PrintWriter out = response.getWriter()語句之前加入代碼response.setCharacterEncoding(gbk);2.8 中文亂碼問題POST參數(shù)亂碼在usern
17、ame文本框中輸入中文字符“張三”在String username = request.getParameter(username)語句之前加入代碼request.setCharacterEncoding(gbk);2.8 中文亂碼問題GET參數(shù)亂碼http:/localhost:8080/servlet_first/servlet/LoginServlet?username=張三&password=12345”除在引用request對象前要加入request.setCharacterEncoding(gbk);還需在Tomcat服務(wù)器的conf目錄下server.xml文件的標(biāo)簽中增加use
18、BodyEncodingForURI屬性,并設(shè)置其值為true2.9 Servlet跳轉(zhuǎn)對于比較復(fù)雜的業(yè)務(wù)功能,經(jīng)常需要多個Servlet配合實現(xiàn),這時就需要從一個Servlet跳轉(zhuǎn)到另外一個Servlet,Servlet間的跳轉(zhuǎn)方式可分為轉(zhuǎn)發(fā)(forward)和重定向(redirect)兩種2.9 Servlet跳轉(zhuǎn)Servlet間的轉(zhuǎn)發(fā)通過使用HttpServletRequest的getRequestDispatcher()方法可獲取RequestDispatcher對象RequestDispatcher getRequestDispatcher(String path) getReque
19、stDispatcher()方法的參數(shù)path指明了要轉(zhuǎn)發(fā)到的目標(biāo)Servlet的URL路徑,其返回值為RequestDispatcher類型的對象。2.9 Servlet跳轉(zhuǎn)Servlet間的轉(zhuǎn)發(fā)getRequestDispatcher()方法只是獲取了RequestDispatcher對象,并未執(zhí)行真正的轉(zhuǎn)發(fā),執(zhí)行轉(zhuǎn)發(fā)操作還需要調(diào)用RequestDispatcher的forward()方法void forward(ServletRequest request, ServletResponse response)forward()方法的聲明與doGet()方法和doPost()方法類似,在轉(zhuǎn)
20、發(fā)時,其將request和response作為參數(shù)傳遞到下一個Servlet,以便其做進(jìn)一步的處理。2.9 Servlet跳轉(zhuǎn)轉(zhuǎn)發(fā)時傳遞對象Servlet轉(zhuǎn)發(fā)時傳遞對象需要利用HttpServletRequest對象來傳遞數(shù)據(jù),需調(diào)用的HttpServletRequest的方法的聲明如下:void setAttribute(String name, Object object) Object getAttribute(String name)。2.9 Servlet跳轉(zhuǎn)轉(zhuǎn)發(fā)時傳遞對象方法setAttribute()的參數(shù)name指定了放入request的對象的“名字”,此處name的類型是St
21、ring,用戶可任意命名,但要注意將來要按同樣名字來取對象;參數(shù)object則為真正要放入的需被傳遞的對象。request.setAttribute(u, username);方法getAttribute()按參數(shù)name指定的“名字”,到request中取出之前由方法setAttribute()放入的對象。String username = (String)request.getAttribute(u);2.9 Servlet跳轉(zhuǎn)轉(zhuǎn)發(fā)時傳遞對象在使用forward()方法執(zhí)行轉(zhuǎn)發(fā)時,該方法把request作為參數(shù)傳遞到了下一個Servlet,因為轉(zhuǎn)發(fā)前后的兩個Servlet引用的是同一個re
22、quest對象,所以就可借助request來傳遞數(shù)據(jù)。2.9 Servlet跳轉(zhuǎn)重定向Servlet之間的重定向是通過javax.servlet.http.HttpServletResponse對象的sendRedirect()方法實現(xiàn)public void sendRedirect(String location) throws IOException重定向時傳遞參數(shù)response.sendRedirect(path+?username=+username+&password=+password);2.9 Servlet跳轉(zhuǎn)轉(zhuǎn)發(fā)與重定向轉(zhuǎn)發(fā)與重定向之間最重要的區(qū)別在于Servlet跳轉(zhuǎn)中瀏
23、覽器所發(fā)出的請求次數(shù)。在Servlet的跳轉(zhuǎn)過程中,無論Servlet出現(xiàn)了多少次的轉(zhuǎn)發(fā),瀏覽器僅僅只發(fā)送了一次HTTP請求,只接收到最后一個Servlet傳回的響應(yīng)。重定向在跳轉(zhuǎn)至另一個Servlet之前,必須先對瀏覽器傳回響應(yīng),瀏覽器會根據(jù)響應(yīng)報文中的重定向路徑發(fā)出一個全新的請求以接受重新的處理, 所以重定向過程一共需要發(fā)出兩次HTTP請求。2.9 Servlet跳轉(zhuǎn)轉(zhuǎn)發(fā)與重定向由于在轉(zhuǎn)發(fā)之后,瀏覽器中URL仍然指向初始頁面,此時如果刷新瀏覽器,初始頁面將會被再次調(diào)用。如果不想這樣的情況發(fā)生(如付款或轉(zhuǎn)賬頁面),可選擇重定向。轉(zhuǎn)發(fā)只能在一個Web項目內(nèi)的資源之間跳轉(zhuǎn)。重定向可跳轉(zhuǎn)至當(dāng)前Web項目以外的其他資源。2.10 Servlet生命周期Servlet的生命周期指的是一個Servlet對象何時被創(chuàng)建、何時被訪問、何時被銷毀。一個Servlet對象在首次被訪問時創(chuàng)建;之后不管用戶多少次訪問該Servlet,調(diào)用的仍是同一對象,即Servlet在W
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【復(fù)習(xí)大串講】【中職專用】高二語文上學(xué)期期末綜合測試題(三)(職業(yè)模塊)(原卷版)
- 單位員工招聘合同范本
- 獸醫(yī)聘用勞務(wù)合同范本
- 光催化課題申報書
- 會所物資出售合同范本
- 廚具采買合同范本寫
- 吊裝合同范例簡易版本
- 醫(yī)院雇傭合同范本
- 企業(yè)各類合同范本
- 吊車及場地合作合同范本
- 中班美工區(qū)角活動教案10篇
- SJG 103-2021 無障礙設(shè)計標(biāo)準(zhǔn)-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點、關(guān)鍵、和難點工程的施工方案(技術(shù)標(biāo))
- 合肥市城市大腦·數(shù)字底座白皮書2020
- 機(jī)電預(yù)留預(yù)埋工程施工組織設(shè)計方案
- 2022年三八婦女節(jié)婦女權(quán)益保障法律知識競賽題庫及答案(共290題)
- 引水罐的設(shè)計計算
- Of studies原文譯文及賞析
- 安全閥基本知識講義
- 不銹鋼排煙風(fēng)管施工實施方案
評論
0/150
提交評論