• 沒有找到結果。

JSP设计与开发 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "JSP设计与开发 - 万水书苑-出版资源网"

Copied!
32
0
0

加載中.... (立即查看全文)

全文

(1)

ኄ 5 ቦ

͘ភᡲᢎ

ಬޝ࿫ဈᄯēWeb App ՛ಾဎտّྚੋٲюԅēωဎտ੠ဈܜ׀ูdWeb App ᄯϦדྚੋ

ؕ႓ݦ௜ဈܜைௐԅ೴࡬ēဎဟ Web Server ԅqߒญ໿rēӲဈܜᘭऋ୶֟ѻྡྷّճ੶ᄵ Web

ᆇၗԅைௐ܊ēWeb Server ݖ҉सωֲݍྡྷّູ࿫ēӬᄍ܊ Web Server ݖญޚუّႛူୣ߬

ܚԅࢺܜժᘭऋ୶ēއάලྡྷّᘭऋ୶۳ࣙရၼұ֟ഢྡྷّ໭ԅைௐē׻๠୶ྙϢݖᄉԁ஍܊

०ّைௐᄍ޷ԅ॓ຂdၽտဈܜω໻׀ูԅெࣣຏēუّูඕဍน෌ѻē႘ྂರ Web Server

ޚᅞࢺܜԅ໰๯ē૱ծ੶ّைௐಾ׮೫ဟලྡྷဈܜᘭऋ୶ඔ߬ēუάಾݖܥٕᆖޏ೬༓ྑࠓࢅ

ԅูඕd

༰๽෻·Ⴣēઽટٴġ

 ॴࠓݖܥٕᆖԅ 4 ᄵШဈޏ೬d

 Ⴧไ Cookie ޏ೬d

 ௦ੋჇไ session ޏ೬d

 ೣ๱ session ԅಓ੡ᄻ୙d

  ࠄΓळК

CHERRYONE

ⱘ⌟䆩ਬᣛߎˈⱏᔩ㋏㒳ᑨ䆹㛑ᦤկϔϾ֓᥋ⱘ䗨ᕘˈ㛑໳䅽⫼᠋೼ⱏᔩ

ᯊخߎ䗝ᢽˈৢ㓁ⱏᔩབᵰ೼ৠϔϾᅶ᠋ッ⌣㾜఼Ϟˈ㋏㒳ᑨ㛑䅽ᅶ᠋Ⳉ᥹䆓䯂Ⳍ݇㔥义ˈܡ

䰸ݡ⃵ⱏᔩⱘ᪡԰ˈৠᯊᇍПࠡ⫼᠋⊼ݠֵᙃЁ䗝ᢽⱘ೑ᆊǃ䇁㿔дᛃ䖯㸠䆄ᔩˈ೼⫼᠋ⱘ䆓

䯂义䴶ϞᕫࠄⳌ݇ᰒ⼎DŽ

ᮄॳൟ೼ॳ᳝ࡳ㛑ⱘࠡᦤϟˈ䳔㽕ᬍ䖯ⱘࡳ㛑བϟ˖



䗮䖛ϔ⾡ᮍᓣ䆄ᔩ⫼᠋ֵᙃDŽ



䅽ৠϔϾᅶ᠋ッ䆓䯂ⱘ⫼᠋ݡ⃵ⱏᔩᯊⳈ᥹䖯ܹ㔥キDŽ



䆄ᔩ⫼᠋ⱘ䇁㿔дᛃˈ೼⫼᠋⌣㾜ⱘ义䴶Ёᰒ⼎DŽ

5

(2)

       %JCRVGT

  ͘ភᡲᢎእ̮

Ңᅶ᠋ッ⌣㾜఼থߎ䇋∖ᑊᕫࠄ᳡ࡵ఼ડᑨˈࠄ᳡ࡵ఼ЁᮁϢ䆹⌣㾜఼ⱘ䖲᥹៪⌣㾜఼݇

䯁ⱘ䗮䆃ܼ䖛⿟⿄ЎӮ䆱DŽӮ䆱ⱘᅲ⦄ᖙ乏ᓎゟ೼᳡ࡵ఼ֱᄬ⌣㾜఼ⱘĀ䆄ᖚāⱘ෎⸔ПϞˈ

䖭䳔㽕೼⌣㾜఼੠᳡ࡵ఼П䯈ᴹಲথ䗕⢊ᗕֵᙃ˗Ўњ䅽᳡ࡵ఼㛑໳䗑䏾⫼᠋⌣㾜఼ⱘ⢊ᗕˈ

ᦤ催䇋∖ঞડᑨⱘᬜ⥛ˈᡞֵᙃֱ⬭೼᳡ࡵ఼ッˈা೼⌣㾜఼੠᳡ࡵ఼П䯈Ӵ䗦ᷛ䆚ヺˈ䖭ህ

ᰃӮ䆱䎳䏾ⱘᅲ⦄ᮍḜDŽᤶহ䆱䇈ˈӮ䆱䎳䏾ህᰃᔧϔϾᅶ᠋೼ Web App ⱘ໮Ͼ义䴶䯈ߛᤶ

ᯊˈWeb Server Ӯֱᄬ䆹ᅶ᠋ⱘଃϔֵᙃDŽ

  ద࿄গ֗௄࿄গ

᳝⢊ᗕ˄Stateful˅੠᮴⢊ᗕ˄Stateless˅ᰃӫ໮ Internet ण䆂Ёᇍ᳡ࡵ఼ッ੠ᅶ᠋ッ⢊ᗕ

ⱘϸ⾡ϡৠ㸼⦄㉏ൟDŽ

᳝⢊ᗕӮ䆱㸼⼎೼ᅶ᠋ッ੠᳡ࡵ఼ッ䖲᥹ৢˈӮֱᣕϔ⾡ⳌৠϨᣕ㓁ᗻⱘ㘨ᴎ⢊ᗕˈᅶ᠋

ッ੠᳡ࡵ఼೼䖭⾡Ѧ㘨ϟᅠ៤৘乍᪡԰ˈᕙᴀ⃵Ӯ䆱ⱘ᪡԰㒧ᴳˈ᳡ࡵ఼݇䯁Ϣᅶ᠋ッⱘ䖲᥹DŽ

೼᳝⢊ᗕⱘӮ䆱ण䆂ᬃᣕϟˈ㢹໮Ͼᅶ᠋ッ੠᳡ࡵ఼䖯㸠䗮䆃ˈ᳡ࡵ఼Ӯ䆄ԣ↣Ͼᅶ᠋ッⱘֵ

ᙃˈᑊЎϡৠⱘᅶ᠋ֱᣕ䖭ѯᣕ㓁ᗻⱘ䖲᥹⢊ᗕⳈࠄӮ䆱㒧ᴳDŽᐌ⫼ⱘ Telnet ण䆂੠ FTP ण

䆂ഛሲѢ᳝⢊ᗕण䆂DŽ

᮴⢊ᗕӮ䆱߭㸼⼎ᅶ᠋ッᦤѸ䇋∖ᯊˈ᳡ࡵ఼ッᠡᓎゟ䖲᥹ᑊḍ᥂䇋∖ݙᆍડᑨˈԚᰃ᳡

ࡵ఼ッᑊϡӮ㓈ᣕ੠ᅶ᠋ッⱘ㘨ᴎ⢊ᗕˈϔ⃵䇋∖੠ϔ⃵ડᑨᵘ៤ϔϾ⣀ゟⱘџࡵ

[1]

ˈϔ⃵џ

ࡵ㒧ᴳПৢˈ᳡ࡵ఼֓ᢍএᅶ᠋ッⱘֵᙃˈՓᕫेՓৠϔϾᅶ᠋ッˈϡৠџࡵП䯈≵᳝⢊ᗕ㘨

㋏DŽJSP ᠔ձ䌪ⱘ HTTP ण䆂֓ᰃ᮴⢊ᗕण䆂DŽᔧ✊ˈᇍѢ᳡ࡵ఼㗠㿔ˈ᮴⢊ᗕण䆂໻໻ޣ䕏

њ᳡ࡵ఼ⱘ䋳䕑य़࡯ˈᰃᅲ䰙ৃ㸠ⱘˈ᠔ҹህ䳔㽕 JSP 䖭⾡᳡ࡵ఼ッ㛮ᴀ䗮䖛ᶤ⾡ᴎࠊᴹ㓈

ᣕ᳡ࡵ఼ッᇍᅶ᠋ッ⌣㾜఼ⱘĀ䆄ᖚāˈ䖭ህᰃӮ䆱䎳䏾DŽ

ϟ䴶䗮䖛ϔϾ䕗Ўᔶ䈵ⱘ՟ᄤᴹ䯤䗄Ӯ䆱䎳䏾ⱘ䞡㽕ᗻDŽᶤ݀ৌⱘ⾬к↣໽㽕᥹਀݀ৌ৘

㑻䚼䮼ⱘ⬉䆱ˈ↣Ͼ⬉䆱ⱘݙᆍ䛑ᕜ䞡㽕ˈԚ⬅Ѣ⬉䆱㐕໮ˈ䖭ৡ⾬кⱘ䆄ᗻ⃴Շˈߎ⦄њᬒ

ϟ⬉䆱ህᖬ䆄Пࠡ⬉䆱ݙᆍⱘᚙމˈ䖭㒭݀ৌ䗴៤њ䴲ᐌ໻ⱘᤳ༅ˈ㄀ϔৡ⾬к㹿㾷䲛DŽ㄀Ѡ

ৡ⾬к೼Ꮉ԰ⱘᯊ׭ޚ໛њᕜ໮व⠛ˈ↣ᓴव⠛ᣝ৘䚼䮼㓪োDŽ↣᥹ࠄϔϾ⬉䆱ˈ㄀Ѡৡ⾬к

ህᡞᠧ⬉䆱ⱘ䚼䮼ᣝ✻㓪ো䗝ߎᇍᑨⱘव⠛ˈᑊᡞݙᆍ䆄ᔩ೼व⠛ϞDŽ⬅ℸϔᴹˈ݀ৌ↣໽ⱘ

⬉䆱ݙᆍ䛑䆄ᔩњϟᴹˈ䖭ৡ⾬к㛑໳ޚ⹂ഄ৥݀ৌ乚ᇐ∛᡹৘䚼䮼ⱘֵᙃDŽ

Ꮰᳯ䖭Ͼ՟ᄤᇍ䇏㗙᳝ϔᅮⱘਃ⼎DŽ

⊼䞞˖[1]џࡵ˖ᠻ㸠䖛⿟ЁⱘϔϾ䘏䕥ऩԡˈ⬅ϔϾ᳝䰤ⱘ᪡԰ᑣ߫ᵘ៤DŽџࡵ໘⧚㹿

ᑓ⊯ഄᑨ⫼Ѣ᭄᥂ᑧ੠᪡԰㋏㒳乚ඳDŽ

(3)

       %JCRVGT

   መ͘ភᡲᢎᄊவर

᳡ࡵ఼ッᡔᴃϔ㠀䗮䖛ϸ⾡ᮍᓣᴹᅲ⦄Ӯ䆱䎳䏾ˈϔ⾡ᰃ᮶䅽᳡ࡵ఼೼↣ϾડᑨЁ䖨ಲϢ

