1、National Chin-Yi Institute of TechnologyDepartment of Computer Science and Information Engineering網路程式設計網路程式設計Web-based Programming林佩蓉 老師 國立勤益技術學院資訊工程學系九十五學年度第一學期11/10/20221JSP 2.0動態網頁技術6.4.5 getParameterNames()getParameterNames()方法主要是用來取得所有傳遞變數的名稱,其回傳值是一個包含所有變數名稱的Enumeration集合物件。Enumberation為一Java
2、類別介面,該介面位於java.util套件(非預設引用套件),引用getParameterNames()方法前,須用page導引指令載入。P6-2911/10/20222JSP 2.0動態網頁技術範例範例getGetParameterNames/usingGetParameter.htmlP6-3011/10/20223JSP 2.0動態網頁技術範例範例getGetParameterNames/usingGetParameternames.jspgetParameterNames():取得包含所有參數名稱字串的集合物件,並存至型態為Enumeration的變數varobj.hasMoreEle
3、ments():當集合沒有其他元素時,回傳值為false,停止成員列舉,若尚有其它成員,其回傳值為true,繼續進行列舉操作nextElement():列舉下個元素值P6-30P6-3111/10/20224JSP 2.0動態網頁技術6.4.6 Enumeration介面型態介面型態 Enumeration是java.util套件中的一個介面,此介面類型的物件是一種集合物件,下面是此類型物件建立的方式。Enumeration objName;Enumeration可使用的方法:hasMoreElement()傳回布林值表示物件中是否還包含元素。nextElement()傳回集合中的下一個元素,
4、元素的資料類型為Object。P6-3111/10/20225JSP 2.0動態網頁技術nextElement()方法方法 集合物件會有一個指標指向其中的元素,以便決定該傳回其中那個元素的值,這個指標一開始在最上層,當呼叫了nextElement()方法,指標會往下移並傳回所指元素的內容,如程式中呼叫了varobj.nextElement(),則指標的狀況如下圖:P6-3211/10/20226JSP 2.0動態網頁技術6.4.7 getParameterValues(strName)checkboxgetParameterValues()是用來取得陣列資料的方法,當選擇了允許複選核取方塊中的
5、選項,或者多選下拉式選單中的資料時,在程式中可由此方法來取得被選取的資料項。範例getParameterValues usingGetParameterValues.html#9#12建立了4個checkbox,名稱都是favorite,若選取其中的某幾項,這些被選取的資料會組成favorite陣列,送到usingGetParameterValues.jsp網頁處理。P6-3311/10/20227JSP 2.0動態網頁技術6.4.7 getParameterValues(strName)(Cont.)checkbox#7宣告一個字串陣列物件select,儲存user選取的資料組成的favor
6、ite陣列#11 count儲存select陣列的長度,#10#14是例外處理區塊,用來處理當表單傳來的陣列為空時,如此計算陣列長度會產生例外錯誤,再將網頁重新導回上一個表單#13 利用response的sendRedirect()方法將網頁重新導向上一個HTML表單#17,#18顯示出所有select陣列中的內容,也就是選取的結果。範例範例getParameterValues usingGetParameterValues.jspP6-33P6-3411/10/20228JSP 2.0動態網頁技術6.4.7 getParameterValues(strName)option getParam
7、eterValues usingGetParameterValuesOption.htmlP6-35P6-3611/10/20229JSP 2.0動態網頁技術6.4.8 取得系統資訊取得系統資訊 ch06getSystemInfo.jspP6-36 P6-3711/10/202210JSP 2.0動態網頁技術6.4.9 取得請求標頭資訊取得請求標頭資訊請求請求HTTP通訊協定為網頁伺服器以及瀏覽器之間,進行溝通與資料交換所需的規則,HTTP整個運作的過程式可分為三個步驟。標頭資料交換標頭資料交換主體資料傳輸主體資料傳輸若request為有效,則client的browser會和Server進行h
8、eader資料交換動作,header資料定義了傳輸資料的特性,包含expires,connect.等。P6-3811/10/202211JSP 2.0動態網頁技術6.4.9 取得請求標頭資訊取得請求標頭資訊(Cont.)方法方法說明說明getHeader(String name)傳回名稱為name的請求標頭內容getHeaderNames()傳回所有請求標頭名稱的集合 ch06getHTTPInfo.jspP6-39 P6-4011/10/202212JSP 2.0動態網頁技術6.5 response內建物件內建物件-response 物件方法成員物件方法成員分類分類方法方法說明說明設定回應資
9、訊getCharacterEncoding回傳文件內容編碼的方式。setContentType設定網頁的文件格式與編碼方式。sendError自訂輸出客戶端的錯誤代碼以及訊息。setStatus用來設定一個回應的HTTP狀態碼分類分類方法方法說明說明回應標頭資訊ContainsHeader(String name)傳回布林值表示名稱為name的標頭是否存在 SetDateHeader(String name,long date)設定名稱為name的回應標頭,資料型態為長整數long,內容為date,其值為格林威治時間自1970年1月1日開始算起到欲設定時間的毫秒數setHeader(Strin
10、g name,String value)設定名稱為name的回應標頭其內容為value,資料型態為字串StringsetIntHeader(String name,int value)設定名稱為name的回應標頭其內容為value,資料型態為整數int。P6-4111/10/202213JSP 2.0動態網頁技術6.5 response內建物件內建物件-response 物件方法成員物件方法成員分類分類方法方法說明說明緩衝區處理flushBuffer()清空緩衝區。getBufferSize()取得緩衝區大小。setBufferSize()設定緩衝區大小。isCommitted()表示資料是否
11、出清完畢,寫入瀏覽器。reset()清除緩衝區內容。網頁導向與重設sendRedirect(pageUrl)重新導向網頁至指定的url。P6-4111/10/202214JSP 2.0動態網頁技術6.5.2 設定回應資訊設定回應資訊getCharacterEncoding方法:方法:傳回文件內容編碼的方式。response.getCharacterEncoding()預設傳回的值是8859_1,若是該網頁使用了page導引指令或者setContentType()方法設定了網頁的編碼方式,則傳回相對的內容。setContentType方法:方法:用來設定網頁的文件格式與編碼方式,與page導引指
12、令的contentType屬性功用相同。response.setContentType(text/html;charset=Big5);當網頁回傳至client browser時,可將所要回應的訊息及網頁狀態的設定,利用response物件所提供的方法一併完成。P6-4211/10/202215JSP 2.0動態網頁技術6.5.2 設定回應資訊設定回應資訊(Cont.)sendError方法:方法:自訂一個錯誤的代碼以及錯誤的訊息,輸出於客戶端。response.sendError(錯誤代碼,文字訊息錯誤代碼,文字訊息)setStatus方法方法設定一個回應的HTTP狀態碼,依這個狀態碼,客戶
13、端便會出現相關的訊息。開啟的網頁正確無誤,則會自動傳送一個SC_OK(整數值為200)的狀態碼。P6-4311/10/202216JSP 2.0動態網頁技術6.5.3 回應標頭資訊回應標頭資訊 Header information分成request header和response header,response物件提供與回應header處理有關的方法。設定回應header的tag,此tag必須在 和 中設定,語法:Response.setHeader(“connection”,”keep-alive”);P6-4511/10/202217JSP 2.0動態網頁技術6.5.4 操作緩衝區操作緩衝
14、區 Response物件其中一類的方法成員專門用以處理buffer的相關作業,例如清空buffer(flushBuffer)、取得buffer大小(getBufferSize)、設定buffer大小(setBufferSize)等等。範例:ch06usingBuffer.jsp P6-45P6-4611/10/202218JSP 2.0動態網頁技術6.5.5 重新導向網頁重新導向網頁網頁重新導向在互動式網頁計中是很重要的技巧之一,response物件的sendRedirect方法用來重新導向新網頁:response.sendRedirect(“導向網頁的相對位址或絕對位址導向網頁的相對位址或絕
15、對位址)範例:範例:ch06sendDirectusingSendDirect.htmlP6-4811/10/202219JSP 2.0動態網頁技術6.5.5 Refresh除了使用sendRedirect方法來重新導向網頁外,HTTP中有一個Refresh回應header,可用來設定網頁自動更新的時間以及導向新網頁:response.setHeader(“Refresh”,”網頁更新間隔的秒數網頁更新間隔的秒數;url=導向的網頁導向的網頁)若未設定url中要導向的網頁位址,則網頁會於所設定的更新間隔秒數來重新載入目前顯示的網頁;若設定url指定重新導向網頁的位址,則於所設定的秒數後,網頁會
16、自動導向至新網頁。ex1.自動更新網頁response.setHeader(“Refresh”,”5)ex2.導向新網頁response.setHeader(“Refresh”,”5;url=http:/”)上面兩個自動更新網頁和導向新網頁的例子,最常用在聊天室顯示即時發言與網址變更時使用,若是用在html網頁中,的tag也可達到相同的功能:meta http-equiv=“Refresh”content=“5”P6-4911/10/202220JSP 2.0動態網頁技術6.5.5 Refresh(Cont.)11/10/202221JSP 2.0動態網頁技術Cookies補充資料(含Cook
17、ie範例程式)在Browser記錄一些簡單的資訊,以便讓Server查詢IE可以在C:Documents and SettingsUserNameCookies找到Cookie的來源Cookie保存期限Cookie內容11/10/202222JSP 2.0動態網頁技術Cookie的概念和特性Cookie 是儲存於客戶端(browser 內)的資料。由於這是一種由伺服器端的程式傳送資料到客戶端的一種簡易的方式,因此被大量的使用於 web 為主的系統中,例如客戶輸入的資料,客戶的偏好等等。這些資料先由伺服器端的程式寫到客戶端,然後之後的聯繫便可以從這些資料來提供不同的服務。例如我們可以將使用者的帳
18、號以及密碼存放在 cookie 內,下一次使用者要登入的時候,就可以從 cookie 來判斷,如果已經存在就不需要再輸入一次。不過,cookie 也有一些限制,例如一個 cookie 不可以超過 4KB,而瀏覽器也會對 cookie 的總數作限制,cookie 有可能會有不見的時候,所以程式寫作的時候要謹慎。另外,由於 cookie 大家都能讀取,因此也有安全上的考量。11/10/202223JSP 2.0動態網頁技術Cookie的概念和特性(Cont.)實際執行JSP網頁時,使用session物件也需要配合Cookie,所以不管是使用Cookie或session物件,Browser都必須開啟
19、Cookie功能,否則Cookie與session將無法正常運作。讀取 cookie:建議先執行這個程式來了解究竟 cookie 寫進去了沒,等到下一個程式(SetCookies)執行完後,再執行一次並比較兩次的不同。11/10/202224JSP 2.0動態網頁技術11/10/202225JSP 2.0動態網頁技術Cookie資料的存取資料的存取Cookie資料的儲存與取得在JSP網頁中,將資料儲存至Cookie必須利用response物件,取得資料則需利用request物件。ClientServer將資料輸出至Cookie取得Cookie中的資料responserequest11/10/2
20、02226JSP 2.0動態網頁技術將資料寫入將資料寫入Cookie兩大步驟建立Cookie變數呼叫response物件的addCookie方法,將變數寫入Cookie語法Cookie 變數名稱=new Cookie(“資料名稱”,值)Cookie 變數名稱=new Cookie(“資料名稱”,String.valueOf(值)Response.addCookie(變數名稱)11/10/202227JSP 2.0動態網頁技術從從Cookie中取得資料中取得資料四大步驟呼叫request物件的getCookies方法,取得儲存Cookies中的資料,回傳值為陣列型態Cookie 陣列名稱=req
21、uest.getCookies()利用Array類別的length屬性取得陣列長度陣列變數.length利用for一一取出變數呼叫Cookie的getName方法取得資料Cookie變數.getName()11/10/202228JSP 2.0動態網頁技術設定設定Cookie變數有效存取時間變數有效存取時間設定Cookie變數有效存取時間Cookie 變數.setMaxAge(有效時間)設定有效時間後,各網頁存取相同變數名稱時,此變數為同一個變數範例(Cookie範例程式下載)AgeFrm.jspAgeRep.jsp11/10/202229JSP 2.0動態網頁技術記錄在記錄在Client的檔
22、案的檔案C:Documents and SettingsxxxxCookieCheck最近的日期11/10/202230JSP 2.0動態網頁技術123411/10/202231JSP 2.0動態網頁技術當使用者瀏覽當使用者瀏覽AgeFrm.jsp檔案時,程式會試著從檔案時,程式會試著從Cookie取得取得user的資料的資料(#22-#40),若可取得值,表示非,若可取得值,表示非第一次第一次login,表示曾瀏覽此頁,所以會將表示曾瀏覽此頁,所以會將FirstLogin變變數設為數設為false(#30),反之,則為第一次瀏覽。反之,則為第一次瀏覽。當不是第一次瀏覽,則從當不是第一次瀏覽,
23、則從Cookie中取得中取得user以前輸入的以前輸入的login資料資料(#27-#39),並顯示在網頁的表單中,並顯示在網頁的表單中(#68,#69)。呼叫request物件的getCookies方法,取得儲存於Cookie中的資料,傳回值為一個Cookie變數陣列。利用Array類別的length屬性取得陣列的長度陣列變數.length。利用for迴圈從前述Cookie變數陣列一一取出Cookie變數。呼叫Cookie的getName方法取得Cookie變數的名稱,執行比對找出欲取得的資料。傳回一字串,代表該Cookie變數所儲存資料的名稱若Cookie內儲存中文字串,存入前必須先經過編
24、碼,而取出時,則必須運用URLDecoder類別decode方法解碼。用getValue()取得其中的值11/10/202232JSP 2.0動態網頁技術AgeRep.jsp檔則將使用者輸入於AgeFrm.jsp網頁之表單的資料,建立為Cookie變數(AgeRep.jsp檔的#24-#26),將這些Cookie變數的有效時間,設定為一週(#29-#32),相當於7(天)*24(小時)*60(分)*60(秒),接著,將資料寫入Cookie中.Cookie物件有其生命期限,基本上始於建立Cookie時,而關閉瀏覽器之後自動清除Cookie物件,也可以設定Cookie的生命期限,讓它存在Clien
25、t久一些,這樣即使關閉瀏覽器,Cookie也不會被清除,可使用Cookie的setMaxAge()來設定生命期限,設定單位是秒,如果想要直接刪除使用中的Cookie,則可以設定setMaxAge()方法的參數為 0,即生命期限為 0,就相當於立即讓 Cookie失效。將資料寫回Cookie11/10/202233JSP 2.0動態網頁技術Cookie的建立與使用建立建立Cookie物件物件:Cookie物件必須包含有一個特定的indexValue索引值與字串類型的資料內容stringValue,在建立了Cookie之後,此Cookie資料還必須傳送到Client.讀取讀取Cookie的內容的內
26、容:當Client的Browser產生了一個Cookie物件之後,其它Server的網頁便可讀取其中的資料內容。而要取得Cookie的資料必須依照下面的步驟來完成:1.運用request物件取得客戶端包含所有Cookie物件的陣列。2.利用迴圈取出陣列中的各個Cookie,並比對索引值來取出所 要的Cookie物件。3.取出所要的Cookie後便可以取得該Cookie中的資料內容。11/10/202234JSP 2.0動態網頁技術設定Cookie的特性方法說明setMaxAge(int second)設定Cookie在second秒的時間內皆為有效getMaxAge()傳回Cookie的有效期
27、限方法說明setPath(String uri)設定能夠存取Cookie物件的網頁路徑為uri與其下的子目錄。getPath()傳回能夠存取Cookie物件的網頁路徑。設定設定Cookie的存在期限的存在期限:可以讓使用者下次開啟網頁時,伺服器端能取得同樣一個Cookie中的資料內容。有關設定與取得Cookie存在期限的方法如下:刪除刪除Cookie:刪除某一個客戶端的Cookie,必須使用sexMaxAge方法,並將Cookie的存在期限設為0 設定設定Cookie的有效路徑:的有效路徑:當Cookie產生之後,所有Server的網頁皆能存取其資料內容,對於存取網頁路徑範圍,能使用下列的方法
28、來設定與取得:11/10/202235JSP 2.0動態網頁技術設定Cookie的特性getPath/setPath 取得/設定Cookie適用的路徑。如果不指定路徑,Cookie將返回給目前頁面所在目錄及其子目錄下的所有頁面。這裡的方法可以用來設定一些更一般的條件。例如,someCookie.setPath(“/”),此時伺服器上的所有頁面都可以接收到該Cookie。getSecure/setSecure 取得/設定一個boolean值,該值表示是否Cookie只能通過加密的連接(即SSL)發送。getValue/setValue 取得/設定Cookie的值。如前所述,名字和值實際上是我們始
29、終關心的兩個方面。不過也有一些例外情況,比如把名字作為邏輯標記(也就是說,如果名字存在,則表示true)。11/10/202236JSP 2.0動態網頁技術practicehttp:/140.109.88.20/internal_chem/survey-table/sur-theme.php?sur_tid=1參考此網頁之項目參考此網頁之項目2,3,4,練習練習usingGetParameterValues(),可參考可參考P33P34範例修改範例修改.11/10/202237JSP 2.0動態網頁技術Homework(IV)HW3 due:2006/10/30學號學號_HW4.html/學號
30、學號_HW4.jsp (共共2個檔案個檔案)表單須包含輸入資料的檢查表單須包含輸入資料的檢查!作業上傳期限至作業上傳期限至2006/11/05 12:00 止止11/10/202238JSP 2.0動態網頁技術輸入資料的檢查輸入資料的檢查對於user輸入表單的資料,在進一步利用前,應該先進行檢查/篩選的動作,一方面防止user輸入錯誤的資料而導致系統錯誤,另一方面也可以確認user輸入的資料是否正確。在Client進行資料檢查11/10/202239JSP 2.0動態網頁技術DataCheck.htm11/10/202240JSP 2.0動態網頁技術11/10/202241JSP 2.0動態網
31、頁技術期末專題報告期末專題報告分組名單請於2006/11/24前上傳至網站1-2人一組,抽籤決定順序預定報告時間:2006/12/22,2006/12/29,2007/01/05,2007/01/12學號_final.txt 39123567 name 預定專題報告題目11/10/202242JSP 2.0動態網頁技術期中考試期中考試採上機實測,openbook分兩梯次進行第一梯次:2006/11/10(五)共16人第二梯次:2006/11/17(五)共17人題目當日公佈測驗時間:13:1015:1011/10/202243JSP 2.0動態網頁技術Any Question?11/10/202244