ኄ 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
%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Ž
%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>
%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: </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>
%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Ž
%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();%>
%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Ž
%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 ᑊϡӮऎߚ⫼᠋ˈᅗাӮḍ㽕䆓䯂ⱘ᳡
%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߯ᓎৢЎ݊䆒㕂ϔϾᮄⱘؐ
%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Ž
%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>
%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 {
%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 Ẕ㋶ˈ⫼᠋ֵᙃⳈᰒ⼎
%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Ž
%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>
%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Ž
%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">
<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>
%JCRVGT
</select></td> </tr>
<tr>
<td width="50%" height="30" align="right">䌁ф᭄䞣˖</td> <td width="50%" height="30" align="left">
<input type="text" name="goodsNumber" value="1" size="5"></td> </tr>
</table>
<p><input type="submit" name="sub" value="ᦤѸ"> <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();
%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"> <font color="#FF0000"><%= iTemp%></font></td>
<td width="30%" height="25" align="left">
<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>
%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; }
%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;
} }
%JCRVGT
⬅ѢᄫヺІᇍ䈵Ңᅶ᠋ッӴ䗦ࠄ᳡ࡵ఼ッˈᬊᯊ咬䅸ⱘ㓪ⷕᔶᓣᰃ ISO8859-1ˈ䖭ᰃ 8
ԡᄫヺ䲚ˈϡᬃᣕѮ⌆ᄫヺˈ᠔ҹ䳔㽕ᬊᯊᇍ݊䖯㸠䞡ᮄ㓪ⷕˈेᡞॳ᳝ ISO8859-1 Ḑᓣ
ⱘᄫヺІ䕀࣪Ўᄫ㡖᭄㒘ˈݡ䗮䖛Ё᭛ᄫヺ䲚䖯㸠㓪ⷕेৃᅲ⦄Ё᭛㗙Ѯ⌆ᄫヺ JSP ϡ
ৠ义䴶ЁӴ䕧DŽ
ଚક⌣㾜ঞ䗝ᢽ⬠䴶ⱘ䖤㸠㒧ᵰབ 5-10 ᠔⼎DŽ
5-10 ଚક⌣㾜ঞ䗝ᢽ⬠䴶⫼᠋䗮䖛䌁⠽䔺䖯㸠ଚકㅵ⧚义䴶ⱘ䖤㸠㒧ᵰབ 5-11 ᠔⼎DŽ
5-11 䌁⠽䔺ଚકㅵ⧚䗝ᢽߴ䰸ᶤ乍ଚકৢⱘ⬠䴶བ 5-12 ᠔⼎DŽ
5-12 ߴ䰸ᶤ乍ଚકৢⱘ䌁⠽䔺%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 ϔડᑨᅶ᠋ッˈ㒭⌣㾜఼䖨ಲ
%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>
%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", "⫼᠋ৡᆚⷕ᮴ᬜˈ䇋䞡ᮄ䕧ܹʽ");
%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 */
%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); }
%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>
<%
%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">
%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 义䴶 Alesson5d6b.jsp
义䴶ⱘ䖤㸠㒧ᵰབ 5-15 ᠔⼎ˈlesson5d6_closeSession.jsp ݇䯁Ӯ䆱义ⱘ䖤
㸠㒧ᵰབ 5-16 ᠔⼎DŽ
%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Ž
%JCRVGT