ᔧࠡ⫼᠋Ⳍ݇ⱘ᠔᳝ᅶ᠋ッ⢊ᗕֵᙃˈজ䅽⌣㾜఼ᇚ᥹ᬊࠄⱘֵᙃ԰Ўϟϔ⃵䇋∖Ёⱘϔ䚼ߚ

ݙᆍݡ⃵ᦤѸ㒭᳡ࡵ఼˗঺ϔ⾡ᰃ೼᳡ࡵ఼ッЁֱᄬᅶ᠋ッ⢊ᗕˈҙҙᡞϔϾଃϔⱘᷛ䆚ヺ䰘

ࡴ೼ડᑨЁথ㒭ᅶ᠋ッˈ⌣㾜఼೼ϟϔ⃵䇋∖Ёᇚ㒻㓁ᦤѸ䆹ᷛ䆚ヺˈ᳡ࡵ఼䗮䖛᥹ᬊ䆹ᷛ䆚

ヺᴹᅮԡֱᄬ೼᳡ࡵ఼ッⱘ⫼᠋⢊ᗕֵᙃDŽ

⬅Ѣ೼⌣㾜఼੠᳡ࡵ఼П䯈ᴹಲӴ䗦᠔᳝ⱘ⢊ᗕֵᙃᬜ⥛䴲ᐌԢϟˈ᠔ҹབҞ໻䚼ߚ᳡ࡵ

఼ッᡔᴃ䛑䞛⫼ᇚֵᙃֱᄬ೼᳡ࡵ఼Ϟˈা೼⌣㾜఼੠᳡ࡵ఼П䯈Ӵ䗦ᷛ䆚ヺⱘ㄀Ѡ⾡ᮍ⊩DŽ

ᴹ㞾ϔϾᅶ᠋ッ⌣㾜఼ⱘ᠔᳝䇋∖ഛࣙ৿㹿᳡ࡵ఼ッ䌟ќᑊሲѢৠϔϾӮ䆱ⱘଃϔᷛ䆚ヺˈজ

⿄ЎӮ䆱 IDˈ᳡ࡵ఼ḍ᥂Ӯ䆱 ID ᴹ䎳䏾ϢᇍᑨӮ䆱Ⳍ݇㘨ⱘ᠔ֵ᳝ᙃDŽ

Ӯ䆱䎳䏾ᡔᴃˈϔ㠀⫼ϟ䴶 4 ⾡ᮍᓣᅲ⦄˖



URL

䞡ݭ˄URL Rewriting˅



䱤㮣㸼ऩඳ˄Hidden Form Field˅



ᣕЙᗻ Cookies˄Persistent Cookies˅



Servlet

ⱘ HttpSession ᥹ষ៪ JSP ⱘ session ᇍ䈵

URL

䞡ݭᰃᡞӮ䆱 ID 䰘ࡴ೼ JSP 义᠔߯ᓎⱘ URL ЁˈेᡞӮ䆱 ID ԰Ў乱໪ⱘ䇋∖៪ડ

ᑨখ᭄⏏ࡴࠄ URL ሒ䚼DŽ

ϔϾ䰘ࡴњӮ䆱 ID ⱘ URL ᔶᓣབϟ˖

http://localhost:8084/Chapter5d/lesson5d1.jsp;jsessionid=E44F6CAE1097C822580B5F0DAD4CF9D1

Ā:āৢⱘ jsessionid ֓ᰃӮ䆱 ID ⱘখ᭄ৡˈ㗠Ā=āৢ䴶ⱘؐ߭ᰃ᳡ࡵ఼ߚ䜡ⱘӮ䆱 IDˈ

jsessionid

ᰃ Apache Tomcat ᳡ࡵ఼ᇍӮ䆱 ID ⱘݭ⊩ˈϡৠⱘ᳡ࡵ఼ᇍӮ䆱 ID ᳝ϡৠⱘݭ⊩ˈ

ᅗӀ㒳⿄ sessionid ៪Ӯ䆱 IDDŽ

᳡ࡵ఼᥹ᬊࠄՓ⫼ URL 䞡ݭᮍᓣ䖯㸠ᇕ㺙ⱘ䇋∖ֵᙃᯊˈӮҢ URI ЁᦤপߎӮ䆱 IDˈ

ᑊᡞ䆹䇋∖੠ⳌᑨⱘӮ䆱݇㘨䍋ᴹDŽJSP ᡔᴃЁ䗮䖛Փ⫼ response ᇍ䈵Ёⱘ encodeURL()ᮍ⊩

៪ encodeRedirectURL()ᮍ⊩ᴹᅲ⦄ URL 䞡ݭDŽ

՟ 5-1 䗮䖛 URL 䞡ݭֱᄬ⫼᠋䕧ܹDŽ

lesson5d1.jsp

ᅲ⦄ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>lesson5d1</title>

</head> <body>

(4)

       %JCRVGT <h2>URL Rewriting</h2> <form> <table border="1"> <thead> <tr>

<th colspan="2"><label for="encoded">encoded link</label></th> </tr>

</thead> <tbody> <tr>

<td>User Name:&nbsp;&nbsp;&nbsp;</td>

<td><input type="text" name="username" value="" style="width:200px"/></td> </tr>

<tr>

<td>Password:</td>

<td><input type="password" name="password" value="" style="width:200px"/></td> </tr>

</tbody> </table>

<input type="submit" value="SUBMIT" name="submit" /> </form>

<%

String action = request.getParameter("submit"); String username = request.getParameter("username"); String password = request.getParameter("password");

String url = "lesson5d1.jsp?username=" + username + "&password=" + password; if (action != null) { url = response.encodeRedirectURL(url); out.println(url); response.sendRedirect(url); } %> <hr/> <table border="1"> <thead> <tr> <th style="width:300px" align="left">

SessionId is: <%=request.getRequestedSessionId()%> </th>

</tr> </thead> <tbody>

(5)

       %JCRVGT <tr>

<td>User Name is: <%=request.getParameter("username")%></td> </tr>

<tr>

<td>Password is: <%=request.getParameter("password")%></td> </tr> </tbody> </table> </body> </html>

义䴶ᠻ㸠㒧ᵰབ೒ 5-1 ᠔⼎DŽ

೒ 5-1 ᏺ᳝Ӯ䆱 ID ⱘ URL Rewriting ᠻ㸠㒧ᵰ

՟ 5-1 ЁˈՓ⫼ response ᇍ䈵ⱘ encodeRedirectURL()ᮍ⊩ᅲ⦄ᇍ䏇䕀义䴶 URL ⱘᇕ㺙ˈ

ৠᯊᡞӴ䗦ⱘখ᭄ username ੠ password 䗮䖛 GET ᮍᓣ䰘ࡴ೼义䴶 URL Пৢ˗⬅Ѣ䗮䖛᳡ࡵ

఼ડᑨᇍ䈵ᇍ URL 䖯㸠䞡ݭˈ⫳៤њӮ䆱 IDˈ೼义䴶䏇䕀Пৢˈ䖭ϾӮ䆱 ID Ӯথ䗕ࠄᅶ᠋

ッ⌣㾜఼Ϟˈᑊ೼ϟϔ⃵ⱘᅶ᠋ッ䇋∖ֵᙃЁ㹿䰘ࡴˈ⬅᳡ࡵ఼᥹ᬊᑊ䆚߿ˈ⬅ℸᴹֱᣕ᳡ࡵ

఼੠ᇍᑨᅶ᠋ッП䯈ⱘ⢊ᗕDŽ

Ԛᰃ URL Rewriting Ӯᡞ᭄᥂ᲈ䴆೼⌣㾜఼ⱘഄഔᷣϞˈՓᕫ㔥义ⱘᅝܼᗻᄬ೼䕗໻ⱘ

ⓣ⋲DŽ

䱤㮣㸼ऩඳ䗮䖛<input>ᷛㅒⱘ hidden ሲᗻᡞ䳔㽕Ӵ䗕ࠄ᳡ࡵ఼ⱘ᭄᥂೼⫼᠋᮴⊩㾝ᆳⱘ

ᚙމϟᄬܹ request 䇋∖ᇍ䈵ЁϔᑊᦤѸDŽ⬅Ѣ hidden ሲᗻ䅽ֱᄬ݊Ёⱘ᭄᥂ϡ೼义䴶Ϟᰒ⼎ˈ

ᑊ䗮䖛 request ᦤѸˈϡӮڣ URL 䞡ݭ䙷ḋᡞӮ䆱᭄᥂ܼᲈ䴆೼ URL Ϟˈ݋᳝ϔᅮⱘᅝܼᗻ˗

䱤㮣㸼ऩඳӴ䕧᭄᥂ⱘᮍᓣ੠<input>ᷛㅒⱘ text ᭛ᴀ෎ᴀϔ㟈ˈՓ⫼ᮍ֓DŽԚᰃ䱤㮣㸼ऩඳ

ሲѢ HTML ܗ㋴ˈ೼ JSP Ё㹿䆚߿Ў῵ᵓ᭛ᴀˈ೼⑤ⷕЁᑊϡӮ㹿䱤㮣ˈ᠔ҹা㽕⫼᠋ᶹⳟ

㸼ऩ义ⱘ⑤᭛ӊˈህ㛑ޚ⹂ഄᡒࠄֱᄬ೼ hidden ሲᗻЁⱘ᭄᥂ˈҢ㗠䗴៤ᅝܼ䱤ᙷDŽ

(6)

       %JCRVGT

՟ 5-2 ⫼䱤㮣㸼ऩඳӴ䗦⫼᠋ idDŽ

ㅔ㽕ߚᵤ˖䗮䖛 NetBeans ৥㸼ऩЁᦦܹ䱤㮣㸼ऩඳ䴲ᐌᮍ֓ˈা䳔㽕೼ሣᐩে䖍ⱘĀ㒘

ӊā䴶ᵓЁ䗝ᢽĀHTML にԧāЁⱘĀ᭛ᴀ䕧ܹāˈĀ㒘ӊā䴶ᵓৃҹ䗮䖛Āにষā㦰ऩᠧᓔˈ

៪㗙Փ⫼ᖿ᥋䬂 Ctrl+Shift+8 ᠧᓔDŽ䱤㮣㸼ऩඳⱘՓ⫼ᮍᓣབ೒ 5-2 ᠔⼎DŽ

೒ 5-2 䗮䖛 NetBeans ᦦܹ䱤㮣㸼ऩඳ

ϟ䴶㒭ߎᅲ⦄ҷⷕDŽ

lesson5d2.jsp

⫼᠋䕧ܹ⬠䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

</head>

<%!String uid;%> <%!

public void genId(){

int tmpid=new java.util.Random().nextInt(); uid="u" + tmpid;

} %> <body>

<form action="lesson5d2_show.jsp" method="POST"> <table border="1">

<tbody> <tr>

<%genId();%>

(7)

       %JCRVGT <td>User Name: </td>

<td><input type="text" name="username" value="" /></td> </tr>

<tr>

<td>Password: </td>

<td><input type="password" name="password" value="" /></td> </tr>

<tr>

<td colspan="2">

<input type="submit" value="SUBMIT" name="submit" /><input type="reset" value="RESET" name="reset" /> </td> </tr> </tbody> </table> </form> </body> </html>

