J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書_第1頁
J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書_第2頁
J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書_第3頁
J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書_第4頁
J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 -. - 考試資料. z -. - 考試資料J2EE應(yīng)用程序體系架構(gòu)實(shí)驗(yàn)指導(dǎo)書目 錄 TOC o 1-3 h z u HYPERLINK l _Toc333354939實(shí)驗(yàn)一簡(jiǎn)單的Servlet與JSP PAGEREF _Toc333354939 h 1HYPERLINK l _Toc333354940實(shí)驗(yàn)二請(qǐng)求對(duì)象 PAGEREF _Toc333354940 h 3HYPERLINK l _Toc333354941實(shí)驗(yàn)三響應(yīng)對(duì)象 PAGEREF _Toc333354941 h 7HYPERLINK l _Toc333354942實(shí)驗(yàn)四 Servlet容器模型 PAGEREF _Toc333

2、354942 h 9HYPERLINK l _Toc333354943實(shí)驗(yàn)五會(huì)話管理 PAGEREF _Toc333354943 h 13HYPERLINK l _Toc333354944實(shí)驗(yàn)六 JSP根本語法與頁面指令 PAGEREF _Toc333354944 h 16HYPERLINK l _Toc333354945實(shí)驗(yàn)七 JSP隱含對(duì)象與作用域 PAGEREF _Toc333354945 h 20HYPERLINK l _Toc333354946實(shí)驗(yàn)八 Web組件重用與JavaBeans PAGEREF _Toc333354946 h 24HYPERLINK l _Toc3333549

3、47實(shí)驗(yàn)九 JDBC數(shù)據(jù)庫 PAGEREF _Toc333354947 h 27HYPERLINK l _Toc333354948實(shí)驗(yàn)十 Servlet事件處理 PAGEREF _Toc333354948 h 35HYPERLINK l _Toc333354949實(shí)驗(yàn)十一 Servlet過濾器的使用 PAGEREF _Toc333354949 h 39說明:本實(shí)驗(yàn)指導(dǎo)書根據(jù)J2EE應(yīng)用程序體系架構(gòu)課程教學(xué)大綱編寫,共包括11個(gè)實(shí)驗(yàn),其中必做實(shí)驗(yàn)8個(gè),選作實(shí)驗(yàn)3個(gè),每個(gè)實(shí)驗(yàn)2學(xué)時(shí),學(xué)生每周完成一個(gè)實(shí)驗(yàn)。實(shí)驗(yàn)環(huán)境:計(jì)算機(jī)系統(tǒng)應(yīng)該安裝JDK 1.5以上版本,開發(fā)工具使用MyEclipse8.5版,效

4、勞器使用Tomcat 版,數(shù)據(jù)庫使用MySQL 5.0版。 該實(shí)驗(yàn)指導(dǎo)書的配套教材是Java Web編程技術(shù)澤剛 主編,清華大學(xué),2021.3。-. - 考試資料. z -. - 考試資料實(shí)驗(yàn)一 簡(jiǎn)單的Servlet與JSP一、實(shí)驗(yàn)?zāi)康?. 了解和掌握Servlet和JSP頁面的編寫和運(yùn)行。2. 比擬Servlet與JSP的區(qū)別和聯(lián)系,體會(huì)動(dòng)態(tài)頁面的含義。二、實(shí)驗(yàn)原理Servlet是運(yùn)行在效勞器端的Java程序,它主要是為了擴(kuò)展效勞器的功能。編寫和運(yùn)行Servlet一般要經(jīng)過4個(gè)步驟:1編輯源文件,它是繼承 Servlet的Java類;2編譯源文件;3在效勞器中部署該Servlet,即將類文件

5、存放到效勞器的適當(dāng)目錄中,并修改web.*ml部署描述文件;4使用瀏覽器該Servlet程序。JSP是一種效勞器端的動(dòng)態(tài)頁面技術(shù),它的實(shí)質(zhì)也是Servlet。它的編寫較Servlet容易。二者的主要區(qū)別是:Servlet通常是實(shí)現(xiàn)業(yè)務(wù)邏輯,而JSP通常實(shí)現(xiàn)表示邏輯。三、實(shí)驗(yàn)容與步驟一編寫和運(yùn)行一個(gè)簡(jiǎn)單的Servlet 【步驟1】在Tomcat安裝目錄的webapps下建立一個(gè)helloapp的目錄,在其中再建立一個(gè)WEB-INF目錄,在WEB-INF目錄中建立一個(gè)classes目錄。這樣就建立了一個(gè)名為helloapp的Web應(yīng)用程序?!静襟E2】編寫下面Servlet類,編譯并將類文件放入cl

