版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、JSP與SERVLET學習上的建議n 多多動手實踐,總結經(jīng)驗,與人交流多多動手實踐,總結經(jīng)驗,與人交流n聽(看)明白。聽(看)明白。n動手實踐。動手實踐。n總結經(jīng)驗,記錄下來??偨Y經(jīng)驗,記錄下來。n與人交流,講出來。與人交流,講出來。為什么學習JavaEE JSP在在JSP頁面上嵌套大量的頁面上嵌套大量的Java代碼,不易維護代碼,不易維護當業(yè)務需求發(fā)生變化的時候,不易擴展當業(yè)務需求發(fā)生變化的時候,不易擴展我們的網(wǎng)站現(xiàn)在需要進行一些改動,把原來的我們的網(wǎng)站現(xiàn)在需要進行一些改動,把原來的改成改成項目已經(jīng)開發(fā)的很好了,但是我們想增加項目已經(jīng)開發(fā)的很好了,但是我們想增加功能功能什么是JavaEEJa
2、vaSE JSP ServletJavaBean EJBJDBCJNDIXMLStruts Hibernate JSFn 解決方法:解決方法:JavaEE的使用的使用n 定義:定義:JavaEE(Java Enterprise Edition)SpringWeb ServiceJavaEE與后續(xù)課程關系n Struts、Hibernate、Spring,它們都是框架,它們都是框架n框架,即框架,即Framework。其實就是某種應用的半成品,就是一組組件,用。其實就是某種應用的半成品,就是一組組件,用來完成自己的系統(tǒng)來完成自己的系統(tǒng)n簡單說就是使用別人準備好的一切,來實施自己的項目簡單說就是使
3、用別人準備好的一切,來實施自己的項目毛坯房就類似一個框架毛坯房就類似一個框架毛坯房毛坯房裝修后的房子裝修后的房子可以按照自己的意圖裝修可以按照自己的意圖裝修Java EEStruts Hibernate Spring應用程序應用程序JavaEE是基礎是基礎JavaEE與后續(xù)課程關系與后續(xù)課程關系JavaEE體系結構n JavaEE分層結構分層結構n表示層表示層-HTML頁面頁面n中間層中間層-Servlet等組件等組件n數(shù)據(jù)層數(shù)據(jù)層-Database(JDBC、JNDI等)等)表示層表示層中間層中間層數(shù)據(jù)層數(shù)據(jù)層平房式服務機構平房式服務機構樓房式服務機構樓房式服務機構n 服務機構(銀行)辦公區(qū)
4、域結構服務機構(銀行)辦公區(qū)域結構所有工作區(qū)所有工作區(qū)域都在一起域都在一起結構清晰結構清晰管理方便管理方便一層:服務大廳一層:服務大廳二層:辦公室二層:辦公室三層:資料室三層:資料室比比對對JavaEE體系結構n JavaEE體系結構體系結構-三層體系結構三層體系結構表示層表示層中間層中間層Web 服務器服務器數(shù)據(jù)層數(shù)據(jù)層數(shù)據(jù)庫表示層技術n 頁面顯示技術頁面顯示技術nHTMLnJavaScriptnAjax技術技術 頁面顯示技術頁面顯示技術 function test()alert(document.form1.username.value); JavaScript的用法的用法HTML的的FO
5、RM表單表單中間層技術請求請求ServletJavaBeanJSP頁面頁面執(zhí)行執(zhí)行調(diào)用調(diào)用轉(zhuǎn)向轉(zhuǎn)向響應響應JSTL使用使用n Servlet、JSP與與JavaBean訪問訪問返回數(shù)據(jù)返回數(shù)據(jù)客戶端客戶端中間層技術n JSPn顯示動態(tài)內(nèi)容的服務器網(wǎng)頁顯示動態(tài)內(nèi)容的服務器網(wǎng)頁n JSTLn輔助輔助JSP顯示動態(tài)內(nèi)容的標準標簽庫顯示動態(tài)內(nèi)容的標準標簽庫n Servletn接收客戶請求,并做出響應的接收客戶請求,并做出響應的Java程序程序nServlet是中間件技術的重要部分,它控制著其他的組件是中間件技術的重要部分,它控制著其他的組件n JavaBeannJavaEE的模型組件的模型組件n 中間
6、層框架技術中間層框架技術nStruts框架框架nStruts框架主要是擴展了框架主要是擴展了Servlet數(shù)據(jù)層技術n JDBC技術技術nJDBC(Java Database Connectivity ):Java 數(shù)據(jù)庫連接數(shù)據(jù)庫連接nJDBC用來訪問數(shù)據(jù)庫和操作數(shù)據(jù)庫表中數(shù)據(jù)用來訪問數(shù)據(jù)庫和操作數(shù)據(jù)庫表中數(shù)據(jù)n 數(shù)據(jù)層框架技術數(shù)據(jù)層框架技術nHibernateJavaBeanJDBC訪問訪問返回數(shù)據(jù)返回數(shù)據(jù)Hibernate訪問訪問返回數(shù)據(jù)返回數(shù)據(jù)JavaBean系統(tǒng)集成技術n JAX-WS技術技術nJAX-WS (Java API for XML Web Services) 是是 Jav
7、aEE 平臺的重要組平臺的重要組成部分成部分nJAX-WS 簡化了使用簡化了使用 Java 技術開發(fā)技術開發(fā) Web服務的工作服務的工作n JNDI技術技術nJNDI(Java Naming and Directory Interface:Java命名和目錄接口)命名和目錄接口)是一組在是一組在Java應用中訪問命名和目錄服務的應用中訪問命名和目錄服務的API應用程序應用程序JNDI名稱名稱對象對象電子書店系統(tǒng)n 前臺用戶模型前臺用戶模型n重點重點購物車的實現(xiàn)購物車的實現(xiàn)n使用的技術使用的技術Servlet、HttpSession、JDBC、JSTLHTTP協(xié)議的定義n HTTP協(xié)議協(xié)議 超文
8、本傳輸協(xié)議超文本傳輸協(xié)議n無狀態(tài)協(xié)議無狀態(tài)協(xié)議n不用記錄誰發(fā)出的請求不用記錄誰發(fā)出的請求,只需給出響應只需給出響應n適用于傳輸文件適用于傳輸文件n用于通過用于通過 Internet 發(fā)送請求消息和響應消息發(fā)送請求消息和響應消息n使用端口接收和發(fā)送消息,默認為使用端口接收和發(fā)送消息,默認為80端口端口我想同其他我想同其他“人人”交流,交流,怎么辦?怎么辦?我只會我們我只會我們計算機自己計算機自己的語言的語言對了,我可以使用對了,我可以使用HTTP協(xié)議和協(xié)議和“別人別人”交談了交談了雙方進行交談雙方進行交談提問提問回答回答HTTP協(xié)議的演示(2-1)n 在在eclipse中創(chuàng)建項目中創(chuàng)建項目n點擊
9、菜單點擊菜單“文件文件”“新建新建”“項目項目”n選擇選擇“MyEclipse”“Web Project”“下一步下一步”n寫入工程名稱,寫入工程名稱,Root URL 改為改為“/store”“完成完成”n創(chuàng)建創(chuàng)建index.html和和test.jspHTTP協(xié)議的演示(2-2)n 數(shù)據(jù)的提交和接收數(shù)據(jù)的提交和接收 index用戶名用戶名: 密密 碼碼:HTML文件的文件的FORM表單表單test你輸入的用戶名是:你輸入的用戶名是: 你輸入的密碼是:你輸入的密碼是: 獲取客戶端錄入數(shù)據(jù)獲取客戶端錄入數(shù)據(jù)index.htmlTest.jspGet請求格式n Get請求請求n請求格式請求格式以
10、請求行的形式以請求行的形式(地址重寫地址重寫)提交數(shù)據(jù)提交數(shù)據(jù)提交數(shù)據(jù)在地址欄可見,不安全提交數(shù)據(jù)在地址欄可見,不安全具有長度的限制,具有長度的限制,255個字符以內(nèi)個字符以內(nèi)monitor監(jiān)控工具監(jiān)控工具請求消息請求消息請求行請求行標題信息標題信息方法方法資源名稱資源名稱版本版本GET/POSTbar01.jpgHTTP/1.1瀏覽器類型瀏覽器類型內(nèi)容類型內(nèi)容類型User-Agent: Mozilla/4.0 (compatible; MSIE 4.0: Windows XP Accept: image/gif, image/jpeg, text/*, */*Get響應格式n Get請求請求
11、n響應格式響應格式把頁面代碼和內(nèi)容返回給瀏覽器把頁面代碼和內(nèi)容返回給瀏覽器monitor監(jiān)控工具監(jiān)控工具響應消息響應消息 狀態(tài)行狀態(tài)行標題信息標題信息版本版本狀態(tài)代碼狀態(tài)代碼說明說明HTTP/1.1200OK服務器服務器軟件軟件修改修改日期日期大小大小(字節(jié)字節(jié))內(nèi)容內(nèi)容類型類型Server: JavaWebServerLast modified: Tuesday, 07-Sep-04 1:14:34 GMTContent-length: 100Content-type: text/plainPost請求和響應格式n Post請求請求n請求、響應格式請求、響應格式與與Get請求不同,地址欄沒有
12、變化請求不同,地址欄沒有變化數(shù)據(jù)在地址欄不可見,安全數(shù)據(jù)在地址欄不可見,安全理論上沒有長度限制理論上沒有長度限制TCP/IP Monitor監(jiān)控工具監(jiān)控工具HTTP協(xié)議的使用n 在在JSP頁面上打印信息頁面上打印信息n“你好,你好,ACCP!” 和系統(tǒng)當前時間和系統(tǒng)當前時間MyJSP你好你好,ACCP!今天是今天是對時間進行格式化對時間進行格式化演示示例演示示例1:使用使用 JSP打印當前時間打印當前時間為什么需要Servletn 使用使用JSP技術如何編寫服務器動態(tài)網(wǎng)頁?技術如何編寫服務器動態(tài)網(wǎng)頁?n 在在JSP技術出現(xiàn)之前如何編寫服務器動態(tài)網(wǎng)頁?技術出現(xiàn)之前如何編寫服務器動態(tài)網(wǎng)頁?請求請求
13、 響應響應JSP 頁面頁面 運行運行執(zhí)行執(zhí)行Java代碼代碼 HTML代碼代碼 生成生成JSP 使用使用 Java 生成動態(tài)內(nèi)容生成動態(tài)內(nèi)容運行運行Servlet程序程序什么是Servlet(2-1)n 定義:定義:Servlet 是一個是一個 Java程序,是在服務器上程序,是在服務器上 運行以處理客戶端請求并做出響應的程序運行以處理客戶端請求并做出響應的程序請求請求 響應響應Servlet 運行運行于服務器端于服務器端什么是Servlet(2-2)n 初識初識Servletimport java.io.*;import javax.servlet.*;import javax.servle
14、t.http.*;public class HelloServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312);PrintWriter out = response.getWriter();out.println();out.println( Servlet);out.pri
15、ntln( );out.println(你好,歡迎來到你好,歡迎來到Servlet世界世界);out.println( );out.println();out.close(); 繼承繼承HttpServlet類類Servlet輸出輸出HTML標簽和內(nèi)容標簽和內(nèi)容導入所導入所需的包需的包處理請?zhí)幚碚埱蟮姆角蟮姆椒ǚ▽?shù)據(jù)將數(shù)據(jù)發(fā)送給發(fā)送給客戶端客戶端Servlet與JSP關系n Servlet與與JSP之間的關系之間的關系nJSP在服務器上轉(zhuǎn)譯的文件在服務器上轉(zhuǎn)譯的文件out.write(rn);out.write( rn);out.write( MyJsp.jsprn);out.write(
16、rn);out.write( rn);out.write( This is my JSP page. rn);out.write( rn);out.write(rn); MyJsp This is my JSP page. MyJsp.jspMyJsp_jsp.java(.jsp轉(zhuǎn)譯后的轉(zhuǎn)譯后的.java文件文件)JSP轉(zhuǎn)譯后的轉(zhuǎn)譯后的.java文件與文件與Servlet的處理方式一樣的處理方式一樣Servlet是是JSP技術的基礎技術的基礎 演示示例演示示例1:Tomcat下下MyJsp_jsp.java如何創(chuàng)建Servletn 前臺頁面的創(chuàng)建前臺頁面的創(chuàng)建nFORM表單的編寫表單的編寫n
17、后臺后臺Servlet的創(chuàng)建的創(chuàng)建n使用使用Eclipse的的Servlet向?qū)?chuàng)建向?qū)?chuàng)建Servlet代碼模板代碼模板n根據(jù)表單提交方法,確定接收方法根據(jù)表單提交方法,確定接收方法n接收請求數(shù)據(jù)、處理數(shù)據(jù)、返回響應頁面接收請求數(shù)據(jù)、處理數(shù)據(jù)、返回響應頁面FORM表單的method屬性n FORM表單提交的方法表單提交的方法nGet和和Post MyJsp This is my JSP page. MyJsp FORM的方法有哪些?的方法有哪些?Get | PostGet 與與 Post有什么區(qū)別?有什么區(qū)別?Get、Post提交數(shù)據(jù)與提交數(shù)據(jù)與Servlet有什么關系嗎?有什么關系嗎?使用
18、向?qū)?chuàng)建Servletn 在在Eclipse下如何創(chuàng)建下如何創(chuàng)建Servletn在在Eclipse下如何創(chuàng)建下如何創(chuàng)建Servletn首先在缺省包(首先在缺省包(src)下創(chuàng)建)下創(chuàng)建y2javaee.sg.ch02包包n在上述包中使用向?qū)?chuàng)建在上述包中使用向?qū)?chuàng)建Servlet 演示示例演示示例2:創(chuàng)建創(chuàng)建Servlet步驟步驟Servlet編程模式(3-1)n Servlet編程基本模式編程基本模式n處理處理Get和和Post請求請求import java.io.IOException;import javax.servlet.*;import javax.servlet.http.*;p
19、ublic class HelloServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /doGet方法體內(nèi)容方法體內(nèi)容 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /doPost方法體內(nèi)
20、容方法體內(nèi)容 使用使用Get方法提交,觸發(fā)方法提交,觸發(fā)doGet()方法方法使用使用Post方法提交,觸發(fā)方法提交,觸發(fā)doPost()方法方法Servlet編程模式(3-2)n Servlet編程基本模式編程基本模式nServlet如何接收數(shù)據(jù)如何接收數(shù)據(jù)import java.io.IOException;import javax.servlet.*;import javax.servlet.http.*;public class HelloServlet extends HttpServlet public void doGet(HttpServletRequest request,
21、HttpServletResponse response) throws ServletException, IOException public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException /doPost方法體內(nèi)容方法體內(nèi)容參數(shù)為表單元素名稱參數(shù)為表單元素名稱接收數(shù)據(jù)與接收數(shù)據(jù)與JSP相同相同如果是使用如果是使用Get方法提交數(shù)據(jù)方法提交數(shù)據(jù)String userName = request.getParameter(user
22、Name);String userPass = request.getParameter(userPass);/doGet方法體內(nèi)容方法體內(nèi)容如果是使用如果是使用Post方法提交數(shù)據(jù)方法提交數(shù)據(jù)doPost(request,response);Servlet編程模式(3-3)n Servlet編程的基本模式編程的基本模式n根據(jù)結果,轉(zhuǎn)向其他頁面或資源根據(jù)結果,轉(zhuǎn)向其他頁面或資源import java.io.IOException;import javax.servlet.*;import javax.servlet.http.*;public class HelloServlet extend
23、s HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String userName=request.getParameter(userName);String userPass=request.getParameter(userPass);if (userName = accp & userPass = 123) response.sendRedirect(success.jsp);else r
24、esponse.sendRedirect(failure.jsp);使用使用response重定向到其他頁面重定向到其他頁面與與JSP相同相同Servlet的生命周期(2-1)n Servlet的生命周期由的生命周期由Servlet容器容器(如:如:Tomcat)控制控制n容器如何處理請求容器如何處理請求HTTP請求請求容器請求請求 響應響應 12Servlet實例實例 Servlet通過通過URL找到找到執(zhí)行執(zhí)行service(請求,響應請求,響應)34doGet(請求,響應請求,響應)5響應響應6Servlet的生命周期(2-2)n 生命周期的各個階段生命周期的各個階段實例化實例化 Ser
25、vlet 容器創(chuàng)建容器創(chuàng)建 Servlet 的實例的實例初始化初始化 該容器調(diào)用該容器調(diào)用 init() 方法方法服服 務務 如果請求如果請求 Servlet,則容器調(diào)用,則容器調(diào)用 service() 方法方法銷毀實例之前調(diào)用銷毀實例之前調(diào)用 destroy() 方法方法銷銷 毀毀 生命周期相關方法public class HelloServlet extends HttpServlet public void init() throws ServletException System.out.println(初始化時第一次調(diào)用初始化時第一次調(diào)用! !); public void doGet
26、(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException PrintWriter out=response.getWriter(); out.println(); out.println( HelloServlet); out.println( ); out.println(你好你好! ! +new Date(); out.println( ); public void doPost(HttpServletRequest request, HttpServlet
27、Response response) throws ServletException, IOException doGet(request,response); public void destroy() System.out.println(“釋放資源釋放資源! !);初始化方法初始化方法doGet()方法方法doPost()方法方法銷毀方法銷毀方法程序演示n 運行運行HelloServletn啟動啟動Tomcat服務服務n在地址欄內(nèi)輸入:在地址欄內(nèi)輸入:http:/localhost:8080/store/HelloServletn運行結果運行結果演示示例演示示例3:HelloServle
28、t常見錯誤如果程序運行結果如下:如果程序運行結果如下:出現(xiàn)了亂碼,什么原因呢?出現(xiàn)了亂碼,什么原因呢?public class HelloServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charSet=GBK);/設定中文設定中文PrintWriter out = response.getWrit
29、er(); /使用輸出流,輸出信息使用輸出流,輸出信息 設定中文的語句,哪里有錯誤嗎?設定中文的語句,哪里有錯誤嗎?charset而不是而不是charSetServlet的部署(2-1)n 每個每個Servlet為一個組件,必須部署到為一個組件,必須部署到Tomcat中才能運行中才能運行n與與JSP相同相同n 在在Tomcat中部署中部署n部署要遵守容器特定的規(guī)定部署要遵守容器特定的規(guī)定Servlet的部署(2-2)n 在在Tomcat中如何部署中如何部署tomcatwebappsstoreWEB-INFindex.htmltest.jsplibclasses*.jarHelloServlet
30、.classweb.xml顯示頁面顯示頁面第三方第三方jar文件文件.java編譯后編譯后的的.class文件文件程序配置文件程序配置文件必須的必須的tomcat主目錄主目錄文檔根目錄文檔根目錄Servlet的配置n 在在web.xml文件中配置文件中配置Servletn 如何訪問如何訪問Servlet HelloServlet y2javaee.sg.ch02.HelloServlet HelloServlet /HelloServlet 兩個名稱必須相同兩個名稱必須相同為了方便使用為了方便使用Servlet,取個別名,取個別名完整的包名完整的包名+類名類名訪問訪問Servlet的的URL常
31、見錯誤n web.xml文件常見錯誤文件常見錯誤nservlet-mapping中的中的name與與servlet-name中的中的name不一致不一致n添加多個添加多個mapping映射映射 Helloservlet y2javaee.sg.ch02.HelloServlet HelloServlet /HelloServlet 請指出哪里有錯誤?請指出哪里有錯誤?servlet-name不一致不一致 HelloServlet y2javaee.sg.ch02.HelloServlet HelloServlet /HelloServlet HelloServlet /HelloServlet
32、2 多余的多余的mapping請指出哪里有錯誤?請指出哪里有錯誤?轉(zhuǎn)向控制n 數(shù)據(jù)的傳遞方式數(shù)據(jù)的傳遞方式n從頁面到從頁面到Servletnrequest.getParameter(“param”); n從從Servlet到到Servlet或或JSPJSP頁面頁面nRequestDispatcher對象的對象的forward()方法方法nJSP的的forward動作動作實質(zhì)是實質(zhì)是RequestDispatcher技術技術String pass = request.getParameter(password);String user = request.getParameter(loginNa
33、me);if (user.equals(accp) & pass.equals(accp) request.setAttribute(loginname, user);RequestDispatcher dispatcher = request.getRequestDispatcher(/ch02/ok.jsp);dispatcher.forward(request, response); else response.sendRedirect(/ch02/register.jsp);定義一個轉(zhuǎn)發(fā)器定義一個轉(zhuǎn)發(fā)器進行轉(zhuǎn)發(fā)進行轉(zhuǎn)發(fā)存儲要傳遞的數(shù)據(jù)存儲要傳遞的數(shù)據(jù)常見錯誤n 運行運行ch02文件夾下
34、文件夾下register.jspn 修改方法修改方法錯誤在哪里?錯誤在哪里?沒有上下文根路徑?jīng)]有上下文根路徑把路徑寫全把路徑寫全HTTP協(xié)議1、HTTP協(xié)議有什么特點?協(xié)議有什么特點?n 無狀態(tài)無狀態(tài)訪問訪問訪問訪問我剛剛被訪問了兩次,但是我我剛剛被訪問了兩次,但是我不知道,是一個人訪問了兩次?不知道,是一個人訪問了兩次?還是兩個人各訪問一次還是兩個人各訪問一次HTTP協(xié)議不記錄用戶的信息協(xié)議不記錄用戶的信息2、 什么是無狀態(tài)什么是無狀態(tài) ?HTTP是無狀態(tài)協(xié)議(3-1) 3、如何顯示張三和李四分別訪問某一網(wǎng)頁多、如何顯示張三和李四分別訪問某一網(wǎng)頁多 少次?少次?請求請求請求請求響應響應響應響
35、應張三張三李四李四為了區(qū)分用戶,需要為了區(qū)分用戶,需要為不同用戶作登記為不同用戶作登記HTTP是無狀態(tài)協(xié)議(3-2)購買購買2個商品個商品張三張三李四李四4、在線購物系統(tǒng)中如何對用戶進行區(qū)分?、在線購物系統(tǒng)中如何對用戶進行區(qū)分?購買購買3個商品個商品一共購買了一共購買了5個商品,個商品,錢應該從誰的帳戶上扣呢?錢應該從誰的帳戶上扣呢?HTTP是無狀態(tài)協(xié)議(3-3)Web程序能不能程序能不能像銀行卡號那樣,根據(jù)像銀行卡號那樣,根據(jù)卡號鎖定一個用戶呢?卡號鎖定一個用戶呢?請求請求響應響應響應的時候,由服務器響應的時候,由服務器給我分配一個唯一給我分配一個唯一ID號,號,這樣就能區(qū)別不同的用戶了這樣
36、就能區(qū)別不同的用戶了再次請求的時候,再次請求的時候,我?guī)е規(guī)е鳬D號,號,告訴服務器告訴服務器“我是誰我是誰”如何標識用戶?如何標識用戶?會話跟蹤(2-1)n HttpSession對象對象n服務器為每個會話創(chuàng)建一個服務器為每個會話創(chuàng)建一個HttpSession對象對象n每個會話對象都有一個唯一的每個會話對象都有一個唯一的IDn把用戶的數(shù)據(jù)保存在相應的把用戶的數(shù)據(jù)保存在相應的HttpSession對象內(nèi)對象內(nèi)第一次請求第一次請求響應響應服務器創(chuàng)建一個服務器創(chuàng)建一個HttpSession對象對象并把該對象的并把該對象的ID返回給用戶返回給用戶同時,服務器在內(nèi)存中開辟同時,服務器在內(nèi)存中開辟一空
37、間,用來保存該對象數(shù)據(jù)一空間,用來保存該對象數(shù)據(jù)把把ID發(fā)送給客戶端發(fā)送給客戶端第二次請求把第二次請求把ID一一起發(fā)送給服務器起發(fā)送給服務器根據(jù)根據(jù)ID號服務器尋找號服務器尋找內(nèi)存中相應的數(shù)據(jù)內(nèi)存中相應的數(shù)據(jù)會話跟蹤(2-2)請求請求 1請求請求 2請求請求 n.n 什么是會話什么是會話n當前瀏覽器與服務器間多次的請求、響應關系,被稱作一個會話當前瀏覽器與服務器間多次的請求、響應關系,被稱作一個會話使用會話的事例public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletEx
38、ception, IOException HttpSession session = request.getSession(true); Object count = session.getAttribute(COUNTER);int counter = 0;if (count = null) counter = 1; /將第一次計數(shù)存入將第一次計數(shù)存入session session.setAttribute(COUNTER, new Integer(1); else counter = (Integer) count).intValue(); counter+;/計數(shù)加一計數(shù)加一/將計數(shù)存入
39、將計數(shù)存入sessionsession.setAttribute(COUNTER, new Integer(counter); 取出取出session對對象內(nèi)存儲的值象內(nèi)存儲的值把數(shù)據(jù)存儲在把數(shù)據(jù)存儲在session對象內(nèi)對象內(nèi)記錄不同用戶的訪問次數(shù)記錄不同用戶的訪問次數(shù)獲得獲得session對象對象會話的創(chuàng)建和使用 public HttpSession getSession(); public HttpSession getSession( boolean value);n 會話的創(chuàng)建會話的創(chuàng)建n使用使用HttpServletRequest 的的 getSession() 方法創(chuàng)建會話,方法
40、創(chuàng)建會話, 語法如下:語法如下:n 會話的使用會話的使用n使用使用HttpSession接口的方法,進行接口的方法,進行n保存數(shù)據(jù):保存數(shù)據(jù):n取出數(shù)據(jù):取出數(shù)據(jù):public void setAttribute(String param,Object value);public Object getAttribute(String param);獲取獲取session對象的方法對象的方法getSession( )getSession(boolean bool )getSession( true )truefalse返回與當前關聯(lián)的返回與當前關聯(lián)的會話,如果沒有就會話,如果沒有就創(chuàng)建后將其返回
41、創(chuàng)建后將其返回返回與當前關聯(lián)返回與當前關聯(lián)的會話,如果沒的會話,如果沒有返回有返回null使用時,將其轉(zhuǎn)換成原來數(shù)據(jù)類型使用時,將其轉(zhuǎn)換成原來數(shù)據(jù)類型session對象的存在周期n session對象的存在周期對象的存在周期nsession的創(chuàng)建的創(chuàng)建n瀏覽器訪問服務器時,服務器為每個瀏覽器創(chuàng)建不同的瀏覽器訪問服務器時,服務器為每個瀏覽器創(chuàng)建不同的session對象對象nsession的關閉的關閉n調(diào)用調(diào)用session. invalidate()方法方法,使使session對象失效對象失效n訪問時間間隔大于非活動時間間隔,訪問時間間隔大于非活動時間間隔, session對象失效對象失效n關閉
42、瀏覽器時,關閉瀏覽器時,session對象失效對象失效請求請求在內(nèi)存開辟空間在內(nèi)存開辟空間保存數(shù)據(jù)信息保存數(shù)據(jù)信息清空內(nèi)存內(nèi)當前瀏清空內(nèi)存內(nèi)當前瀏覽器相關數(shù)據(jù)信息覽器相關數(shù)據(jù)信息現(xiàn)場編程 在登錄頁面用戶已錄入用戶名,現(xiàn)編寫一個在登錄頁面用戶已錄入用戶名,現(xiàn)編寫一個Servlet接接 收該數(shù)據(jù),并把用戶名值保存在收該數(shù)據(jù),并把用戶名值保存在HttpSession對象內(nèi)對象內(nèi)public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
43、String userName=request.getParameter(userName);HttpSession session=request.getSession();if (userName!=null & .equals(userName)session.setAttribute(userName, userName);elseresponse.sendRedirect(index.html);.實現(xiàn)電子書店的購物車n 需求描述需求描述 查看所有商品查看所有商品選擇商品選擇商品放入購物車放入購物車繼續(xù)購物繼續(xù)購物結賬結賬滿載而歸滿載而歸電子書店演示n 顯示所有書籍的列表顯示所有書籍
44、的列表 n 點擊某本書,顯示書籍的詳細信息點擊某本書,顯示書籍的詳細信息n 添加當前書籍到購物車添加當前書籍到購物車電子書店的數(shù)據(jù)庫設計n 數(shù)據(jù)庫設計數(shù)據(jù)庫設計n數(shù)據(jù)庫名:數(shù)據(jù)庫名:booksn數(shù)據(jù)庫表:數(shù)據(jù)庫表:titles電子書店的實體對象設計n 對象的設計對象的設計-書書n屬性屬性n方法(方法(getter、setter方法方法-為了得到和設置屬性值)為了得到和設置屬性值)實體類n 書籍類書籍類-BookBean.javaimport java.io.Serializable;public class BookBean implements Serializable private St
45、ring ISBN;/ISBN編號編號private String title;/書名書名private String copyright;/版權版權private String imageFile;/封面圖像封面圖像private int editionNumber;/版本版本private int publisherID;/出版商出版商IDprivate double price;/價格價格public void setISBN(String isbn) / 設定設定ISBN編號編號ISBN = isbn;public String getISBN() / 返回返回ISBN編號編號retu
46、rn ISBN;使用使用get方法,獲得屬性值方法,獲得屬性值BookBean類的私有屬性類的私有屬性標識該類可序列化標識該類可序列化 使用使用set方法,設置屬性值方法,設置屬性值電子書店的購物車設計n 購物車的設計購物車的設計-書籍清單書籍清單n書籍名稱書籍名稱n購買數(shù)量購買數(shù)量n書籍價格書籍價格n小計小計n總計總計數(shù)據(jù)庫連接類n 數(shù)據(jù)庫連接類:數(shù)據(jù)庫連接類:ConnectionManager.javapublic class ConnectionManager /打開數(shù)據(jù)庫連接打開數(shù)據(jù)庫連接 public static Connection getConnction() Connecti
47、on dbConnection = null;try Class.forName(driver); dbConnection = DriverManager.getConnection(url, user, pass); catch (Exception e) e.printStackTrace();return dbConnection; /關閉數(shù)據(jù)庫連接關閉數(shù)據(jù)庫連接 打開數(shù)據(jù)庫連接,與打開數(shù)據(jù)庫連接,與JSP相同相同演示示例演示示例2:數(shù)據(jù)庫連接類數(shù)據(jù)庫連接類ConnectionManager.java數(shù)據(jù)庫訪問類n TitlesBean.javapublic List getTitle
48、s() List titlesList = new ArrayList(); try connection = ConnectionManager.getConnction(); titlesQuery = connection .prepareStatement(select* form titles); ResultSet results = titlesQuery.executeQuery(); while (results.next() BookBean book = new BookBean(); book.setISBN(results.getString(isbn); . /設置
49、其他的屬性值設置其他的屬性值 titlesList.add(book); catch (Exception exception) exception.printStackTrace(); return titlesList;返回數(shù)據(jù)列表返回數(shù)據(jù)列表演示示例演示示例3:數(shù)據(jù)庫訪問類數(shù)據(jù)庫訪問類TitlesBean.java讀取行數(shù)據(jù)讀取行數(shù)據(jù), ,并存入并存入List中中顯示所有書籍信息的頁面n 顯示所有商品列表顯示所有商品列表-books.jsp % TitlesBean titlesBean = new TitlesBean(); List titles = titlesBean.getTi
50、tles(); session.setAttribute( titles, titles ); /顯示顯示titles內(nèi)數(shù)據(jù)內(nèi)數(shù)據(jù) for(int i=0;i A href=displayBook.jsp?isbn= IMG height=110 src=/store/images/ 調(diào)用方法,得到數(shù)據(jù)列表調(diào)用方法,得到數(shù)據(jù)列表把數(shù)據(jù)列表存入到把數(shù)據(jù)列表存入到session中中演示示例演示示例4:顯示書籍列表顯示書籍列表books.jsp顯示書籍詳細信息n 顯示書籍詳細信息顯示書籍詳細信息-displayBook .jsp%List titles = (List) session.getAtt
51、ribute(titles); int size = titles.size();BookBean book = null;String isbn = request.getParameter(isbn);int i = 0;while (i IMG src=/store/images/ /從從session中得到數(shù)據(jù)列表中得到數(shù)據(jù)列表從請求從請求URL中得到請求數(shù)據(jù)中得到請求數(shù)據(jù)通過通過isbn在列表中查找在列表中查找bool對象對象從從book中取得相關數(shù)據(jù)中取得相關數(shù)據(jù)演示示例演示示例5:書籍詳細信息書籍詳細信息displayBook.jsp購物車的設計分析n 設計分析設計分析n購物車中
52、對象的設計購物車中對象的設計n使用使用Servlet實現(xiàn)添加書籍到購物車實現(xiàn)添加書籍到購物車n使用使用JSP實現(xiàn)查看購物車的書籍列表實現(xiàn)查看購物車的書籍列表選擇商品選擇商品放入購物車放入購物車繼續(xù)購物繼續(xù)購物結賬結賬滿載而歸滿載而歸本章要完成內(nèi)容本章要完成內(nèi)容購物車如何設計呢?購物車如何設計呢?購物車中對象的設計n 對象的設計對象的設計書籍本身信息書籍本身信息書籍購買數(shù)量書籍購買數(shù)量書籍名稱書籍名稱書籍編號書籍編號書籍價格書籍價格書籍版本號書籍版本號BookBean購買書籍的數(shù)量購買書籍的數(shù)量public class CartItemBean implements Serializable p
53、rivate BookBean book; /當前書籍當前書籍 private int quantity; /購物車中的數(shù)量購物車中的數(shù)量 public CartItemBean( BookBean bookToAdd, int number ) book = bookToAdd; quantity = number; public void setQuantity( int number ) quantity = number; public int getQuantity() return quantity; /其他的其他的setter、getter方法方法對象屬性對象屬性構造方法構造方法
54、屬性的屬性的getter、setter方法方法演示示例演示示例1:購物車商品信息類購物車商品信息類CartItemBean.java購物車的實現(xiàn)(2-1)n 使用購物車存放商品使用購物車存放商品裝入購物車裝入購物車方便存取商品方便存取商品購物車的實現(xiàn)(2-2)n 使用使用Map實現(xiàn)購物車實現(xiàn)購物車BookBeanHashMapsessionkeyvalue存放到存放到存放到存放到書籍數(shù)量書籍數(shù)量CartItemBeanisbncartMap回顧 什么是什么是Map?Map的特點是什么?的特點是什么? Map的對象如何創(chuàng)建?的對象如何創(chuàng)建? 如何向如何向Map中添加數(shù)據(jù)?中添加數(shù)據(jù)? 如何從如何
55、從Map中取數(shù)據(jù)?中取數(shù)據(jù)?實現(xiàn)添加書籍到購物車n 添加書籍到購物車添加書籍到購物車 n獲得獲得session對象對象n從從session中取出中取出BookBean對象對象n創(chuàng)建創(chuàng)建HashMap對象對象,并添加一個條目到并添加一個條目到Map中中public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session = request.getSession(false); BookBean boo
56、k = (BookBean)session.getAttribute(bookToAdd); Map cart = new HashMap(); cart.put(book.getISBN(), new CartItemBean(book, 1); session.setAttribute(cart, cart);獲得獲得session對象對象從從session中取出書籍信息中取出書籍信息把數(shù)據(jù)存入到把數(shù)據(jù)存入到session中中實現(xiàn)添加書籍到購物車n 判斷購物車中是否存在該書籍判斷購物車中是否存在該書籍n存在:數(shù)量加一存在:數(shù)量加一n不存在:添加條目到不存在:添加條目到Map中中 HttpS
57、ession session = request.getSession(false); Map cart = (Map) session.getAttribute(cart); if (cart = null) cart = new HashMap(); session.setAttribute(cart, cart); BookBean book = (BookBean) session.getAttribute(bookToAdd); CartItemBean cartItem = (CartItemBean) cart.get(book.getISBN(); if (cartItem !
58、= null) cartItem.setQuantity(cartItem.getQuantity() + 1); else cart.put(book.getISBN(), new CartItemBean(book, 1); 如果如果session中存在該書籍,數(shù)量加中存在該書籍,數(shù)量加1如果如果session中不存在該書籍,添加條目數(shù)量為中不存在該書籍,添加條目數(shù)量為1判斷判斷session中是否存在中是否存在cart對象對象演示示例演示示例2:向購物車中添加商品向購物車中添加商品AddBookToCart.java查看購物車的書籍列表n 轉(zhuǎn)向轉(zhuǎn)向viewCart.jspn從從sessi
59、on中取出中取出Mapn從從Map中取出中取出CartItemBean數(shù)據(jù)數(shù)據(jù)Map cart = (Map) session.getAttribute(cart);Set cartItems = cart.keySet();Object isbn = cartItems.toArray();BookBean book;int i = 0;while (i isbn.length) cartItem = (CartItemBean) cart.get(String)isbni); book = cartItem.getBook(); /在頁面上顯示在頁面上顯示book數(shù)據(jù),如數(shù)據(jù),如:book
60、.getTitle(); i+;viewCart.jsp從從session中取出中取出Map得到得到Map中中key值的值的Set集合,再轉(zhuǎn)換成數(shù)組,集合,再轉(zhuǎn)換成數(shù)組,以便使用循環(huán)進行遍歷以便使用循環(huán)進行遍歷通過通過key值取值取value演示示例演示示例3:顯示購物車內(nèi)商品顯示購物車內(nèi)商品viewCart.jspSet介紹 Set接口繼承關系和常用方法接口繼承關系和常用方法Collection接口接口Set接口接口HashSet類類TreeSet類類int size( )boolean isEmpty() Object toArray() boolean add(Object o) 繼承繼
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 資金動賬提醒制度
- 診所急重癥搶救制度
- 解釋專制主義中央集權制度
- 融資擔保公司信息披露制度
- 養(yǎng)老院照護等級評估制度
- 2026北京西城區(qū)中國人民公安大學招聘94人備考考試試題附答案解析
- 2026山東濰坊市峽山區(qū)招聘中小學教師10人參考考試題庫附答案解析
- 2026中國科學院聲學研究所專項項目管理辦公室崗位招聘2人備考考試試題附答案解析
- 2026重慶兩江新區(qū)人民醫(yī)院宣傳科干事崗位招聘1人參考考試試題附答案解析
- 2026廣東佛山市順德區(qū)勒流新球初級中學語文、物理臨聘教師招聘參考考試試題附答案解析
- 綠電直連政策及新能源就近消納項目電價機制分析
- 2026屆江蘇省常州市生物高一第一學期期末檢測試題含解析
- 2026年及未來5年市場數(shù)據(jù)中國高溫工業(yè)熱泵行業(yè)市場運行態(tài)勢與投資戰(zhàn)略咨詢報告
- 教培機構排課制度規(guī)范
- 2026年檢視問題清單與整改措施(2篇)
- 認識時間(課件)二年級下冊數(shù)學人教版
- 2026屆陜晉青寧四省高三語文二次聯(lián)考(天一大聯(lián)考)作文題目解析及范文:“避”的抉擇價值判斷與人生擔當
- 【四年級】【數(shù)學】【秋季上】期末家長會:數(shù)海引航愛伴成長【課件】
- 律師掛靠協(xié)議書
- (2025)意大利多學科工作組共識聲明:努南綜合征的多學科治療
- 車位使用權抵債協(xié)議書
評論
0/150
提交評論