lesson5d2_show.jsp

ᰒ⼎⫼᠋ֵᙃ义䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

</head> <body>

<h1>Hello <%=request.getParameter("username")%>...</h1>

Ur user id is: <%String uid=request.getParameter("userid");%><%=uid%><br/> Ur password is:<%=request.getParameter("password")%><br/>

</body> </html>

՟ 5-2 ⱘ䖤㸠㒧ᵰབ೒ 5-3 ᠔⼎˗䕧ܹ⫼᠋ৡ੠ᆚⷕᑊᦤѸৢˈ㒧ᵰབ೒ 5-4 ᠔⼎DŽ

(8)

      

%JCRVGT

೼೒ 5-3 Ёˈᑊ≵᳝ⳟࠄ䗮䖛<input type="hidden" name="userid" value="<%=uid%>"/>೼

⫼᠋䕧ܹ⬠䴶߯ᓎⱘ䱤㮣ඳˈ䆕ᯢ䱤㮣㸼ऩඳⳌ䕗 URL 䞡ݭᅠܼᲈ䴆䇋∖ֵᙃᅝܼᗻᕫࠄњ

ϔᅮⱘᬍ୘DŽԚᅶ᠋ッ⌣㾜఼㛑໳ᡞ⫼᠋䕧ܹ⬠䴶ⱘ HTML ⑤ⷕᰒ⼎ߎᴹˈ䗴៤њ䱤㮣ඳ᭄

᥂ⱘᲈ䴆ˈབ೒ 5-5 ᠔⼎DŽ

೒ 5-5 ⫼᠋䕧ܹ⬠䴶ⱘ HTML ⑤ⷕᲈ䴆њ䱤㮣ඳⱘ᭄᥂

ᣕЙᗻ Cookies ⱘ䖤㸠ᮍᓣϢ URL 䞡ݭ੠䱤㮣㸼ऩඳϡሑⳌৠDŽCookie ᳔ܜᰃ⬅㔥᱃

˄Netscape˅݀ৌᓔথˈ䗮䖛Āৡ⿄āǃĀؐāᇍ⿄ⱘᔶᓣᇚӮ䆱᭄᥂ֱᄬ೼ᅶ᠋ッⳂᔩϟϔϾ

ᕜᇣⱘ᭛ᴀ᭛ӊЁDŽCookie 㹿 Web Server ԰Ў HTTP ડᑨ༈ᷛⱘϔᇣ䚼ߚথ䗕㒭ℷ䆓䯂ᅗⱘ

ᅶ᠋ッ⌣㾜఼ˈ✊ৢ⬅ᅶ᠋ッ⌣㾜఼ᇚ༈ᷛЁ᳝݇ Cookie ⱘֵᙃ⫳៤ϔϾ᭛ᴀ᭛ӊˈᑊֱᄬ

䍋ᴹ˗ᔧ⌣㾜఼ݡ⃵䆓䯂䆹᳡ࡵ఼ᯊˈᇍᑨⱘ Cookie ֓Ӯ䱣ⴔ䇋∖ॳḋᦤѸ㒭᳡ࡵ఼ˈ䅽᳡

ࡵ఼䇏প Cookie ЁⱘĀৡ⿄āǃĀؐāֵᙃᴹ⹂䅸⫼᠋DŽ

ᣕЙᗻ Cookies ⱘ᳔໻Ӭ࢓ᰃ䖭ѯ Cookie ֱᄬ೼ᅶ᠋ッⱘ⹀ⲬϞˈӮ䆱㒧ᴳৢˈ⫮㟇ᅶ

᠋ッ䅵ㅫᴎ݇䯁៪䞡ਃПৢӮ䆱᭄᥂ҡ✊ֱ⬭DŽ䖭Փᕫ Cookie ೼᳡ࡵ఼㔥キ੠ᅶ᠋ッ⌣㾜఼

П䯈ᨁᓎњϔᴵᖿ᥋䗮䘧ˈ೼ᅝܼ㽕∖ϡ催ⱘഎড়ˈCookie 㛑ᅲ⦄䇌བ䙓ܡ⫼᠋ݡ⃵䕧ܹ⫼

᠋ৡ੠ᆚⷕⱘᚙމϟ䖯ܹ᳒㒣⌣㾜䖛ⱘキ⚍ˈᦤ催⫼᠋੠᳡ࡵ఼㔥キП䯈ⱘ䆓䯂ᬜ⥛DŽ

Cookie

ϔ㠀䗮䖛ৡᄫǃؐǃ䖛ᳳᯊ䯈ǃ䏃ᕘ੠ඳㄝሲᗻᴹֱᄬ⫼᠋ֵᙃDŽ䏃ᕘϢඳϔ䍋

ᵘ៤ Cookie ⱘ԰⫼㣗ೈ˗䖛ᳳᯊ䯈咬䅸Ў-1˄s˅ˈ㸼⼎䆹 Cookie ⱘ⫳ᄬᳳЎ⌣㾜఼Ϣ᳡ࡵ఼

ⱘӮ䆱ᳳ䯈ˈ݇䯁⌣㾜఼にষˈCookie ህ⍜༅DŽ䖭⾡⫳ੑ਼ᳳЎ⌣㾜఼Ӯ䆱ᳳⱘ Cookie 㹿⿄

ЎЈᯊ Cookies ៪Ӯ䆱 CookiesDŽ

ᣕЙᗻ Cookies ⱘӬ࢓г䗴៤њᅗⱘᅝܼ䱤ᙷˈ⬅ѢᣕЙᗻ Cookies ֱᄬ೼ᅶ᠋ッ⹀ⲬϞˈ

བᵰ೼ϔৄ݀݅എড়ⱘ䅵ㅫᴎϞՓ⫼ Cookiesˈᕜ໻޴⥛Ӯߎ⦄ϡৠᯊ䯈↉ⱘϡৠ⫼᠋䆓䯂ৠ

ϔキ⚍ⱘᚙމˈ㗠䖭ᇐ㟈ৢᴹⱘ䆓䯂㗙ৃҹϡ⫼䬂ܹ⫼᠋ৡ੠ᆚⷕ֓ৃҹ೼䖭Ͼキ⚍Ϟѿ⫼੠

Пࠡⱘ䆓䯂㗙ৠḋⱘᴗ߽੠ϾҎ䆒㕂ˈ಴Ў Cookie ᑊϡӮऎߚ⫼᠋ˈᅗাӮḍ᥂㽕䆓䯂ⱘ᳡

(9)

       %JCRVGT

ࡵ఼キ⚍䗝ᢽᇍᑨⱘ Cookie ᑊথ䗕䇋∖ˈ㗠᳡ࡵ఼キ⚍гা䗮䖛᥹ᬊࠄⱘ Cookie ᴹ⹂䅸䆓䯂

㗙ⱘֵᙃˈ䖭֓ՓᕫПࠡ⫼᠋ⱘϾҎֵᙃᅠܼᲱܝDŽ᠔ҹˈ⡍ᅮഎড়ⱘ䅵ㅫᴎৃҹ䗮䖛⌣㾜఼

ⱘ䆒㕂݇䯁 Cookie ᴹֱ䆕ϾҎ䱤⾕ⱘᅝܼᗻDŽ

ϟ䴶䗮䖛ϔϾᔶ䈵ⱘ՟ᄤᴹ䯤䗄 Cookie ᅲ⦄Ӯ䆱䎳䏾ⱘӬ࢓੠ৃ㛑ߎ⦄ⱘ䯂乬DŽ

ϔᆊ੪ଵᑫ᳝ୱ 5 ᵃ੪ଵܡ䌍䌴䗕ϔᵃ੪ଵⱘӬᚴˈ✊㗠ϔ⃵ᗻ⍜䌍 5 ᵃ੪ଵⱘᴎӮᖂТ

݊ᖂˈ䖭ᯊህ䳔㽕ᶤ⾡ᮍᓣᴹ䆄ᔩᶤԡ乒ᅶⱘ⍜䌍᭄䞣DŽ䆹੪ଵᑫՓ⫼Ӯਬवⱘᮍᓣᴹ䆄ᔩ乒

ᅶ᠔⍜䌍ⱘ੪ଵ᭄䞣ˈ೼থ㒭乒ᅶⱘव⠛Ϟ䆄ᔩⴔ乒ᅶⱘྦྷৡǃ⍜䌍ⱘ᭄䞣ঞव⠛ⱘ᳝ᬜᳳ䰤DŽ

↣⃵⍜䌍ᯊˈབᵰ乒ᅶߎ⼎䖭ᓴव⠛ˈ੪ଵᑫⱘᎹ԰ҎਬӮᡞℸ⃵⍜䌍Ϣҹࠡ៪ҹৢⱘ⍜䌍Ⳍ

㘨㋏䍋ᴹˈ䖒ࠄ 5 ᵃˈ߭ܡ䌍䌴䗕ϔᵃDŽ䖭⾡ᡞव⠛⬭೼乒ᅶ䑿Ϟⱘخ⊩ህᰃ೼ᅶ᠋ッֱᄬ

Cookie

ˈ׳ℸֱᣕ⢊ᗕDŽ

Ϟ䴶䖭⾡خ⊩ⱘӬ࢓੠ᓞッϔⳂњ✊ˈӬ࢓ᰃা㽕乒ᅶߎ⼎䆹੪ଵᑫⱘӮਬवˈᑫਬḍ᥂

व⠛Ϟ䆄ᔩⱘ᭄䞣ᴹ߸ᮁᰃ৺ܡ䌍䌴䗕ϔᵃ੪ଵ˗ᓞッᰃ⬅Ѣ೼ᅶ᠋䑿Ϟⱘव⠛ᆍᯧ䘫༅ˈᑊ

ϨӮ㹿߿᳝⫼ᖗⱘ乒ᅶׂᬍˈӮ䗴៤ঠᮍⱘᤳ༅DŽ

ϟ䴶ᴹⷨおϔϟ Web Server ᅲ⦄ Cookie ⱘᭈϾℹ偸DŽ

㄀ϔℹ˖߯ᓎ CookieDŽ

Servlet

ᦤկᇍ Cookie ⱘᬃᣕˈ䗮䖛ᇐܹ javax.servlet.http.Cookie ㉏ˈᑊᇍ݊ᵘ䗴ᮍ⊩

Cookie(String name,String value)

䖯㸠߱ྟ࣪DŽ䇁⊩བϟ˖

Cookie acookie=new Cookie("Key","Value");

⊼ᛣ˖ၽ Cookie ԅٲႏֺ֥ᄯēᆫѺฉ࠿٤ഓԅ Cookie ͑·Ϣᄆћၽ०ّϵ೴࢈ͧۃ

q@rcq:rcqĢrcq?rcq"rcq/rcq[rcq]rcq(rcq)rۤq=rԉඋ೙ᆓ׸ēӬၽࠀ໭ԅ RFC

2109

ำӶᄥՇԅ͑·ᄯׂࣚॴຫᄥēนͬຢ୯ߎēՠრܮಾ࠰२Υੇರဈუ໔උ೙ᆓ׸ēල

ನ Cookie ԅ੠ᆓၽҗߙᄍ܊ಾϢટ༉؟ԅēއ Cookie Ϣᄆћᄷ੡੠d

