版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、JAVA WEB應用開發(fā),項目四 圖書管理(Servlet),工作任務,任務一 掌握Servlet編程 任務1-1 Servlet概念; 任務1-2 Servlet基本結構; 任務1-3 編寫Servlet 任務1-4 配置Servlet 任務1-5 Servlet應用程序 任務1-6 Servlet主要API 任務二 圖書分類設計 任務三 圖書信息管理設計 任務四 特征圖書設計,2,復習,Servlet:運行在服務器端的Java 應用程序(遵守相應 規(guī)范的Java類) Servlet的生命周期 創(chuàng)建和初始化-init(),只有一次 處理請求service(),根據(jù)請求類別,調(diào)用doGet()
2、或doPost()方法處理請求并返回響應,有客戶請求,就調(diào)用一次 服務終止destroy() 如何開發(fā)一個Servlet應用 編寫Servlet 引入包主要為3類 繼承HttpServlet,重寫doGet或doPost方法(獲取表單參數(shù)、操作選擇、創(chuàng)建實體對象和設置屬性、調(diào)用數(shù)據(jù)訪問層、頁面轉(zhuǎn)向) 配置ServletWeb.xml Servlet 名字 Servlet 類的路徑 對應訪問的URL地址 運行servlet,任務1-6 Servlet主要API,相關知識 Servlet包 Servlet API Servlet相關接口和類 Servlet請求轉(zhuǎn)發(fā) Servlet數(shù)據(jù)共享,2020
3、/7/31,4,實踐任務,主要內(nèi)容 相關包中接口和類主要方法功能與應用 Servlet表單的處理 Servlet請求轉(zhuǎn)發(fā) 共享數(shù)據(jù) Servlet異常 Servlet開發(fā)中的一些方法和技巧的使用,2020/7/31,5,一、Servlet包中接口和類,Servlet包中接口和類,javax.servlet.Servlet接口 void init(ServletConfit config)throws ServletException只能被調(diào)用一次 ServletConfig getServletConfig() 返回傳遞到servlet的init()方法的ServletConfig對象 voi
4、d service(ServletRequest request, ServletResponse response)throws ServletException,IOException 處理request對象中描述的請求,使用response對象返回請求結果 String getServletInfo() 返回描述servlet的一個字符串 void destory() 當servlet將要卸載時由servlet引擎調(diào)用,Servlet包中接口和類,javax.servlet.GenericServlet類(協(xié)議無關版本) 為了簡化Servlet的編寫,提供的抽象類 直接實現(xiàn) Servle
5、t接口和ServletConfig接口 除了Servlet中方法外,還有 String getInitParameter(String name) 返回具有指定名稱的初始化參數(shù)值。通過凋用config.getInitParameter(name)實現(xiàn)。 Enumeration getInitParameterNames() 返回此servet已編碼的所有初始化參數(shù)的1個枚舉類型值。調(diào)用config.getInitParameterNames()獲得列表。如果未提供 初始化參數(shù),則返回1個空的枚舉類型值(但不是null) String getServletName() 返回在Web應用發(fā)布描述器
6、(web.xml)中指定的servlet的名字。,Servlet包中接口和類,javax.servlet.http.HttpServlet類(HTTP版本) 應用于Web開發(fā),主要應用于HTTP協(xié)議的請求與響應,是繼承自GenericServlet的抽象類 針對HTTP的請求方法分別提供了7個處理方法 doGet doPost doPut doDelete doOptions doTrace doHead service()方法 Void service(ServletRequest request, ServletResponse response) Void service(HttpSer
7、vletRequest request,HttpServletResponse response),參數(shù)分別是: HttpServletRequest request HttpServletResponse response,Servlet包中接口和類,javax.servlet.ServletRequest接口(協(xié)議無關版本) 當客戶請求時,Servlet容器會創(chuàng)建該對象,封裝請求數(shù)據(jù) 主要處理 找到客戶端的主機名和IP地址 檢索請求參數(shù) 取得和設置屬性 取得輸入和輸出流 javax.servlet.ServletResponse接口(協(xié)議無關版本) Servlet容器在創(chuàng)建ServletR
8、equest對象的同時,也創(chuàng)建ServletResponse對象,用來封裝響應數(shù)據(jù) 主要用來處理輸出流及其內(nèi)容類型和長度,getAttribute、setAttribute getCharacteEncoding getParameter getRequestDispatcher,getWriter setContentType getCharacterEncoding,Servlet包中接口和類,javax.servlet.http.HttpServletRequest接口(HTTP版本) 繼承自ServletRequest 除了主要處理 讀取和寫入HTTP頭標 取得和設置cookies 取
9、得路徑信息 標識HTTP會話 新增方法 javax.servlet.http.HttpServletResponse接口(HTTP版本) 繼承自ServletResponse 加入表示狀態(tài)碼、狀態(tài)信息和響應頭標的方法,還負責對URL中寫入一Web頁面的HTTP會話ID進行解碼 新增方法,getCookies getHeader getMethod getSession,sendRedirect sendError addCookie setHeader,練習1 輸出HTTP信息,創(chuàng)建一個Web應用-輸出HTTP信息 編寫OutputInfoServlet 獲取HTTP請求頭信息的值 獲取客戶端
10、的IP地址和端口號 獲取服務器端的IP地址和端口號 Web.xml配置 Servlet名字 Servlet映射 Servlet初始參數(shù) 訪問該Servlet,2020/7/31,13,二、Servlet的表單處理,HTML 的表單,注意form的兩個屬性 method get 參數(shù)名及參數(shù)值傳遞到實際的URL地址中,放在?后面,不安全。 post 參數(shù)名及參數(shù)值不附加到實際的URL地址中 action 如果以“/”開始,是從WebRoot目錄開始查 如果前面沒有“/”,是從當前工程開始 如果要遞交給某個Servlet,要和web.xml中servlet映射路徑一致,但一般是Servlet映射路
11、徑去掉“/” Servlet中處理表單信息 獲取參數(shù) request.getParameter(“參數(shù)名”) 獲取多個參數(shù)getParameterValues,Servlet的中文亂碼處理,中文處理 客戶端、服務器端、Web應用程序、數(shù)據(jù)庫使用不同編碼方式,導致在字符數(shù)據(jù)在轉(zhuǎn)換時,出現(xiàn)亂碼問題 解決方案 以post方法提交的表單數(shù)據(jù)中有中文 在獲取請求參數(shù)之前 request.setCharacterEncoding(“GBK”); 在向瀏覽器發(fā)送中文數(shù)據(jù)之前 response.setContentType(text/html;charset=gb2312); 以get方法提交的表單數(shù)據(jù)中有中
12、文 自己進行編碼轉(zhuǎn)換 String name=request.getParameter(“name”); name=new String(name.getBytes(“ISO-8859-1”),”GBK”) 編寫專門工具方法 public String toGBK(String str) return new String(str.getBytes(“ISO-8859-1”),”GBK”); ,提交的數(shù)據(jù)會附加到URL后,發(fā)送到服務器,此時調(diào)用request.setCharacterEncoding(“GBK”)無用,練習2 表單中文處理,創(chuàng)建一個Web應用-中文處理 編寫一個html頁面 輸
13、入用戶名和密碼 遞交方式分別用post和get 編寫Servlet 重寫doPost方法,輸出表單中的中文字符 重寫doGet方法,輸出表單中的中文字符 Web.xml配置,2020/7/31,16,三、Servlet請求轉(zhuǎn)發(fā)和重定向,請求轉(zhuǎn)發(fā)和請求重定向 利用RequestDispatcher對象,可以將請求轉(zhuǎn)發(fā)給另外一個Servlet或JSP頁面,甚至是HTML頁面,來處理對請求的響應 利用HttpServletResponse的sendRedirect()方法可以重定向。 學習掌握 RequestDispatcher接口方法 forward include 得到RequestDispat
14、cher對象 ServletResponse接口中的sendRedirect()方法和forward()方法的區(qū)別,RequestDispatcher接口方法,RequestDispatcher對象由Servlet容器來創(chuàng)建,封裝一個由路徑所標識的服務器資源。 RequestDispatcher接口中定義二種方法用于請求轉(zhuǎn)發(fā) forward(ServletRequest,ServletResponse) 將請求轉(zhuǎn)發(fā)給服務器上另外一個Servlet,JSP頁面,或者HTML文件 這個方法必須在響應被提交給客戶端之前調(diào)用,否則拋出異常。 方法調(diào)用后在響應中的沒有提交的內(nèi)容被自動消除。 includ
15、e(ServletRequest,ServletResponse) 用于在響應中包含其他資源(Servlet,JSP或HTML文件)內(nèi)容。 即請求轉(zhuǎn)發(fā)后,原先的Servlet還可以繼續(xù)輸出響應信息,轉(zhuǎn)發(fā)到的Servlet對請求做出的響應將并入原先Servlet的響應對象中。,forward方法和include方法的區(qū)別,forward方法 調(diào)用后在響應中的沒有提交的內(nèi)容被自動消除。 請求后的URL路徑為目標對象的路徑 include方法使原先的Servlet和轉(zhuǎn)發(fā)到的Servlet都可以輸出響應信息。,獲取RequestDispatcher對象,三種方法 利用ServletRequest接口中
16、getRequestDispatcher(String path)方法 利用ServletContext 接口中getRequestDispatcher(String path)方法 利用ServletContext接口中getNamedDispatcher(String servletname)方法 區(qū)別 參數(shù)的區(qū)別 ServletRequest接口中的參數(shù)路徑不僅可以相對于當前Servlet上下文根,還可以相對與當前Servlet路徑 ServletContext接口的中參數(shù)路徑必須以“/”開始,是相對于當前Servlet上下文(當前工程),練習3 請求轉(zhuǎn)發(fā)1,創(chuàng)建一個Web應用-測試請求
17、轉(zhuǎn)發(fā) 編寫一個login登錄頁面login.html 輸入用戶名和密碼 表單遞交給相應Servlet 處理 編寫LoginServlet 獲取頁面表單參數(shù) 編寫代碼 進行請求轉(zhuǎn)發(fā) 登錄成功,轉(zhuǎn)向成功頁面success.html 登錄不成功,轉(zhuǎn)向失敗界面failed.html 分別使用 利用ServletRequest接口中getRequestDispatcher(String path)方法 利用ServletContext 接口中getRequestDispatcher(String path)方法 注意路徑寫法的區(qū)別,2020/7/31,21,sendRedirect() 和forward
18、()方法的區(qū)別,都是用于請求轉(zhuǎn)發(fā)的方法,轉(zhuǎn)發(fā)給另外的資源為客戶端服務 區(qū)別 sendRedirect() ServletResqonse接口中的方法,用于響應重定向 跳轉(zhuǎn)后瀏覽器地址欄變化 可以請求其他服務器資源 參數(shù)可以指定為相對路徑(沒有以”/”開始)、 絕對路徑(以“/”開始)或其它Web應用 傳值只能在url中帶parameter或者放在session中,無法使用request.setAttribute來傳遞。 forward() RequestDispatcher接口中的方法,用于請求跳轉(zhuǎn) 跳轉(zhuǎn)后瀏覽器地址欄不會變化 只能在應用程序內(nèi)部轉(zhuǎn)發(fā) 參數(shù) ServletRequest獲取的,
19、參數(shù)可以指定為相對路徑(沒有以”/”開始)、絕對路徑(以“/”開始) ServletContext獲取的,參數(shù)只能指定為絕對路徑 傳值可以使用三種方法:url中帶parameter,session,request.setAttribute, 瀏覽器訪問Servlet1。 Servlet1想讓Servlet2為客戶端服務。 Servlet1調(diào)用sendRedirect()方法, 將客戶端的請求重定向到Servlet2。 瀏覽器訪問Servlet2。 Servlet2對客戶端的請求做出響應。, 瀏覽器訪問Servlet1。 Servlet1想讓Servlet2對客戶端的請求 進行響應,于是調(diào)用fo
20、rward()方法, 將請求轉(zhuǎn)發(fā)給Servlet2進行處理。 Servlet2對請求做出響應。,Servlet中跳轉(zhuǎn)流程,實際上是告訴瀏覽器Servlet2所在的位置,讓瀏覽器重新訪問 Servlet2,會在響應中設置Location響應報頭。要注意的是, 這個過程對于用戶來說是透明的,瀏覽器會自動完成新的訪問,練習4 請求轉(zhuǎn)發(fā)2,創(chuàng)建一個Web應用 編寫一個login登錄頁面login.html 輸入用戶名和密碼 表單遞交給相應Servlet 處理 編寫LoginServlet 獲取頁面表單參數(shù) 進行請求轉(zhuǎn)發(fā) 登錄成功,重定向到成功頁面success.html 登錄不成功,重定向到失敗界面f
21、ailed.html 分別使用 sendRedirect() forward() 注意瀏覽器地址欄顯示區(qū)別,2020/7/31,24,四、數(shù)據(jù)共享,通過parameter傳遞和保存數(shù)據(jù) 可以來自request、 ServletConfig,以及Web模塊的初始化參數(shù)(ServletContext) 例如 request共享數(shù)據(jù) request.getParameter(name); 通過Attribute傳遞和保存數(shù)據(jù) 可以通過request、session和Servletcontext 例如 request.setAttribute(name,name); request.getAttrib
22、ute(name); 對于request的Attribute進行共享數(shù)據(jù)時,只能是跳轉(zhuǎn),而不能是重定向,不然的話,接收到的數(shù)據(jù)將會是一個 null 對于session ,只要session一直存在,數(shù)據(jù)一直有效 對于Servletcontext ,保存的數(shù)據(jù)在任何時候都有效,在forward和include時 parameter和Attribute都有效 因為在這兩種情況下,request和session ServletContext均存在。 在redirect的情況下 只有session和ServletContext上的Attribute存在,request的parameter和attrib
23、ute均丟失了,數(shù)據(jù)共享,request, 一個用戶可有多個 session, 一個用戶一個 servletContext 所有用戶共用一個,ServletContext上下文,用來表示Servlet運行的環(huán)境的接口。通過它可以: 獲得文件的MIME類型 獲得資源的URL 利用ServletContext存放一些所有Servlet都能共享的數(shù)據(jù) 記錄錯誤和信息化消息 一個ServletContext對象表示了一個Web應用程序的上下文 -已知路徑的根 例如:Servlet上下文被定位于http:/localhost:8080/project2 以/project2請求路徑(稱為上下文路徑)開始
24、的所有請求被發(fā)送到與此ServletContext關聯(lián)的Web應用程序,ServletContext上下文,獲取ServletContext對象 ServletConfig對象的getServletContext()方法 GenericServlet類的getServletContext()方法 ServletContext接口中方法 Object getAttribute(Stringname) void setAttribute(Stringname, Objectobject) Enumeration getAttributeNames() ServletContext getContext(Stringuripath) String getContextPath() String getInitParameter(Stringname) / String getMimeType(Stringfile) RequestDispatcher getRequestDispatcher(Stringpath),練習5 共享屬性應用,創(chuàng)建一個Web應用-ServletContext上下文應用 編寫一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030新加坡高端醫(yī)療器械產(chǎn)業(yè)集群發(fā)展策略研究報告
- 企業(yè)財務風險自查及整改實務方案
- 建筑工地基坑支護施工方案范本
- 物流公司績效考核制度方案
- 水電安裝施工安全技術措施方案
- 方案可擴展性規(guī)劃與未來需求研究
- 房地產(chǎn)項目營銷方案及推廣計劃
- 護理團隊在患者結局績效中的核心指標
- 項目團隊協(xié)作與任務分配方案
- 公益捐助誠信承諾函(3篇)
- 醫(yī)院檢查、檢驗結果互認制度
- 2025年醫(yī)院物價科工作總結及2026年工作計劃
- 2026年高考化學模擬試卷重點知識題型匯編-原電池與電解池的綜合
- 2025青海省生態(tài)環(huán)保產(chǎn)業(yè)有限公司招聘11人筆試歷年參考題庫附帶答案詳解
- 2025浙江杭州錢塘新區(qū)建設投資集團有限公司招聘5人筆試參考題庫及答案解析
- 2025年天津市普通高中學業(yè)水平等級性考試思想政治試卷(含答案)
- 2025年昆明市呈貢區(qū)城市投資集團有限公司及下屬子公司第二批招聘(11人)備考核心題庫及答案解析
- 2025年中國磁懸浮柔性輸送線行業(yè)市場集中度、競爭格局及投融資動態(tài)分析報告(智研咨詢)
- 腦膜瘤患者出院指導與隨訪
- 學堂在線 雨課堂 學堂云 科研倫理與學術規(guī)范 期末考試答案
- 2026年武漢大學專職管理人員和學生輔導員招聘38人備考題庫必考題
評論
0/150
提交評論