6、asses目錄中package .demo;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class HelloServlet e*tends Servletpublic void service( ServletRequest request, ServletResponse response)throws ServletE*ception,IOE*ceptionPrintWriter out = response.getWriter();out.println();out.println();

7、out.println();out.println();out.println(Hello World!);out.println();out.println();【步驟3】在WEB-INF目錄中建立一個(gè)名為web.*ml的文件,該文件為Web應(yīng)用程序的部署描述文件,簡(jiǎn)稱DD。具體容如下: helloServlet .demo.HelloServlet helloServlet /hello 【步驟4】在瀏覽器的地址欄中輸入以下地址該Servlet。localhost:8080/helloapp/hello在瀏覽器的窗口中應(yīng)該顯示Hello, World!容。二下面的Servlet可顯示系統(tǒng)當(dāng)

8、前時(shí)間。請(qǐng)編譯并部署該Servlet,然后使用瀏覽器。package .demo;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class HelloWorldServlet e*tends Servlet public void service() throws ServletE*ception,IOE*ceptionPrintWriter out =; out.println(); out.println(); out.println(); out.println();out.println(

9、 ); out.println(Hello,World!);out.println(The time now is:+new java.util.Date(); out.println(); out.println();三編寫下面的JSP文件,將其用hello.jsp名保存到helloapp目錄中A Simple JSP PageHello,World!The time now is:使用下面的URL該頁面:localhost:8080/helloapp/hello.jsp四運(yùn)行下面的JSP頁面square.jspnumbersquared% for ( int i=0; i五改寫上述頁面,使

10、其運(yùn)行后產(chǎn)生以下頁面。圖1.1 square.jsp運(yùn)行結(jié)果四、思考題1. 如何安裝配置JDK和Tomcat2. 如何在Tomcat中運(yùn)行Servlet和JSP頁面.實(shí)驗(yàn)二 請(qǐng)求對(duì)象一、實(shí)驗(yàn)?zāi)康?. 掌握如何獲得請(qǐng)求參數(shù);2. 掌握如何檢索請(qǐng)求頭;3. 了解如何通過請(qǐng)求對(duì)象獲得客戶信息;4. 重點(diǎn)掌握使用請(qǐng)求對(duì)象存儲(chǔ)數(shù)據(jù)和請(qǐng)求轉(zhuǎn)發(fā)。 二、實(shí)驗(yàn)原理對(duì)客戶的請(qǐng)求,容器根據(jù)請(qǐng)求調(diào)用Servlet的相應(yīng)do*()方法,該方法帶有兩個(gè)參數(shù),一個(gè)是 ServletRequest,一個(gè)是 ServletResponse,它們分別表示請(qǐng)求對(duì)象和響應(yīng)對(duì)象,它們是容器自動(dòng)創(chuàng)立的兩個(gè)對(duì)象??梢允褂眠@兩個(gè)接口定義的假

11、設(shè)干方法完成有關(guān)操作。三、實(shí)驗(yàn)容與步驟一通過查詢串傳遞請(qǐng)求參數(shù),并在Servlet中檢索請(qǐng)求參數(shù)【步驟1】編寫下面的Servlet。package .demo;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class HelloUserServlet e*tends Servletpublic void service( ServletRequest request, ServletResponse response)throws ServletE*ception,IOE*ceptionStrin

12、g userName = request.getParameter(userName);PrintWriter pw = response.getWriter();pw.println();pw.println();pw.println();pw.println();pw.println(Hello, + userName + );pw.println();pw.println();【步驟2】編譯該Servlet,然后修改web.*ml文件,將下面代碼添加到其中: helloUserServlet .demo.HelloUserServlet helloUser /hellouser 【步驟3

13、】使用下面的URL之。localhost:8080/helloapp/hellouseruserName=John將userName的值改為你自己的名字,看輸出結(jié)果。假設(shè)不給出查詢字符串,結(jié)果如何.參數(shù)值使用漢字如何.二通過表單傳遞請(qǐng)求參數(shù),使用 ServletRequest對(duì)象獲得請(qǐng)求參數(shù)【步驟1】首先編寫一個(gè)input.html文件,存放在helloapp目錄中。該頁面在屏幕上顯示一個(gè)表單,其中包括和年齡域,點(diǎn)擊確定按鈕后,將表單參數(shù)傳遞給ParamServlet并顯示出來。input.html代碼如下:參數(shù)傳遞 從表單向Servlet傳遞參數(shù) : 年齡: 【步驟2】編寫ParamServ

14、let.java,其代碼如下:package .demo;import java.io.*;import java.util.*;import java*.servlet.*;import java*.servlet. .*;public class ParamServlet e*tends Servlet public void doGet( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception response.setCharacterEncoding(gb2312);

15、response.setContentType(te*t/html;charset=gb2312); String name = request.getParameter(name);name = new String(name.getBytes(iso8859-1),gb2312); String age = request.getParameter(age);age = new String(age.getBytes(iso8859-1),gb2312); PrintWriter pw = response.getWriter(); pw.println(); pw.println();

16、pw.println(); pw.println(); pw.println(:+name+); pw.println(年齡:+age+); pw.println(); pw.println(); public void doPost( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception doGet(request, response); 【步驟3】修改web.*ml文件,將下面代碼添加到其中: ParamServlet .demo.ParamServlet ParamSe

17、rvlet /paramtest 【步驟4】測(cè)試參數(shù)傳遞。在瀏覽器的地址欄中輸入:localhost:8080/helloapp/input.html。輸入數(shù)據(jù),點(diǎn)擊確定按鈕,體會(huì)表單參數(shù)的傳遞。問題1:如何通過超的錨標(biāo)簽傳遞請(qǐng)求參數(shù).三編寫一個(gè)Servlet,顯示所有請(qǐng)求頭【步驟1】ShowHeadersServlet.java的Servlet能夠檢索所有的請(qǐng)求頭,代碼如下:package .demo;import java.io.*;import java.util.*;import java*.servlet.*;import java*.servlet. .*;public class

18、 ShowHeadersServlet e*tends Servlet public void doGet( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception response.setContentType(te*t/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(); out.println(All Headers); out.println(); out.println

19、(); out.println(All Request Headers); out.println(n+ n+ Header NameHeader Value); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements() String headerName = (String)headerNames.ne*tElement(); out.println(+headerName); out.println(+request.getHeader(headerName); out.p

20、rintln(n); public void doPost( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception doGet(request, response); 【步驟2】修改web.*ml,參加下面容: ShowHeadersServlet /showheaders【步驟3】在瀏覽器地址欄中輸入下面URL該Servlet四簡(jiǎn)單的綜合應(yīng)用【步驟1】創(chuàng)立一個(gè)名為input.html的HTML頁面,其中包括一個(gè)表單,表單中包含兩個(gè)文本域,分別供用戶輸入*和,該頁面也包含提交

21、和重置按鈕。【步驟2】定義一個(gè)名為.demo.Student類,其中包括*sno和name兩個(gè)private的成員變量,定義和修改sno和name的方法?!静襟E3】編寫名為FirstServlet的Servlet,要求當(dāng)用戶在input.html中輸入信息后點(diǎn)擊提交按鈕,請(qǐng)求FirstServlet對(duì)其處理。在FirstServlet中使用表單傳遞的參數(shù)*和創(chuàng)立一個(gè)Student對(duì)象并將其作為屬性存儲(chǔ)在請(qǐng)求對(duì)象中,然后獲得通過請(qǐng)求對(duì)象的getRequestDispatcher()方法獲得RequestDispatcher()對(duì)象,將請(qǐng)求轉(zhuǎn)發(fā)到SecondServlet?!静襟E4】在Second

22、Servlet中取出請(qǐng)求對(duì)象上存儲(chǔ)的Student對(duì)象,并顯示輸出該學(xué)生的*和。在SecondServlet的輸出中應(yīng)該包含一個(gè)超,點(diǎn)擊該連接可以返回input.html頁面。圖2.1 input.html頁面顯示結(jié)果 圖2.2 SecondServlet顯示結(jié)果四、思考題1. 在Servlet中如何獲得請(qǐng)求參數(shù).2. 如何實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā).如何在請(qǐng)求對(duì)象中共享數(shù)據(jù).實(shí)驗(yàn)三 響應(yīng)對(duì)象一、實(shí)驗(yàn)?zāi)康?. 了解和掌握如何從響應(yīng)對(duì)象獲得輸出流對(duì)象;2. 掌握如何設(shè)置響應(yīng)類型;3. 掌握如何設(shè)置響應(yīng)頭和狀態(tài)碼;4. 重點(diǎn)掌握如何實(shí)現(xiàn)響應(yīng)重定向。二、實(shí)驗(yàn)原理對(duì)Servlet的請(qǐng)求目的是要獲得響應(yīng)消息。Serv

23、let要向用戶發(fā)送響應(yīng)數(shù)據(jù)首先要獲得輸出流對(duì)象。另外,通過響應(yīng)對(duì)象還可向客戶端發(fā)送狀態(tài)碼,也可以設(shè)置有關(guān)響應(yīng)頭,還可以對(duì)響應(yīng)重定向。三、實(shí)驗(yàn)容與步驟一 通過設(shè)置響應(yīng)容類型構(gòu)建E*cel電子表格package .demo;import java.io.*;import java.util.*;import java*.servlet.*;import java*.servlet. .*;public class E*celServlet e*tends Servlet public void doGet( ServletRequest request, ServletResponse respo

24、nse) throws ServletE*ception, IOE*ception response.setHeader(Cache-Control,no-cache);response.setContentType(application/vnd.ms-e*cel;charset=gb2312);PrintWriter out = response.getWriter();out.println(Student information); out.println(*tt性別t年齡t所在系); out.println(95001t勇t男t20t信息); out.println(95002t晨t

25、女t19t數(shù)學(xué)); 該程序的運(yùn)行結(jié)果如以下圖所示:圖3.1 生成E*cel電子表格二向客戶發(fā)送二進(jìn)制文件package .demo;import java.io.*;import java.util.*;import java*.servlet.*;import java*.servlet. .*;public class DownloadServlet e*tends Servlet public void doGet( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception

26、 response.setContentType(application/jar); File f = new File(C:servlet-api.jar); FileInputStream is = new FileInputStream(f); ServletOutputStream os = response.getOutputStream(); byte bytearray = new byte1024; int bytesread = 0; while( (bytesread = is.read(bytearray) ) != -1 ) os.write(bytearray, 0,

27、 bytesread); os.flush(); 注意:此Servlet正確運(yùn)行,需要將servlet-api.jar文件復(fù)制到C盤根目錄下。三下面的ShowTimeServlet通過設(shè)置refresh響應(yīng)頭實(shí)現(xiàn)每2秒鐘刷新一次頁面。package .demo;import java.io.*;import java.util.*;import java.te*t.SimpleDateFormat;import java*.servlet.*;import java*.servlet. .*;public class ShowTimeServlet e*tends Servlet public

28、 void doGet( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception response.setContentType(te*t/html;charset=gb2312); response.setHeader(refresh,2); PrintWriter out = response.getWriter(); Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd

29、a HH:mm:ss); String s = sdf.format(date); out.println(); out.println(); out.println(每5秒鐘刷新一次頁面); out.println(現(xiàn)在的時(shí)間是:+s+); out.println(); out.println(); 四響應(yīng)重定向【步驟1】建立下面的login.html登錄頁面 Login Page 用戶名: 密碼: 【步驟2】編寫一個(gè)名為RedirectServlet的Servlet,在其中檢索用戶名和口令參數(shù)值,然后判斷其是否正確假設(shè)用戶名和口令都為admin即認(rèn)為正確,如果正確將響應(yīng)重定向到wele.h

30、tml頁面,否則將響應(yīng)重定向到error.html頁面,這兩個(gè)頁面請(qǐng)你自己編寫,存放在應(yīng)用程序根目錄。下面是Servlet的局部代碼。package .demo;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class RedirectServlet e*tends Servletpublic void doPost( ServletRequest request, ServletResponse response) throws IOE*ception,ServletE*ception/ 此處添

31、加假設(shè)干代碼 if()response.sendRedirect(); elseresponse.sendRedirect(); 四、思考題1. 如何理解Servlet的生命周期.2. 如何理解請(qǐng)求轉(zhuǎn)發(fā)與響應(yīng)重定向.實(shí)驗(yàn)四 Servlet容器模型一、實(shí)驗(yàn)?zāi)康?. 掌握Web應(yīng)用程序的DD文件web.*ml的配置方法和作用;2. 掌握如何通過ServletConfig獲取Servlet的初始化參數(shù);3. 掌握ServletConte*t的概念,如何獲得ServletConte*t對(duì)象;4. 掌握如何通過RequestDispatcher轉(zhuǎn)發(fā)請(qǐng)求。二、實(shí)驗(yàn)原理Web應(yīng)用程序有嚴(yán)格定義的目錄構(gòu)造,它

32、需要一個(gè)稱為部署描述文件的文件web.*ml來配置。對(duì)應(yīng)用程序的每個(gè)Servlet,可以在web.*ml中定義假設(shè)干個(gè)初始化參數(shù),然后通過ServletConfig對(duì)象獲取這些參數(shù)。ServletConte*t對(duì)象表示該應(yīng)用程序的環(huán)境,通過該對(duì)象可以獲得應(yīng)用程序圍的初始化參數(shù)、容器版本信息、資源的URL、在其中存放共享數(shù)據(jù)以及登錄日志等。三、實(shí)驗(yàn)容與步驟一建立一個(gè)名為bookstore的Web應(yīng)用程序在Tomcat的webapps目錄下,建立一個(gè)如下所示的目錄構(gòu)造: |- bookstore|- html (包含所有的HTML文件)|- jsp (包含所有的JSP文件)|- images (包

33、含所有的GIF、JPEG和BMP圖象文件)|- inde*.html (默認(rèn)的HTML文件)|- WEB-INF|-classes lib web.*ml圖4.1 bookstore應(yīng)用程序的目錄構(gòu)造這樣就建立了一個(gè)名為bookstore的Web應(yīng)用程序,本實(shí)驗(yàn)后面的題目都在該應(yīng)用程序下面完成。二使用ServletConfig檢索Servlet的初始化參數(shù)【步驟1】編寫ConfigDemoServlet程序,容如下:package .demo;import java.io.*;import java.sql.*;import java*.servlet.*;import java*.servl

34、et. .*;public class ConfigDemoServlet e*tends ServletString servletName=null;ServletConfig config=null;String email=null;String telephone=null;public void init() config = getServletConfig();servletName = config.getServletName();email = config.getInitParameter(email);telephone = config.getInitParamet

35、er(telephone);public void service( ServletRequest request, ServletResponse response) throws ServletE*ception,IOE*ception response.setContentType(te*t/html;charset=gb2312); PrintWriter out = response.getWriter();out.println(); out.println(Servlet名稱:+servletName+); out.println(Email地址:+email+); out.pr

36、intln(:+telephone);out.println();【步驟2】修改web.*ml文件,在其中添加下面Servlet定義和初始化參數(shù)定義 configDemoServlet .demo.ConfigDemoServlet email hacker163. telephone 8899123 1 configDemoServlet /configDemo.do 【步驟3】在瀏覽器的地址欄中輸入下面URL該Servlet:localhost:8080/bookstore/configDemo.do程序運(yùn)行結(jié)果如以下圖所示:圖4.1 ConfigDemoServlet程序的運(yùn)行結(jié)果三Se

37、rvletConte*t的使用修改上面程序,將email地址和使用ServletConte*t初始化參數(shù)傳遞給ConfigDemoServlet。使用ServletConte*t對(duì)象將email地址和信息寫入日志文件中,并查看日志文件。五下面是一個(gè)Servlet,它可以獲得有關(guān)效勞器的信息。package .demo;import java.io.*;import java.util.*;import java*.servlet.*;public class ServerInfo e*tends GenericServlet public void service(ServletRequest

38、 request, ServletResponse response)throws ServletE*ception, IOE*ception response.setContentType(te*t/html;charset=GB2312);PrintWriter out = response.getWriter();ServletConte*t sc = getServletConte*t();out.println();out.println();out.println();out.println(獲取效勞器端信息);out.println();out.println();out.pri

39、ntln(效勞器端信息:);out.println();out.println();out.println(站點(diǎn)名);out.println( + request.getServerName() + );out.println();out.println();out.println(端口號(hào));out.println( + request.getServerPort() + );out.println();out.println();out.println(效勞器類型);out.println( + sc.getServerInfo() + );out.println();out.println

40、();out.println(支持Servlet版本);out.println(+sc.getMajorVersion()+.+sc.getMinorVersion()+);out.println();out.println();out.println(效勞器屬性);out.println();/ 獲得效勞器屬性集合Enumeration attributes = sc.getAttributeNames();while (attributes.hasMoreElements() String name = (String)attributes.ne*tElement();out.printl

41、n(name);out.println();out.println();out.println();out.println();out.println();六簡(jiǎn)單的綜合應(yīng)用【步驟1】創(chuàng)立一個(gè)名為input.html的HTML頁面,其中包括一個(gè)表單,表單中包含兩個(gè)文本域,分別供用戶輸入*和,該頁面也包含提交和重置按鈕。【步驟2】定義一個(gè)名為.demo.Student類,其中包括*sno和name兩個(gè)private的成員變量,定義和修改sno和name的方法?!静襟E3】編寫名為FirstServlet的Servlet,要求當(dāng)用戶在input.html中輸入信息后點(diǎn)擊提交按鈕,請(qǐng)求FirstServ

42、let對(duì)其處理。在FirstServlet中使用表單傳遞的參數(shù)*和創(chuàng)立一個(gè)Student對(duì)象并將其作為屬性存儲(chǔ)在ServletConte*t對(duì)象中,然后獲得通過ServletConte*t的getRequestDispatcher()方法獲得RequestDispatcher()對(duì)象,將請(qǐng)求轉(zhuǎn)發(fā)到SecondServlet。【步驟4】在SecondServlet中取出ServletConte*t上存儲(chǔ)的Student對(duì)象,并顯示輸出該學(xué)生的*和。在SecondServlet的輸出中應(yīng)該包含一個(gè)超,點(diǎn)擊該連接可以返回input.html頁面。圖4.2 input.html頁面顯示結(jié)果 圖4.3

43、SecondServlet顯示結(jié)果四、思考題1. 如何通過ServletConfig獲得Servlet參數(shù).2. 如何獲得ServletConte*t對(duì)象,如何通過該對(duì)象獲得上下文參數(shù).3. 如何使用ServletConte*t共享數(shù)據(jù).實(shí)驗(yàn)五 會(huì)話管理一、實(shí)驗(yàn)?zāi)康?. 了解Web效勞器對(duì)客戶跟蹤的各種方法;2. 重點(diǎn)掌握使用 Session對(duì)象跟蹤會(huì)話的方法; 3. 掌握使用Cookie技術(shù)跟蹤會(huì)話的方法;4. 了解URL重寫和隱藏表單域的方法。二、實(shí)驗(yàn)原理 協(xié)議是無狀態(tài)的協(xié)議。在很多情況下,Web效勞器必須能夠跟蹤客戶的狀態(tài)。比方,對(duì)于一個(gè)購物,在一個(gè)時(shí)刻可能有多個(gè)客戶購物,Web效勞器必

44、須能夠區(qū)分不同的客戶。一般情況下,Web效勞器為每個(gè)客戶配置了虛擬的購物車ShoppingCart。當(dāng)*個(gè)客戶請(qǐng)求將一個(gè)商品放入購物車時(shí),Web效勞器必須根據(jù)發(fā)出請(qǐng)求的客戶的身份,找到該客戶的購物車,然后把商品放入其中。Web效勞器跟蹤客戶的狀態(tài)通常有4種方法:1使用 Session對(duì)象管理會(huì)話;2使用持久的Cookie對(duì)象;3使用URL重寫機(jī)制;4使用隱藏的表單域。三、實(shí)驗(yàn)容與步驟一 使用 Session對(duì)象管理會(huì)話。package .demo;import java.io.*;import java*.servlet.*;import java*.servlet. .*;import ja

45、va.util.Date;public class ShowSession e*tends Servlet public void doGet( ServletRequest request, ServletResponse response) throws ServletE*ception, IOE*ception response.setContentType(te*t/html); Session session = request.getSession(); String heading =null; Integer accessCount = (Integer)session.get

46、Attribute(accessCount); if(accessCount=null)accessCount = new Integer(0);heading = Wele, Newer; elseheading = Wele Back.;accessCount = new Integer(accessCValue()+1); session.setAttribute(accessCount,accessCount); PrintWriter out = response.getWriter(); out.println(); out.println(Session Trac

47、king E*ample); out.println(); out.println(+heading+); out.println(Information about your session.); out.println(); out.println(Info TypeValuen); out.println(ID+session.getId()+n); out.println(Creation Time:); out.println(+new Date(session.getCreationTime()+n); out.println(Time of last access:); out.

48、println(+new Date(session.getLastAccessedTime()+n); out.println(Access number:+accessCount+n); out.println(); 圖5.1 ShowSession程序的運(yùn)行結(jié)果二使用Cookie跟蹤會(huì)話使用Cookie跟蹤會(huì)話涉及到向客戶端寫入Cookie和從客戶端讀取Cookie?!静襟E1】向客戶端寫入Cookie對(duì)象package test;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class Sen

49、dCookie e*tends Servlet public void doGet( ServletRequest request, ServletResponse response) throws IOE*ception,ServletE*ception Cookie userCookie = new Cookie(user, uid1234); userCookie. setMa*Age(60*60*24*7); response.addCookie(userCookie);response.setContentType(te*t/html);PrintWriter out=respons

50、e.getWriter();out.println(add cookies);out.println(+A cookie has been sent to brower);out.println(); 上述Servlet將向客戶端寫入一個(gè)Cookie,執(zhí)行后可查看客戶機(jī)對(duì)應(yīng)目錄看是否寫了一個(gè)文件。圖5.2 SendCookie程序的運(yùn)行結(jié)果【步驟2】從客戶端讀取Cookie對(duì)象package test;import java.io.*;import java*.servlet.*;import java*.servlet. .*;public class GetCookie e*tends S

51、ervlet public void doGet( ServletRequest request, ServletResponse response) throws IOE*ception,ServletE*ception String cookieName = user; String cookieValue = null; Cookie cookies = request.getCookies(); if (cookies!=null) for(int i = 0;icookies.length;i+) Cookie cookie = cookiesi; if(cookie.getName

52、().equals(cookieName) cookieValue = cookie.getValue(); response.setContentType(te*t/html);PrintWriter out=response.getWriter();out.println(get cookies);out.println(A cookie has been got from brower);out.println(CookieName:+cookieName+);out.println(CookieValue:+cookieValue+);out.println(); 圖5.3 GetCo

53、okie程序的運(yùn)行結(jié)果四、思考題1. 簡(jiǎn)述會(huì)話管理的常用方法有哪些. 2. 如何使用 Session對(duì)象共享數(shù)據(jù).實(shí)驗(yàn)六 JSP根本語法與頁面指令一、實(shí)驗(yàn)?zāi)康?. 熟練掌握J(rèn)SP的聲明、表達(dá)式、小腳本和注釋的使用;2. 理解JSP頁面page指令和動(dòng)作的語法格式;3. 理解JSP頁面的生命周期。4. 熟練掌握page指令的下面的屬性:import、session、errorPage、isErrorPage、contentType、pageEncoding。5. 理解page指令的下面的屬性:language、e*tends、buffer、autoFlush、info。二、實(shí)驗(yàn)原理JSP有三個(gè)指

54、令元素:page、include和taglib。這些指令元素是針對(duì)JSP引擎的,并不會(huì)產(chǎn)生任何看得見的輸出。它們都包含在標(biāo)簽。本實(shí)驗(yàn)主要學(xué)習(xí)page指令。指令作用于整個(gè)JSP頁面,包括靜態(tài)包含的頁面,但不包括動(dòng)態(tài)包含的頁面。可以在一個(gè)頁面中包含多個(gè)指令,但其屬性除import外只能在整個(gè)頁面中出現(xiàn)一次。指令可以放在頁面的任何位置,但為了JSP程序的可讀性,一般將指令放在頁面的前面。三、實(shí)驗(yàn)容與步驟一輸入并執(zhí)行下面JSP頁面,文件名為counter.jspWele! You are visitor number【步驟1】該JSP頁面包含哪些JSP語法元素。在瀏覽器中該頁面,輸出結(jié)果如何.屢次刷新

55、頁面,結(jié)果如何.【步驟2】翻開counter.jsp轉(zhuǎn)換后的源文件counter_jsp.java,對(duì)應(yīng)的類文件在哪里.文件名是什么.【步驟3】查看count變量是在哪里聲明的.【步驟4】將上面JSP頁面中的一行改為,頁面能否正常執(zhí)行,它與上面頁面有什么區(qū)別.二有下面e*pression.jsp頁面:你能找出其中的錯(cuò)誤嗎.你可試著執(zhí)行該頁面,看會(huì)出現(xiàn)什么結(jié)果.將其中錯(cuò)誤修改正來,最后輸出下面結(jié)果:圖6.1 e*pression.jsp的運(yùn)行結(jié)果三運(yùn)行下面persistent_counter.jsp頁面,體會(huì)如何實(shí)現(xiàn)持久的計(jì)數(shù)器的.Wele! You are th visitor(s).四輸入并

56、運(yùn)行下面的import_test.jsp頁面:page指令例如使用page指令導(dǎo)入java.util.Date類現(xiàn)在的時(shí)間是:現(xiàn)在的時(shí)間是:上述JSP頁面,輸出結(jié)果如以下圖所示:圖6.2 import_test.jsp頁面的運(yùn)行結(jié)果可以看到頁面中最后一行的中文顯示為亂碼,將下面代碼加到JSP頁面中:重新頁面,中文顯示正常。這說明可以使用page指令的contentType屬性指定頁面輸出使用的字符編碼。默認(rèn)情況下,JSP頁面使用的字符集是iso-8859-1編碼,如使用漢字編碼應(yīng)指定為gb2312或gbk。五 errorPage屬性和isErrorPage屬性的使用。【步驟1】下面的hello

57、.jsp頁面執(zhí)行時(shí)將拋出一個(gè)異常,它指定了錯(cuò)誤處理頁面為errorHandler.jsp。Hello, 【步驟2】下面的errorHandler.jsp是錯(cuò)誤處理頁面。請(qǐng)求不能被處理:請(qǐng)重試!用下面的URLhello.jsp頁面,就會(huì)產(chǎn)生下面結(jié)果: localhost:8080/bookstore/hello.jsp圖6.3 errorHandler.jsp頁面的運(yùn)行結(jié)果這說明沒有提供name參數(shù),hello.jsp頁面中拋出RuntimeE*ception異常,所以調(diào)用錯(cuò)誤頁面。如果使用下面URLhello.jsp頁面,將產(chǎn)生下面正常的頁面:localhost:8080/bookstore/

58、hello.jspname=Mary圖6.4 hello.jsp頁面的運(yùn)行結(jié)果注意:如果請(qǐng)求參數(shù)值使用漢字,仍然產(chǎn)生亂碼,例如:localhost:8080/bookstore/hello.jspname=歐陽清風(fēng)這是因?yàn)檎?qǐng)求參數(shù)默認(rèn)使用iso-8859-1編碼傳遞,如果要正確顯示中文,應(yīng)將請(qǐng)求參數(shù)編碼轉(zhuǎn)換為gb2312編碼。按下面方法修改hello.jsp頁面,將請(qǐng)求參數(shù)值編碼轉(zhuǎn)換為漢字編碼。Hello, 四、思考題1. JSP語法元素有哪些.使用時(shí)應(yīng)注意什么問題. 2. JSP頁面的生命周期有哪幾個(gè)階段.3. 如何理解JSP頁面本質(zhì)上是Servlet. 4. page指令有哪些常用的屬性,

59、各自的功能是什么.實(shí)驗(yàn)七 JSP隱含對(duì)象與作用域一、實(shí)驗(yàn)?zāi)康?. 掌握全部9個(gè)隱含對(duì)象的使用;2. 理解4種作用域?qū)ο?。二、?shí)驗(yàn)原理在JSP頁面的轉(zhuǎn)換階段,JSP引擎在_jspService()方法中聲明并初始化了9個(gè)隱含對(duì)象,它們主要是為了方便在JSP頁面對(duì)這些對(duì)象的。這些隱含對(duì)象包括:application、session、request、response、out、page、pageConte*t、config、e*ception。在上述9個(gè)隱含對(duì)象中,有下面4個(gè)作用域?qū)ο?,它們是:application、session、request、pageConte*t。它們主要用來在不同作用域中共

60、享數(shù)據(jù)。三、實(shí)驗(yàn)容與步驟一了解隱含對(duì)象是如何定義的。在helloapp應(yīng)用程序中編寫一個(gè)名為implicit.jsp的頁面,容為空。然后在瀏覽器中該頁面。接下來翻開workCatalinalocalhosthelloapporgapachejsp目錄中的implicit_jsp.java文件,查看隱含對(duì)象是如何定義的。完成下面的填空:JSP頁面轉(zhuǎn)換后定義的類名為: 該類繼承了哪個(gè)類: 隱含對(duì)象request的類型為: 隱含對(duì)象response的類型為: 隱含對(duì)象pageConte*t的類型為: 隱含對(duì)象session的類型為: 隱含對(duì)象application的類型為: 隱含對(duì)象config的類

溫馨提示

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

評(píng)論

0/150

提交評(píng)論