㄀Ѡℹ˖䆒㕂 CookieDŽ

Cookie API

䗮䖛㉏Ԑ JavaBean Ё setter ⱘᮍᓣᇍ৘⾡ሲᗻ䖯㸠䌟ؐˈCookie ᐌ⫼䆒㕂ሲ

ᗻⱘᮍ⊩བ㸼 5-1 ᠔⼎DŽ

㸼 5-1 䆒㕂 Cookie ሲᗻⱘᮍ⊩

ᮍ⊩ৡ ᦣ䗄

setComment(String purpose) 䆒㕂 Cookie ⱘ⊼䞞ˈ⊼䞞㸼⼎ Cookie ⱘ䆒䅵ᛣ೒

setDomain(String pattern) 䆒㕂 Cookie ⱘඳৡˈ䳔㽕䎼ඳ݅ѿ Cookie ᯊՓ⫼

setMaxAge(int expiry) ҹ⾦Ўऩԡˈ䆒㕂 Cookie ⱘ䖛ᳳᯊ䯈

setPath(String uri) ᣛᅮᅶ᠋ッᑨ䖨ಲⱘ Cookie 䏃ᕘ

setSecure(boolean flag) ᣛߎ⌣㾜఼ᑨՓ⫼ⱘᅝܼण䆂ˈབ HTTPS ៪ SSL

setValue(String newValue) Cookie߯ᓎৢЎ݊䆒㕂ϔϾᮄⱘؐ

(10)

      

%JCRVGT

㄀ϝℹ˖থ䗕 CookieDŽ

JSP

䗮䖛 response 䱤ᓣᇍ䈵䇗⫼ addCookie(Cookie acookie)ᮍ⊩ᇚ߯ᓎདⱘ Cookie ᇍ䈵ᦦ

ܹࠄ HTTP ડᑨⱘ Set-Cookie ༈ᷛЁথ䗕㒭ᅶ᠋ッ⌣㾜఼DŽ؛䆒 Cookie ᇍ䈵ৡЎ aCoˈথ䗕

Cookie

ⱘҷⷕབϟ˖

response.addCookei(aCo);

㄀ಯℹ˖䇏প CookieDŽ

ᅶ᠋ッ⌣㾜఼ݡ⃵䆓䯂᳡ࡵ఼ᯊӮᡞ Cookie ᇍ䈵䰘ࡴ೼䇋∖ЁᦤѸࠄ᳡ࡵ఼ˈ᳡ࡵ఼Փ

⫼ request 䱤ᓣᇍ䈵䇗⫼ getCookies()ᮍ⊩䇏ܹ Cookie ᑊ㦋প݊Ⳍ݇ሲᗻDŽCookie ᐌ⫼㦋পሲ

ᗻⱘᮍ⊩੠ JavaBean ⱘ getter ᮍ⊩㉏Ԑˈབ㸼 5-2 ᠔⼎DŽ

㸼 5-2 㦋প Cookie ሲᗻⱘᮍ⊩

䖨ಲ㉏ൟ ᮍ⊩ৡ ᦣ䗄

String getComment() 䖨ಲ Cookie Ёⱘ⊼䞞ˈབᵰ≵᳝⊼䞞ⱘ䆱ᇚ䖨ಲぎؐ

String getDomain() 䖨ಲᔧࠡ Cookie ⱘඳৡ

int getMaxAge() 䖨ಲ Cookie ⱘՓ⫼ᳳ䰤ˈҹ⾦Ўऩԡ

String getName() 䖨ಲ Cookie ⱘৡᄫ

String getPath() 䖨ಲ Cookie ⱘ䏃ᕘˈབᵰϡᣛᅮ䏃ᕘˈCookie ᇚ䖨ಲ㒭ᔧࠡ义䴶᠔೼Ⳃ

ᔩঞ݊ᄤⳂᔩϟⱘ᠔᳝义䴶

boolean getSecure() བᵰ⌣㾜఼䗮䖛ᅝܼण䆂থ䗕 Cookie ᇚ䖨ಲ true ؐˈབᵰ⌣㾜఼Փ⫼ᷛ

ޚण䆂߭䖨ಲ false ؐ

String getValue() 䖨ಲ Cookie ⱘؐ

int getVersion() 䖨ಲ Cookie ᠔䙉Ңⱘण䆂⠜ᴀ

㄀Ѩℹ˖ߴ䰸 CookieDŽ

Cookie

㉏Ёᑊ᮴ϧ䮼ߴ䰸 Cookie ᇍ䈵ⱘ APIˈߴ䰸ϡݡՓ⫼ⱘ Cookie া䳔㽕ᇚᮄᓎⱘ

Cookie

ᇍ䈵ⱘ name ሲᗻ䆒㕂੠䳔㽕ߴ䰸ⱘ Cookie ᇍ䈵ৠৡˈvalue ሲᗻ䆒Ў nullˈᑊᇚ݊ᄬ

೼ᯊ䯈䆒ЎĀ0āेৃˈे setMaxAge(0)DŽ؛䆒䳔㽕ߴ䰸ⱘॳ Cookie ᇍ䈵ৡЎ userˈߴ䰸 Cookie

ᇍ䈵ⱘҷⷕབϟ˖

Cookie delCo=new Cookie("user",null); delCo.setMaxAge(0);

response.addCookie(delCo);

ᑊϡᰃ᠔᳝ⱘ Cookie ㉏ⱘᇍ䈵䛑ᰃᣕЙᗻഄֱᄬ೼ᅶ᠋ッⱘ⹀ⲬⳂᔩЁˈ䖬᳝ϔ㉏

Cookie

ᇍ䈵⿄ЎЈᯊ CookieDŽЈᯊ Cookie ೼⌣㾜఼੠᳡ࡵ఼ѸѦᯊֱᄬ೼⌣㾜఼ⱘ㓧ᄬЁˈ

ᔧ⌣㾜఼݇䯁ᯊˈЈᯊ Cookie ֓䱣П⍜༅DŽ

(11)

       %JCRVGT

ㅔ㽕ߚᵤ˖

˄1˅⫼᠋೼ⱏᔩ义䴶˄lesson5d3.jsp˅䕧ܹ⫼᠋ৡ੠ᆚⷕৢऩߏĀᦤѸāᣝ䪂䖯ܹキ⚍ⱘ

⹂䅸义䴶˄lesson5d3_recCo.jsp˅DŽ

˄2˅೼⹂䅸义䴶Ё䳔㽕߸ᮁ⫼᠋ⱏᔩᯊᰃ৺䗝ᢽњĀCookie ֱᄬ 10 ໽ā໡䗝Ḛˈབᵰ

䗝ᢽњˈ߭䳔㽕߯ᓎ Cookie ᇍ䈵ˈCookie ᇍ䈵Ёֱᄬ⫼᠋ֵᙃˈᑊ䆒㕂 Cookie ᇍ䈵ⱘ䖛ᳳᯊ

䯈Ў 3600*240 ⾦ˈ䆒㕂 Cookie ᇍ䈵ⱘ䏃ᕘЎĀ\āˈ㸼⼎ᔧࠡ Web ᑨ⫼ⱘḍⳂᔩ˗བᵰ᳾䗝ᢽˈ

߭䆒㕂 Cookie ᇍ䈵ⱘ䖛ᳳᯊ䯈Ў 0 ⾦ˈߴ䰸 Cookie ᇍ䈵DŽ

˄3˅೼⹂䅸义䴶Ϟ䆒㕂ϔϾ䏇䕀䫒᥹ˈ䖨ಲⱏᔩ⬠䴶DŽℸᯊ䳔㽕೼ⱏᔩ⬠䴶Ϟᅲ⦄ Cookie

ⱘ䇏পˈ✊ৢᡞ Cookie Ёⱘ⫼᠋ֵᙃপߎˈ䞡ᮄ฿ܹ⫼᠋ৡ੠ᆚⷕⱘ䕧ܹḚЁDŽ

ϟ䴶㒭ߎᅲ⦄ҷⷕDŽ

lesson5d3.jsp

⫼᠋ⱏᔩ⬠䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <%!boolean blNew = true;%>

<%

Cookie[] cookies = request.getCookies(); if (cookies != null) {

for (Cookie aCo : cookies) {

if (aCo.getName().equals("user")) {

String usernameByCo = aCo.getValue().split("-")[0]; String passwordByCo = aCo.getValue().split("-")[1]; request.setAttribute("username", usernameByCo); request.setAttribute("password", passwordByCo); blNew = false; break; } } } %> <!DOCTYPE html> <html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

</head> <body>

<form action="lesson5d3_recCok.jsp" method="POST"> <table border="1">

<tbody> <tr>

(12)

      

%JCRVGT

<td><input type="text" name="username" value="${username}" /></td> </tr>

<tr>

<td>Password: </td>

<td><input type="password" name="password" value="${password}" /></td> </tr>

<tr>

<td colspan="2">

Cookie is Remembered 10 days<input type="checkbox" name="isMem" value="ON" /> </td>

</tr> <tr>

<td><input type="reset" value="RESET" name="reset" /></td> <td><input type="submit" value="SUBMIT" name="submit" /></td> </tr> </tbody> </table> </form> </body> <% String username = ""; if(blNew==false){ username = request.getAttribute("username").toString(); out.println("<h1>Welcome Back " + username + "</h1>"); }

%> </html>

⫼᠋ֵᙃ⹂䅸义䴶 lesson5d3_recCo.jsp ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <%

String ischeck = request.getParameter("isMem"); String username = request.getParameter("username"); String password = request.getParameter("password"); if (ischeck != null && ischeck.equals("ON")) { //㸼⼎⫼᠋ऩߏњ remember ᣝ䪂 //߯ᓎ Cookie

Cookie userCo = new Cookie("user", username + "-" + password); userCo.setMaxAge(60 * 60 * 24 * 10);

userCo.setPath("/");

response.addCookie(userCo); } else {

(13)

       %JCRVGT deleteNewCookie.setMaxAge(0); //ߴ䰸䆹 Cookie deleteNewCookie.setPath("/"); response.addCookie(deleteNewCookie); } %> <!DOCTYPE html> <html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

</head> <body>

<h1>Hello <%=username%></h1> <h2>Welcome to out page,thank u !</h2>

<a href="lesson5d3.jsp">Login Again...</a> </body> </html>

՟ 5-3 ⫼᠋ⱏᔩ⬠䴶ⱘ䖤㸠㒧ᵰབ೒ 5-6 ᠔⼎˗ᦤѸПৢˈ⫼᠋ֵᙃ⹂䅸义䴶བ೒ 5-7

᠔⼎DŽ

೒ 5-6 ⫼᠋㄀ϔ⃵䕧ܹ ೒ 5-7 ⫼᠋⹂䅸义䴶

⚍ߏ䫒᥹䖨ಲⱏᔩ义䴶ˈ៪ݡ⃵䖤㸠⫼᠋ⱏ

ᔩ⬠䴶ˈ㒧ᵰབ೒ 5-8 ᠔⼎DŽ

HttpSession

Ӯ䆱ᴎࠊ㵡ড়њ Cookie ੠ URL

䞡ݭᡔᴃDŽᔧᅶ᠋ッܕ䆌Փ⫼ Cookie ᯊˈ

HttpSession

ӮՓ⫼ Cookie 䖯㸠Ӯ䆱䎳䏾DŽ䗮䖛

request

ᇍ䈵䇗⫼ getCookies()ᮍ⊩Ӯ䖨ಲϔϾ

Cookie

᭄㒘ˈCookie[0]Ёⱘ name ሲᗻؐेЎ

"JSESSIONID"

ˈ⬅ℸᴹ߸ᮁᴹ㞾ᅶ᠋ッ⌣㾜఼

ⱘ䇋∖ᰃ৺ЎৠϔϾҎDŽᔧᅶ᠋ッϡᬃᣕ Cookie

ᯊˈHttpSession Ӯ߽⫼ response ᇍ䈵ⱘ encodeURL()៪ encodeRedirectURL()ᮍ⊩ˈे URL 䞡

ݭᴹ䰘ࡴ"JSESSIONID"ᅲ⦄Ӯ䆱䎳䏾DŽؐᕫᑚᑌⱘᰃˈHttpSession ᥹ষᇕ㺙њ໘⧚ Cookie ៪

೒ 5-8 䗮䖛 Cookie Ẕ㋶ˈ⫼᠋ֵᙃⳈ᥹ᰒ⼎

(14)

      

%JCRVGT

URL

䞡ݭⱘ㒚㡖䯂乬ˈᑊЎᓔথ㗙ᦤկֱᄬӮ䆱ֵᙃⱘऎඳDŽ

݇Ѣ Session ⱘ䆺㒚ݙᆍ䇋খ㾕 5.3 㡖DŽ

  TFTTJPO

JSP

ᇕ㺙њ Servlet ⱘ HttpSession ᥹ষˈ䗮䖛䱤ᓣᇍ䈵 session ᅲ⦄䆹᥹ষⱘ᠔᳝ࡳ㛑ˈ䖭

Փᕫ೼ JSP Ё᪡԰ session বᕫ᳈Ўㅔ᥋DŽ

ᔧ⌣㾜఼㄀ϔ⃵䇋∖ JSP 义ⱘᯊ׭ˈWeb Server Ӯ㞾ࡼЎ䆹⌣㾜఼߯ᓎϔϾ sessionˈᑊ

䌟ќϔϾ sessionID থ䗕㒭ᅶ᠋ッ⌣㾜఼DŽᔧᅶ᠋ッݡ⃵䇋∖ Web Server Ёᑨ⫼⿟ᑣⱘ݊Ҫ䌘

⑤ⱘᯊ׭ˈӮ㞾ࡼ೼ HTTP 䇋∖༈ᷛЁ⏏ࡴҢ᳡ࡵ఼ᕫࠄⱘ session ID˗ᔧ᳡ࡵ఼ッ㒻㓁᥹ࠄ

ᅶ᠋ッ䇋∖ᯊˈህӮϔᑊ᥹ᬊ sessionIDˈᑊḍ᥂ sessionID ೼ݙᄬЁᡒࠄПࠡ߯ᓎⱘ session

ᇍ䈵ⱘᓩ⫼ˈᦤկ㒭䇋∖Փ⫼DŽ

೼ JSP Ёˈsession ޴Т៤њӮ䆱ⱘҷৡ䆡ˈ5.2.2 㡖ᦤࠄ session ᰃ Cookie ੠ URL 䞡ݭϸ

⾡ᡔᴃⱘ㵡ড়ԧˈৠᯊᅗгᰃϔϾᆍ఼ˈ⫼ᴹᄬټӮ䆱䖛⿟Ё䳔㽕ֱ⬭ⱘᇍ䈵DŽ

  ѹथ TFTTJPO

೼ Servlet ЁˈHttpSession ᥹ষ䗮䖛 HttpServletRequest ⱘᇍ䈵 request 䇗⫼ getSession()៪

getSession(boolean create)

ᮍ⊩ᴹ߯ᓎӮ䆱DŽ᮴খⱘ getSession()ᰃ䇗⫼ getSessionj(true)ⱘϔ⾡ㅔ

֓ݭ⊩˗খ᭄ create བᵰЎ falseˈServlet ᓩ᪢ϡӮ߯ᓎᮄⱘӮ䆱ˈাᇍᄬ೼ⱘӮ䆱偠䆕݊Ӯ

䆱 IDˈᑊᠻ㸠Ⳍ݇᪡԰ˈ㗠Ў true ᯊˈ߭߯ᓎϔϾᮄⱘӮ䆱DŽ

೼ JSP 义Ёˈsession ԰ЎϔϾݙ㕂ᇍ䈵ˈӮ㞾ࡼ߯ᓎӮ䆱ˈ䰸䴲䗮䖛䆒㕂 page ᣛҸЁⱘ

session

ሲᗻЎ false ᴹ⽕ℶᔧࠡ JSP 义ⱘӮ䆱DŽ

session

ᇍ䈵Ёᇕ㺙ⱘ Servlet ҷⷕ↉བϟ˖

final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null;

pageContext = _jspxFactory.getPageContext(this, request, response,

null, true, 8192, true);

_jspx_page_context = pageContext; session = pageContext.getSession();

  Ύၹ TFTTJPO

session

ⱘ߯ᓎ੠Փ⫼ഛ೼ Web Server Ϟˈᅶ᠋ッ⌣㾜఼Ң᳾㦋প䖛 session ᇍ䈵ˈ⌣㾜఼

㦋পⱘҙҙᰃӮ䆱 IDˈ᠔ҹӮ䆱ᇍѢ⫼᠋㗠㿔ᕔᕔᰃϡৃ㾕ⱘˈᔧ✊⫼᠋г᮴䳔݇ᖗ㞾Ꮕᰃ

৺໘ѢӮ䆱Ё៪㗙໘ѢાϔϾӮ䆱ЁDŽ

(15)

       %JCRVGT

session

ᇍ䈵ⱘᐌ⫼ᮍ⊩བ㸼 5-3 ᠔⼎DŽ

㸼 5-3 session ⱘᐌ⫼ᮍ⊩ 䖨ಲ㉏ൟ ᮍ⊩ৡ ᦣ䗄

Object getAttribute(String name) 䖨ಲ session Ёᣛᅮ name ⱘሲᗻؐ

Enumeration getAttributeNames() 䖨ಲ session Ё㒥ᅮⱘ᠔᳝ሲᗻৡ⿄

long getCreationTime() 䖨ಲ session ⱘ߯ᓎᯊ䯈

String getId() 䖨ಲ sessionID

long getLastAccessedTime() 䖨ಲᅶ᠋ッ᳔ৢ䇋∖ⱘᯊ䯈ˈऩԡЎ↿⾦

int getMaxInactiveInterval() 㦋প session ᳔໻᮴ડᑨᯊ䯈ˈऩԡЎ⾦

ServletContext getServeltContext() 䖨ಲ session ᠔ሲⱘ Servlet Ϟϟ᭛

void invalidate() ᔎࠊӮ䆱᮴ᬜ

boolean isNew() ߸ᮁ᳡ࡵ఼ᰃ৺㄀ϔ⃵Ўᅶ᠋ッ߯ᓎ sessionˈ

ᰃ߭䖨ಲ true

void removeAttribute(String name) ⿏䰸ᣛᅮ name ⱘᇍ䈵

void setAttribute(String name,Object value) 䗮䖛ᣛᅮ name ᡞᇍ䈵ֱؐᣕ೼ session Ё

void setMaxInactiveInterval(int interval) ᣛᅮᅶ᠋ッ䇋∖੠ JSP ᆍ఼䯈ⱘ᳔໻᮴ѸѦᯊ

䯈ˈҹ⾦Ўऩԡˈࠄᣛᅮᯊ䯈Փ session ᮴ᬜ

Ӯ䆱䎳䏾ᡔᴃЁˈsession ݙ㕂ᇍ䈵೼ݙᄬЁ᳝⣀ゟⱘᄬټぎ䯈⫼ᴹᄬټⳌ݇ᇍ䈵ˈ೼Ӯ

䆱Ёֱᄬᇍ䈵ⱘᮍ⊩Ў setAttribute()ˈ䗮䖛ᦤկᇍ䈵೼Ӯ䆱԰⫼ඳ sessionScope ⱘৡ⿄ᴹֱᄬ

ᇍᑨⱘᇍ䈵ݙᆍDŽֱᄬ೼ session ԰⫼ඳЁⱘᇍ䈵ৡৃҹᰃӏᛣᄫヺІˈ೼Ⳍৠⱘ԰⫼ඳ㣗ೈ

ݙᇍ䈵ৡᖙ乏ଃϔˈ㗠೼ϡৠⱘ԰⫼ඳЁ߭ϡᄬ೼ৡ⿄ⱘ䰤ࠊˈेৃҹߎ⦄ৠৡⱘᇍ䈵DŽֱᄬ

೼Ӯ䆱Ёⱘᇍ䈵ৃҹᰃӏᛣ㉏ൟⱘᇍ䈵ˈгৃҹᰃ෎⸔㉏ൟˈབ intǃchar ㄝˈ಴Ў೼ JDK1.5

Ё֓ᦤߎњ෎⸔㉏੠ࣙ㺙㉏ⱘ㞾ࡼ䕀࣪ˈे෎⸔㉏԰Ўᇍ䈵ֱؐᄬⱘᯊ׭Ӯ㹿㞾ࡼ䕀࣪Ўᇍᑨ

ⱘࣙ㺙㉏DŽ㗠೼ session ⱘ԰⫼ඳ㣗ೈẔ㋶ᇍ䈵߭䗮䖛 getAttribute()ᮍ⊩ᅲ⦄ˈ㒭ߎ䗮䖛

setAttribute()

ᣛᅮⱘᇍ䈵ৡˈབᵰᇍ䈵ᄬ೼ˈेৃ㦋পᇍ䈵ؐDŽ

՟ 5-4 ೼ session ԰⫼ඳ㣗ೈᄬټ੠Ẕ㋶ᇍ䈵DŽ

ㅔ㽕ߚᵤ˖೼ request ੠ session ⱘ԰⫼ඳ㣗ೈݙЎ৘⾡ֱᄬⱘᇍ䈵߯ᓎⳌৠⱘৡᄫˈ䗮䖛

<jsp:forward>

ᣛҸ䏇䕀ࠄ঺໪ϔ义䖯㸠Ẕ㋶ˈᡞ㦋পⱘؐߚ߿ᰒ⼎ᑊ↨䕗DŽ

lesson5d4.jsp

ᇍ䈵ֱᄬ೼Ӯ䆱԰⫼ඳЁDŽ

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

(16)

      

%JCRVGT

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>

</head> <body>

<h1>Save Objects in [session...request]</h1> <% session.setAttribute("afro", 55); request.setAttribute("afro", 22); %> <jsp:forward page="lesson5d4_retrieval.jsp"/> </body> </html>

lesson5d4_retrieval.jsp

Ẕ㋶ֱᄬ೼ requestScope ੠ sessionScope Ёⱘৠৡᇍ䈵DŽ

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html> <html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <% Integer afro_fromReq=(Integer)request.getAttribute("afro"); Integer afro_fromSes=(Integer)session.getAttribute("afro"); %>

<h1>Object is saved in Request Scope is:<font style="color: red"> <%=afro_fromReq%> </font></h1>

<h1>Object is saved in Session Scope is: <font style="color: blueviolet"><%= afro_fromSes%> </font></h1>

</body> </html>

՟ 5-4 ⱘ䖤㸠㒧ᵰབ೒ 5-9 ᠔⼎DŽ

(17)

       %JCRVGT

ݡᴹϔϾ⿡ᖂ໡ᴖ⚍ⱘ՟ᄤˈᕜ໮ᬭᴤ䛑ҹ䌁⠽䔺԰ЎӮ䆱䎳䏾ⱘ՟ᄤᴹᔎ䇗 session ⱘ

԰⫼ˈᴀкг᪄ݭњϔϾㅔऩⱘ䌁⠽䔺ᑨ⫼ˈ׳ℸᴹ䯤䗄 session ೼݊԰⫼ඳЁᇍᇍ䈵䖯㸠Ј

ᯊֱᄬˈᅲ⦄Ӯ䆱䎳䏾ⱘ䖛⿟DŽ

՟ 5-5 ⫼ JSP ੠ JavaBean ᅲ⦄ㅔऩ䌁⠽䔺DŽ

ㅔ㽕ߚᵤ˖⬉ᄤଚࡵᑇৄⱘ䌁⠽䔺ᰃҢ䍙Ꮦⱘ䌁⠽㇂ᢑ䈵ߎᴹⱘˈ䗮䖛䌁⠽㇂Јᯊᄬټ䌁

⠽ᯊ೼ϡৠᯊ䯈˄䌁⠽ᯊ䯈↉ݙ˅ǃϡৠԡ㕂˄䍙Ꮦⱘ৘䌁⠽ऎ˅фࠄⱘଚકˈ㒧䋺ᯊপߎ䌁

⠽㇂Ёⱘଚકˈ೼ᬊ䫊ৄ㒳ϔҬℒDŽJSP Ёⱘ䌁⠽䔺֓䗮䖛 session ᦤկⱘӮ䆱䎳䏾ᡔᴃᅲ⦄

њ㉏Ԑ䍙Ꮦ䌁⠽㇂ⱘࡳ㛑DŽ

ᭈϾ Web ᑨ⫼݅ 5 Ͼ᭛ӊǃ3 Ͼ JSP 义䴶˄ߚ߿ᅲ⦄ଚકሩ⼎ǃ䌁⠽䔺ㅵ⧚੠ଚક⿏䰸˅

੠ 2 Ͼ JavaBean˄ϔϾᅲ⦄䌁фଚકৡ⿄੠᭄䞣ⱘ㒳䅵ˈ঺ϔϾᅲ⦄ᄫヺ㓪ⷕⱘ䕀࣪˅DŽ

᭛ӊЁ᳝䕗Ў䆺㒚ⱘ⊼䞞ᴹᐂࡽ䇏㗙ᥠᦵ䆹 Web ᑨ⫼ⱘⶹ䆚⚍DŽ

ϟ䴶㒭ߎᅲ⦄ҷⷕDŽ

ଚકሩ⼎义䴶 lesson5d5_productSelect.jsp ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>⃶䖢ܝЈ</title>

</head>

<body>

<div align="center">

<h1>⃶䖢ܝЈ䌁⠽䔺</h1>

<h2>⦄೼ᯊ䯈ᰃ˖<font style="color:blueviolet"><%=new java.util.Date()%></h2> <form method="post" action="lesson5d5_cart.jsp" target="" >

<table width="80%" border="1"> <tr>

<td width="50%" height="30" align="right">䇋䗝ᢽᙼ㽕䌁фⱘଚક˖</td> <td width="50%" height="30" align="left">&nbsp;

<select name="goodsName">

<option value="ヨ䆄ᴀ" selected>ヨ䆄ᴀ</option> <option value="ބㆅ">ބㆅ</option>

<option value="⋫㸷ᴎ">⋫㸷ᴎ</option> <option value="⬉㾚ᴎ">⬉㾚ᴎ</option> <option value="㞾㸠䔺">㞾㸠䔺</option> <option value="ᠧॄᴎ">ᠧॄᴎ</option> <option value="ぎ䇗">ぎ䇗</option> <option value="䷇ડ">䷇ડ</option>

(18)

      

%JCRVGT

</select></td> </tr>

<tr>

<td width="50%" height="30" align="right">䌁ф᭄䞣˖</td> <td width="50%" height="30" align="left">&nbsp;

<input type="text" name="goodsNumber" value="1" size="5"></td> </tr>

</table>

<p><input type="submit" name="sub" value="ᦤѸ">&nbsp;&nbsp; <input type="reset" name="res" value="䞡䌁"></p>

</form> </div> </body> </html>

䌁⠽䔺ㅵ⧚义 lesson5d5_cart.jsp ҷⷕ˖

<%@page import="java.util.Enumeration"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="java.util.Hashtable"%>

<!DOCTYPE html> <html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>⃶䖢ܝЈ䌁⠽䔺</title>

<jsp:useBean id="prodbean" scope="session" class="org.me.afro.Product"/> <jsp:useBean id="transbean" class="org.me.afro.Translate"/>

</head>

<jsp:setProperty name="transbean" property="goodsName"/> <%

//㦋প᠔㽕⏏ࡴࠄ䌁⠽䔺ⱘଚકৡ⿄੠᭄䞣ᑊ䕀࣪㓪ⷕ

String sGoodsName = transbean.getGoodsName(); %>

<%

String sGoodsNumber = request.getParameter("goodsNumber");

//ḍ᥂ଚકৡ⿄ᰃ৺Ўぎ߸ᮁᰃ৺䳔㽕ֱᄬଚકֵᙃ

if (sGoodsName != null && sGoodsNumber !=null) { int iGoodsNumber = Integer.parseInt(sGoodsNumber); prodbean.add(sGoodsName, iGoodsNumber); } //㦋প䌁⠽䔺ᇍ䈵ֵᙃ Hashtable h = prodbean.show(); //㦋প䌁⠽䔺Ё᠔᳝ⱘଚકৡ⿄ Enumeration e = h.keys();

(19)

       %JCRVGT //keys()ˈ䖨ಲℸજᏠ㸼Ёⱘ䬂ⱘᵮВ %> <body> <div align="center"> <h1>⃶䖢ܝЈ䌁⠽䔺</h1> <p>ᙼⱘ䌁⠽ֵᙃབϟ˖</p> <table width="80%" border="1"> <%

//ᕾ⦃ᰒ⼎䌁⠽䔺Ёⱘଚકֵᙃ

while (e.hasMoreElements()) //hasMoreElements()ˈ⌟䆩ℸᵮВᰃ৺ࣙ৿᳈໮ⱘܗ㋴ {

//ḍ᥂ଚકৡ⿄㦋ᕫⳌᑨଚક᭄䞣 String sTemp = e.nextElement().toString(); int iTemp = ((Integer) h.get(sTemp)).intValue(); %>

<tr>

<td width="50%" height="25" align="right"><font color="#0000FF"><%=sTemp%>: </font></td>

<td width="20%" height="25" align="left">&nbsp;<font color="#FF0000"><%= iTemp%></font></td>

<td width="30%" height="25" align="left">&nbsp;

<input type="button" name="GoodsName" value="ߴ䰸"

onClick="javascript:window.location = 'lesson5d5_removeProduct.jsp? goodsName=<%=sTemp%>';"></td> </tr> <% } %> </table>

<p><input type="button" name="goon" value="㒻㓁䌁⠽" onClick="javascript: window.location = 'lesson5d5_productSelect.jsp';"></p>

</div> </body> </html>

ଚક⿏䰸义 lesson5d5_removeProduct.jsp ҷⷕ˖

<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>⃶䖢ܝЈ</title>

(20)

       %JCRVGT </head> <body> <div align="center"> <h1>⃶䖢ܝЈ䌁⠽䔺</h1> <% System.out.println(request.getParameter("goodsName")); //㦋প᠔㽕ߴ䰸ⱘଚકৡ⿄ᑊ䕀࣪㓪ⷕ

String sGoodsName = request.getParameter("goodsName"); System.out.println(sGoodsName); //ߴ䰸ᇍᑨⱘଚકֵᙃ prodbean.delete(sGoodsName); //䏇䕀ᔧࠡ义䴶 response.sendRedirect("lesson5d5_cart.jsp"); %> </div> </body> </html>

ᅲ⦄䌁фଚકৡ⿄੠᭄䞣㒳䅵ⱘ JavaBean——Product ҷⷕ˖

package org.me.afro; import java.util.Hashtable; import java.io.*;

public class Product implements Serializable{ public Hashtable product = new Hashtable(); //ᵘ䗴ߑ᭄

public Product() { }

//ᇚᶤϾଚકֵᙃࡴܹ䌁⠽䔺

public void add(String productName, int productNumber) {

if (product.containsKey(productName)) //containsKeyˈ⌟䆩ᣛᅮᇍ䈵ᰃ৺ЎℸજᏠ㸼Ёⱘ䬂

{ //䌁⠽䔺Ёᄬ೼ℸଚક

int iTemp = ((Integer) product.get(productName)).intValue(); //intValue()ˈҹ int ㉏ൟ䖨ಲ䆹 Integer ⱘؐ

iTemp = iTemp + productNumber;

product.put(productName, new Integer(iTemp)); } else {//䌁⠽䔺Ёϡᄬ೼ℸଚક

product.put(productName, new Integer(productNumber)); }

}

//㦋প䌁⠽䔺Ё᠔᳝ⱘଚકֵᙃ

public Hashtable show() { return product; }

(21)

       %JCRVGT //Ң䌁⠽䔺Ёߴ䰸ϔӊଚકֵᙃ

public void delete(String productName) { product.remove(productName); } }

ᄫヺ䲚䕀࣪ⱘ JavaBean——Translate ҷⷕ˖

package org.me.afro; import java.io.UnsupportedEncodingException; public class Translate {

public Translate() { }

private String goodsName;

/**

* @return the GoodsName */

public String getGoodsName() { this.goodsName = transCoding(); return goodsName;

}

private String transCoding() { String encodeStream = null; try {

if (this.goodsName != null) {

encodeStream = new String(this.goodsName.getBytes("ISO8859-1"), "UTF-8"); }

} catch (UnsupportedEncodingException uee) { uee.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return encodeStream; } /**

* @param GoodsName the GoodsName to set */

public void setGoodsName(String goodsName) { this.goodsName = goodsName;

} }

(22)

       %JCRVGT

⬅ѢᄫヺІᇍ䈵Ңᅶ᠋ッӴ䗦ࠄ᳡ࡵ఼ッˈ᥹ᬊᯊ咬䅸ⱘ㓪ⷕᔶᓣᰃ ISO8859-1ˈ䖭ᰃ 8

ԡᄫヺ䲚ˈϡᬃᣕѮ⌆ᄫヺˈ᠔ҹ䳔㽕೼᥹ᬊᯊᇍ݊䖯㸠䞡ᮄ㓪ⷕˈेᡞॳ᳝ ISO8859-1 Ḑᓣ

ⱘᄫヺІ䕀࣪Ўᄫ㡖᭄㒘ˈݡ䗮䖛Ё᭛ᄫヺ䲚䖯㸠㓪ⷕेৃᅲ⦄Ё᭛៪㗙Ѯ⌆ᄫヺ೼ JSP ϡ

ৠ义䴶ЁӴ䕧DŽ

ଚક⌣㾜ঞ䗝ᢽ⬠䴶ⱘ䖤㸠㒧ᵰབ೒ 5-10 ᠔⼎DŽ

೒ 5-10 ଚક⌣㾜ঞ䗝ᢽ⬠䴶

⫼᠋䗮䖛䌁⠽䔺䖯㸠ଚકㅵ⧚义䴶ⱘ䖤㸠㒧ᵰབ೒ 5-11 ᠔⼎DŽ

೒ 5-11 䌁⠽䔺ଚકㅵ⧚

䗝ᢽߴ䰸ᶤ乍ଚકৢⱘ⬠䴶བ೒ 5-12 ᠔⼎DŽ

೒ 5-12 ߴ䰸ᶤ乍ଚકৢⱘ䌁⠽䔺

(23)

       %JCRVGT

՟ 5-5 ԰ЎϔϾⳌᇍㅔऩⱘ䌁⠽䔺῵ൟˈᕜ໮ࡳ㛑ഛ᳾ᅲ⦄ˈ᳝݈䍷ⱘ䇏㗙ϡོᣝ✻㞾Ꮕ

ᇍ䌁⠽䔺ⱘ⧚㾷ᴹׂᬍϞ䴶ⱘ⿟ᑣҷⷕˈᅲ⦄᳈ᅠ୘ⱘࡳ㛑DŽ

  ᩙඃTFTTJPO

Servlet

䞛⫼њ䕏䞣㑻㒓⿟ᴎࠊˈ᠔䇧䕏䞣㑻े㸼⼎ᵘ䗴੠ᵤᵘ᠔䳔ⱘ䌘⑤ᕜᇥˈৃҹᖿ

䗳ഄ߯ᓎᑊՓ⫼ˈԚᑊϡᰃ䕏䞣㑻ⱘᇍ䈵ህৃҹ᮴䰤ᵘ䗴ᑊϡ⫼ᵤᵘˈ㱑✊ Java 㰮ᢳᴎᦤկ

њൗഒಲᬊᴎࠊˈԚ԰Ўϔ⾡དⱘдᛃˈ೼ᇍ䈵ϡՓ⫼ᯊᑨ䆹݇䯁៪㗙䫔↕DŽ

session

ᇍ䈵೼߯ᓎПৢӮ⍜㗫ݙᄬ䌘⑤ˈ᠔ҹབᵰ೼ Web ᑨ⫼ЁϡᠧㅫՓ⫼ sessionˈᑨ

䆹೼ page ᣛҸЁ݇䯁ˈབϟ˖

<%page contentType="text/html" pageEncoding="UTF-8" session=”false”%>

໮᭄ᚙމϟ䛑㽕Փ⫼Ӯ䆱䎳䏾ᡔᴃˈ᠔ҹ೼ᶤѯᚙމϟ䳔㽕ᇍϡݡՓ⫼ⱘ session ᇍ䈵䖯

㸠䫔↕DŽϔ㠀ᄬ೼ҹϟ 3 ⾡ᚙމ˖



᳡ࡵ఼䖯⿟㹿ذℶˈ⬅Ѣ᳡ࡵ఼ذℶˈЈᯊᄬټⱘ session ᇍ䈵Ӯ㹿䫔↕DŽ



䎱⾏ࠡϔ⃵ᬊࠄᅶ᠋ッথ䗕䇋∖ᑊ⬅᳡ࡵ఼Ẕ㋶Ӯ䆱 ID ⱘᯊ䯈䯈䱨䍙䖛њ䗮䖛

setMaxInactiveInterval(int interval)

খ᭄ interval 䆒㕂ⱘؐDŽ



೼ Web ᑨ⫼Ё䇗⫼ invalidate()ᮍ⊩ˈᔎࠊӮ䆱᮴ᬜˈे䫔↕Ӯ䆱DŽ

Tomcat

᳡ࡵ఼ᇍ session ⱘӮ䆱ᯊ䯈᳝݋ԧⱘ䰤ࠊˈ咬䅸Ў 30 ߚ䩳ˈ೼ web.xml ᭛ӊЁ

ৃҹ䖯㸠䜡㕂ˈҹ䆒㕂ᔧࠡ Web ᑨ⫼Ёⱘ᠔᳝Ӯ䆱ˈ䰸䴲䖭ѯӮ䆱Ё䗮䖛㄀Ѡ⾡ᮍ⊩ᴹ㽚Ⲫ

䖭Ͼ咬䅸ؐˈ៪㗙䗮䖛ׂᬍ web.xml ᭛ӊⱘݙᆍᴹׂᬍᭈϾ Web ᑨ⫼ⱘ session ᳔໻᮴ડᑨᯊ

䯈DŽweb.xml ᭛ӊЁ݇Ѣ session 䍙ᯊ݇䯁ⱘ㡖⚍ҷⷕ↉བϟ˖

<session-config> <session-timeout> 30 </session-timeout> </session-config>

Јᯊ Cookies Ӯ೼݇䯁⌣㾜఼ᯊ㒧ᴳϢ Web Server ⱘӮ䆱ˈ⬅Ѣ session ೼⌣㾜఼ᬃᣕ

Cookie

ⱘᚙމϟӮӬܜՓ⫼Јᯊ Cookies ᴹᅲ⦄Ӯ䆱䎳䏾ˈ᠔ҹϔ㠀䅸Ўⱘ݇䯁⌣㾜఼े㒧ᴳ

ᔧࠡӮ䆱ेᰃ䖭⾡ᚙމDŽ

  TFTTJPO ᄊၷ֑ևర

䗮䖛 5.3.3 㡖Ёⱘҟ㒡ˈsession ೼ Tomcat ᳡ࡵ఼Ё咬䅸ⱘ᳔໻ડᑨᯊ䯈ᰃ 30 ߚ䩳ˈ䖭㸼

⼎ session ⱘᄬ೼ڣҎⱘ⫳ੑϔḋ᳝ᯊ䯈䰤ࠊˈᢹ᳝⡍⅞ⱘ⫳ੑ਼ᳳDŽ

session

⬅Ѣ೼ JSP ᆍ఼ЁӮ㞾ࡼ߯ᓎˈৃҹ䗮䖛䇗⫼ session ᇍ䈵ⱘ isNew()ᮍ⊩ᴹ߸ᮁ

ᔧࠡ session ᰃ৺ЎᮄᓎDŽ᠔䇧ᮄᓎ session ህᰃ Web Server ㄀ϔ⃵ડᑨᅶ᠋ッˈ㒭⌣㾜఼䖨ಲ

(24)

      

%JCRVGT

sessionid

ⱘᯊࠏ˗䱣ⴔ⌣㾜఼㒻㓁ᦤѸ䇋∖ˈsession ֓ϡݡᰃᮄᓎⱘњDŽ

session

߯ᓎৢˈৃҹᡞ೼ᭈϾӮ䆱䖛⿟Ё᠔䳔ⱘᇍ䈵ֱᄬ೼ session 㓧ᄬЁˈᑊᇍ݊䖯㸠

Ẕ㋶ˈԚᰃ⬅Ѣ Web Server 䰤ᅮњ session ⱘᯊ䰤ˈᔧ✊ϡৠⱘ᳡ࡵ఼咬䅸ⱘᯊ䰤ϡሑⳌৠˈ

ᑊϨᯊ䰤ৃҹ೼䜡㕂᭛ӊЁ⡍ᅮⱘ㡖⚍៪ᷛㅒ໘ׂᬍDŽ䰸ℸП໪ˈsession ⱘᓔথҎਬৃҹ԰

Ў᠔ᓎ session ⱘϞᏱˈ䗮䖛 setMaxAge(interval)ᔎࠊׂᬍ session ⱘ⫳ᄬᯊ䯈ˈ៪㗙䗮䖛

invalidate()

Ⳉ᥹䫔↕ sessionˈҸ session ⅏ѵDŽ

ᥠᦵ session ⱘ⫳ੑ਼ᳳˈ㛑ޚ⹂ഄᡞᦵֱᄬ೼ session 㓧ᄬЁᇍ䈵ⱘ䆓䯂ᯊ䯈ˈ䖭ᇍ session

З㟇ᭈϾ Web ᑨ⫼ⱘ᪡԰ᰃ䴲ᐌ᳝ⲞⱘDŽ

՟ 5-6 ϔϾ䎳䏾 session ⱘ⫳ੑ਼ᳳⱘ՟ᄤDŽ

ㅔ㽕ߚᵤ˖

՟ 5-6 䳔㽕೼㸼ऩЁ䕧ܹ⫼᠋ৡ੠ᆚⷕˈᑊ䗮䖛偠䆕义Ẕᶹˈབᵰ⫼᠋ৡᰃ afroˈᆚⷕᰃ

1a2b3C

˗៪㗙⫼᠋ৡᰃ beeˈᆚⷕᰃ A1b2c3ˈ߭偠䆕䗮䖛ˈ䖯ܹ义䴶 Aˈ义䴶 A Ӯᦤ⼎ᔧࠡ

session

ᰃ৺ЎᮄᓎˈৠᯊӮ㒭ߎ 4 Ͼ䫒᥹ˈߚ߿ᰃ䖨ಲⱏᔩ义䴶ǃ义䴶 Aǃ义䴶 B ੠݇䯁 session

义DŽ䗮䖛䫒᥹䖯ܹ义䴶 Bˈ߭Ӯᦤ⼎⫼᠋ⱘᆚⷕ˗䖯ܹ݇䯁 session 义ˈӮ䗝ᢽᰃゟे݇䯁䖬

ᰃㄝᕙ 5 ⾦ˈᔧ✊᳔㒜ⱘ㒧ᵰഛᰃ䫔↕ sessionˈ㒧ᴳ݊⫳ੑ਼ᳳDŽᔧ session 㹿䫔↕ৢˈ䖨ಲ

ⱏᔩ义䴶ˈӮ㒭ߎᦤ⼎ˈ㽕∖䞡ᮄ䕧ܹ⫼᠋ৡ੠ᆚⷕDŽ

ϟ䴶㒭ߎᅲ⦄ҷⷕDŽ

index.jsp

ⱏᔩ义䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>JSP Page</title>

</head> <%

String error = (String) request.getAttribute("error"); if (error == null) { error = ""; } %> <body> <jsp:include page="inc_AllPages.jsp"/> <font color="red"> <%=error%> </font>

<form action="lesson5d6_valid.jsp" method="post"> <table>

(25)

       %JCRVGT <tr> <td>⫼᠋ৡ˖</td>

<td><input type="text" name="username"></td> </tr>

<tr>

<td>ᆚⷕ˖</td>

<td><input type="password" name="password"></td> </tr>

<tr>

<td colspan="2">

<input type="submit" value="SUBMIT"> </td> </tr> </table> </form> </body> </html>

lesson5d6_valid.jsp

偠䆕义䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<jsp:useBean id="validbean" class="org.me.afro.ValidateUP"/> <jsp:setProperty name="validbean" property="*"/>

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>Valid Page</title>

</head> <body> <%

//гৃҹ䗮䖛 bean 䖯㸠পؐ

String username = request.getParameter("username"); String password = request.getParameter("password"); if (validbean.isBlValid()) { //߯ᓎ session ᑊ೼݊㓧ᄬЁֱᄬᇍ䈵 session.setAttribute("username", username); session.setAttribute("password", password); response.sendRedirect("lesson5d6a.jsp"); } else { request.setAttribute("error", "⫼᠋ৡ៪ᆚⷕ᮴ᬜˈ䇋䞡ᮄ䕧ܹʽ");

(26)

      

%JCRVGT

//ϟ䴶Փ⫼ servlet Ёⱘ䇋∖䕀থᇍ䈵ᅲ⦄ forward 䏇䕀ˈ੠<jsp:forward>ࡳ㛑ϔ㟈 request.getRequestDispatcher("index.jsp").forward(request, response); } %> </body> </html>

偠䆕义䴶䗮䖛䇗⫼偠䆕 bean——validateUP ᴹᅲ⦄偠䆕ࡳ㛑ˈ㹿䆌ৃⱘ⫼᠋ৡᰃ afroˈᆚ

ⷕᰃ 1a2b3C˗៪㗙⫼᠋ৡᰃ beeˈᆚⷕᰃ A1b2c3ˈ݊Ҫ䕧ܹഛϡ㹿䅸ৃDŽ

package org.me.afro; public class ValidateUP { private String username; private String password; private boolean blValid; public ValidateUP(){ blValid=false; }

/**

* @return the username */

public String getUsername() { return username; }

/**

* @param username the username to set */

public void setUsername(String username) { this.username = username;

}

/**

* @return the password */

public String getPassword() { return password; }

/**

* @param password the password to set */

(27)

       %JCRVGT

public void setPassword(String password) { this.password = password;

}

private boolean validate() {

if (password != null && username != null) {

if (username.equalsIgnoreCase("afro") && password.equals("1a2b3C")

|| username.equalsIgnoreCase("bee") && password.equals("A1b2c3")) { this.blValid = true; } else { this.blValid = false; } } return blValid; } /**

* @return the blValid */

public boolean isBlValid() { return validate(); }

}

lesson5d6a.jsp

义䴶 A ҷⷕ˖

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>A Page</title>

</head> <%

String aName = (String) session.getAttribute("username"); if (aName == null) {

request.setAttribute("error", "䇋ᙼܜⱏᔩݡ䆓䯂ʽ");

request.getRequestDispatcher("index.jsp").forward(request, response); }

(28)

      

%JCRVGT

<body>

<jsp:include page="inc_AllPages.jsp"/>

<font style="color:red">Welcome <%=aName%> to A!</font> <%

if (session.isNew()) {

out.println("this session is new,sessinid=" + session.getId()); } else {

out.println("the session has existed..."); }

%> </body> </html>

lesson5d6b.jsp

义䴶 B ҷⷕ˖

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>B Page</title>

</head> <%

String bName = (String) session.getAttribute("username"); if (bName == null) { request.setAttribute("error", "䇋ᙼܜⱏᔩݡ䆓䯂!"); request.getRequestDispatcher("index.jsp").forward(request, response); } %> <body> <jsp:include page="inc_AllPages.jsp"/> <form>

<font style="color:green">Welcome <%=bName%> to B!</font> Do u remember ur password?

<input type="submit" value="Yes" name="viewPass" /> </form>

<%

(29)

       %JCRVGT ("viewPass").equals("Yes")) { %> <i><%=session.getAttribute("password").toString()%></i> <% } %> </body> </html>

lesson5d6_closeSession

݇䯁 session 义䴶ҷⷕ˖

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>inc_AllPage</title> </head> <body> <h1> <table border="1"> <tr>

<td><a href="index.jsp">䖨ಲⱏᔩ义䴶</a></td> </tr>

<tr>

<td><a href="lesson5d6a.jsp">A义䴶</a></td> </tr>

<tr>

<td><a href="lesson5d6b.jsp">B义䴶</a></td> </tr> <tr> <td><a href="lesson5d6_closeSession.jsp">Close_Session</a></td> </tr> </table> </h1> </body> </html>

inc_AllPages.jsp

ЎҹϞ᠔᳝义䴶ᦤկ table 㸼Ḑ੠䫒᥹ᬃᣕDŽ

<%@page contentType="text/html" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

(30)

      

%JCRVGT

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>inc_AllPage</title> </head> <body> <h1> <table border="1"> <tr>

<td><a href="index.jsp">䖨ಲⱏᔩ义䴶</a></td> </tr>

<tr>

<td><a href="lesson5d6a.jsp">A义䴶</a></td> </tr>

<tr>

<td><a href="lesson5d6b.jsp">B义䴶</a></td> </tr> <tr> <td><a href="lesson5d6_closeSession.jsp">Close_Session</a></td> </tr> </table> </h1> </body> </html>

՟ 5-6index.jsp ⱏᔩ义䴶ⱘ䖤㸠㒧ᵰབ೒ 5-13 ᠔⼎ˈlesson5d6a.jsp 义䴶ⱘ䖤㸠㒧ᵰབ೒

5-14

᠔⼎DŽ

೒ 5-13 ⱏᔩ义䴶 ೒ 5-14 义䴶 A

lesson5d6b.jsp

义䴶ⱘ䖤㸠㒧ᵰབ೒ 5-15 ᠔⼎ˈlesson5d6_closeSession.jsp ݇䯁Ӯ䆱义ⱘ䖤

㸠㒧ᵰབ೒ 5-16 ᠔⼎DŽ

(31)

       %JCRVGT ೒ 5-15 义䴶 B ೒ 5-16 ݇䯁 session 义

݇䯁 session Пৢˈݡ䏇䕀ࠄ义䴶 A ៪ Bˈᰒ⼎㒧ᵰབ೒ 5-17 ᠔⼎DŽ

೒ 5-17 session 㹿䫔↕ˈ䆄ᔩⱘᇍ䈵ϔᑊ㾷䰸

  ͘ភፅࠀᄣզ٨

⬅Ѣ session ݋᳝⫳ᄬᯊ䰤ˈֱᄬ೼ session 㓧ᄬЁⱘᇍ䈵᭄᥂ᇚᰃЈᯊᗻⱘˈ೼ᶤѯᚙމ

ϟˈ䳔㽕ᡞЈᯊᄬټ೼ session Ёⱘᇍ䈵೼ session 㒧ᴳᯊᣕЙ࣪ഄᄬټࠄ᭛ӊ㋏㒳៪᭄᥂ᑧЁ˗

঺ϔ⾡ᚙމᰃˈᇍ䈵੠ session ݇㋏㋻ᆚˈᇍ䈵ⱘ↣ϔ⃵ᬍব䛑䳔㽕䗮ⶹ session ঞᯊ䆄ᔩֱᄬˈ

䖭ህ䳔㽕೼䙷ѯ䳔㽕ᕫࠄ session ेᯊ⢊ᗕⱘᇍ䈵Ϟ㒥ᅮϔϾⲥ਀఼ˈ೼ҹϞϸ⾡ᚙމথ⫳ᯊˈ

ѻ⫳ϔϾџӊ Event ᴹⲥ㾚Ӯ䆱DŽ

Ӯ䆱㒥ᅮⲥ਀఼ᰃ Servlet ᦤկⱘϔϾ᥹ষˈ᥹ষৡЎ HttpSessionBindingListenerˈ䆹᥹ষ

ࣙ৿ҹϟϸϾᢑ䈵ᮍ⊩˖



public void valueBound(HttpSessionBindingEvent event);



public void valueUnbound(HttpSessionBindingEvent event);

ᔧᇍ䈵䳔㽕ᄬܹ session ᯊˈӮ㞾ࡼ䇗⫼ valueBound()ᮍ⊩ˈ㢹 session 㹿䫔↕ˈӮ㞾ࡼ䇗

⫼ valueUnbound()ᮍ⊩DŽ

Ӯ䆱ⲥ਀ⱘЏ㽕Ӭ࢓೼Ѣϡㅵᅶ᠋ッᰃЏࡼ݇䯁 Web ᑨ⫼䖬ᰃӮ䆱䍙ᯊˈӮ䆱ⲥ਀఼᥹

ষӮ䖙䗳خߎডᑨˈৠᯊгӮಲᬊ session ೼ᄬ೼ᯊऴ⫼ⱘ㋏㒳䌘⑤DŽ

(32)

       %JCRVGT

  ࠄΓࠄဘ

䗮䖛ᴀゴⱘᄺдˈ5.1 㡖ᓩܹⱘ CHERRYONE ݀ৌ䳔㽕ᬍ㡃ⱘࠡҷॳൟˈ䇏㗙ᰃ৺㛑໳ḍ

᥂ 5.1 㡖㒭ߎⱘࡳ㛑䳔∖㞾㸠ᅲ⦄ਸ਼˛ϟ䴶ᴹⳟϔϟ Zac ᓔথಶ䯳ᰃབԩᅲ⦄䆹ॳൟⱘDŽ

ᦤ⼎˖·ჃಬैᅖྑಾၽဈܜԈৃ࠘ੋචަ Cookie ԅࠄೌֺ֥ēω̟ზै 5-3 ԅಬຣֺ

಴ēဈ EL ᆴนζӦᄯࣅߑ value ೫໿ԅᄔēලನඔ٢ဈܜ༓ྑͬӉ Cookie ԅನ޷dၽ׻๠୶

ժඹڶྡྷّ Servlet ճဈܜԅ Cookie ைௐࠩ໻҉सē௶܊ඹڶ response.sendRedirect()ֺ֥ණᅧ

Ӿອ࿫ԅ࡮ပဈܜဴཝܬࡂԅྚੋᄯd

  ˸ᮥ

1

ˊ㾷䞞 Java Web ⱘӮ䆱ㅵ⧚ᴎࠊDŽ

2

ˊCookies ᡔᴃ੠ JSP Ё session ⱘऎ߿ᰃҔМ˛

3

ˊJSP ⱘ 4 ⾡Ӯ䆱䎳䏾ᡔᴃᰃાѯ˛

4

ˊㅔ䗄 JSP Ё session ⱘ⫳ੑ਼ᳳDŽ

5

ˊJSP 㔥义ЁЎҔМ䳔㽕ᓩܹӮ䆱˛

參考文獻

相關文件

ƒ Persistent Connections (HTTP 1.1):HTTP 1.1改進 了HTTP 1.0 的缺點,藉由PersistentConnections減 少TCP connections,以增加WEB Server

学校现有教学仪器设备超过1亿元,学校图书馆纸质藏书125万册,电子图书

2.TURN Server generates and sends Allocate Response

Binding Warning message Binding Update message AAAO: the AAA server of the old foreign network to which the OFA belongs. AAAF: the AAA server of the new foreign network to which the

1) Ensure that you have received a password from the Indicators Section. 2) Ensure that the system clock of the ESDA server is properly set up. 3) Ensure that the ESDA server

Note that if the server-side system allows conflicting transaction instances to commit in an order different from their serializability order, then each client-side system must apply

[r]

The client’s web browser sends a request to the server for a web page that runs a Java servlet.