servlets.ppt
TRANSCRIPT
-
8/16/2019 Servlets.ppt
1/51
Servlets, Sessions,Servlets, Sessions,
and Cookiesand CookiesLecture 8Lecture 8cs193i – Internetcs193i – Internet
TechnologiesTechnologiesSummer 2004Summer 2004
Stanford UniversityStanford University
-
8/16/2019 Servlets.ppt
2/51
Administrative Stuf Administrative Stuf
H !3 due "ugust 2H !3 due "ugust 2
#a$ !3 due "ugust 4#a$ !3 due "ugust 4
#ocal S%&' students must ta(e )nal#ocal S%&' students must ta(e )nalon*cam+uson*cam+us
-
8/16/2019 Servlets.ppt
3/51
Cookies and Privacy Cookies and Privacy
%oo(ies are good%oo(ies are good ,emem$er -ho you are and your,emem$er -ho you are and your
+references+references
Session trac(ingSession trac(ing
%oo(ies are $ad%oo(ies are $ad hen develo+er is not carefulhen develo+er is not careful
.store +ass-ord/ credit card info/ etc.store +ass-ord/ credit card info/ etc hen +eo+le a$use themhen +eo+le a$use them
.trac( information a$out you.trac( information a$out you
-
8/16/2019 Servlets.ppt
4/51
The Big PictureThe Big Picture
a(ing e$ "++lications etter
or the 'evelo+er
ore features/ $etter "&I/ 555 Time*To*ar(et .$eat your com+etitors
or the 6nd*User
etter %ontinuity etter User 67+erience
-
8/16/2019 Servlets.ppt
5/51
Why Java Servlets nstead Why Java Servlets nstead
o! C"#o! C"# 68icient/ %onvenient/ &o-erful/
&orta$le/ Secure/ Ine7+ensive #ight-eight threads instead of S threads
created Single co+y of code $rought into memory
for all threads versus +er thread 'ata .session state can $e stored across
threads -ithin servlet container :ava is +orta$le and secure ,e;uires little e7+ense once servlet
container integrated -ith -e$ server
-
8/16/2019 Servlets.ppt
6/51
Servlet StructureServlet Structure
:ava Servlet $
-
8/16/2019 Servlets.ppt
7/51
We$ A%% &ith Servlets We$ A%% &ith Servlets
HEADERS
BODY
Servlet
doGet()
…
…
GET …
Servlet Container
-
8/16/2019 Servlets.ppt
8/51
' Sim%le Ste%s !or Java' Sim%le Ste%s !or Java
ServletsServlets15 Su$class o8 Htt+Servlet
25 verride do?et.5555 method
35 Htt+Servlet,e;uest get&arameter.@+aramAame@
45 Htt+Servlet,es+onse set %ontent Ty+e
get &rintriter send te7t to client via &rintriter
B5 'onCt use instance varia$les
-
8/16/2019 Servlets.ppt
9/51
Servlet(JSP Container Servlet(JSP Container
:ava Servlet 254
:avaServer &ages 250
Tomcat is the $asis for the o8icial
reference im+lementation
-
8/16/2019 Servlets.ppt
10/51
)elloWorld*+ava)elloWorld*+ava
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldExample extends HttpServlet {
public void doGet(HttpServletReuest reuest!
HttpServletResponse response" thro#s $%Exception! ServletException
{
response.set&ontent'pe()texthtml)";
+rintWriter out , response.-etWriter(";
out.println()html/)";
out.println()head/)";
out.println()title/Hello World0title/)"; out.println()head/)";
out.println()bod b-color,1)#hite1)/)";
out.println()h2/Hello World0h2/)";
out.println()bod/)";
out.println()html/)";
3
3
-
8/16/2019 Servlets.ppt
11/51
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ReuestHeaderExample extends HttpServlet {
public void doGet(HttpServletReuest reuest! HttpServletResponse response"
thro#s $%Exception! ServletException
{
response.set&ontent'pe()texthtml)";
+rintWriter out , response.-etWriter(";
Enumeration e , reuest.-etHeader4ames(";
#hile (e.has5oreElements("" {
Strin- name , (Strin-"e.nextElement(";
Strin- value , reuest.-etHeader(header4ame";
out.println(name 6 7 , 7 6 value ";
3
3
3
e-uest)eader./am%le*+e-uest)eader./am%le*+
avaava
-
8/16/2019 Servlets.ppt
12/51
Servlet Li!ecycleServlet Li!ecycle
0Creation10Creation1 Single instance created
init. method called
Dou can override init. in yoursu$class of Htt+Servlet to do someinitial code5555
init. is AT called again on furtherre;uests
-
8/16/2019 Servlets.ppt
13/51
Servlet Li!ecycleServlet Li!ecycle
0Service 2ethod10Service 2ethod1 n each re;uest/ the server s+a-ns
a ne- thread and calls service.
service. chec(s HTT& re;uest ty+eand calls a++ro+riate doEEEE .?et/&ost/ &ut555
donCt override service .unless youreally (no- -hat youCre doing
-
8/16/2019 Servlets.ppt
14/51
Servlet Li!ecycleServlet Li!ecycle
0do"et01, doPost0110do"et01, doPost011 ,eal meat of the -e$ a++ is here
do&ost. can call do?et./ or viceversa
no doHead.555 system uses headersof do?et. result
-
8/16/2019 Servlets.ppt
15/51
Servlet Li!ecycleServlet Li!ecycle
0destroy0110destroy011 or some reason .servlet idle/ etc
the server may -ant to remove theservlet from memory
destroy. allo-s you to close 'connections/ -ra+ u+/ etc555
'onCt count on destroy to -rite+ersistent state .server may crash$efore you ever get hereF
-
8/16/2019 Servlets.ppt
16/51
Accessing e-uest Accessing e-uest
Com%onentsCom%onents get&arameter.@+aram1@
get%oo(ies. G %oo(ieJ
get%ontent#ength. get%ontentTy+e.
getHeaderAames.
getethod.
-
8/16/2019 Servlets.ppt
17/51
.nvironment 3aria$les.nvironment 3aria$les
:avaServlets do not re;uire you to use :avaServlets do not re;uire you to use
the clun(y environment varia$les usedthe clun(y environment varia$les used
in %?Iin %?I
Individual functionsKIndividual functionsK &"THLIA&"THLIA re;5get&athInfo.re;5get&athInfo.
,6T6LHST,6T6LHST re;5get,emoteHost.re;5get,emoteHost.
MU6,DLST,IA?MU6,DLST,IA? re;5getMueryString.re;5getMueryString.
-
8/16/2019 Servlets.ppt
18/51
Setting es%onseSetting es%onse
Com%onentsCom%onents Set status )rstF
setStatus.int
Htt+Servlet,es+onse5S%LN555 send6rror.int/ String send,edirect.String url
-
8/16/2019 Servlets.ppt
19/51
Setting es%onseSetting es%onse
Com%onentsCom%onents Set headers
setHeader.
set%ontentTy+e.Ote7t=htmlP
ut+ut $ody &rintriter out G res+onse5getriter.Q
out5+rintln.@RHT#RH6"'555@
-
8/16/2019 Servlets.ppt
20/51
J4.. AP J4.. AP
htt+K==
-
8/16/2019 Servlets.ppt
21/51
5evelo%ing Servlets5evelo%ing Servlets
0Start &( $a$y ste%s10Start &( $a$y ste%s1 Install TomcatInstall Tomcat
,un Tomcat,un Tomcat
,un e7am+les,un e7am+les
-
8/16/2019 Servlets.ppt
22/51
Creating 6our 7&nCreating 6our 7&n
ServletServlet rite ne- servlet .e5g5 Hi5
-
8/16/2019 Servlets.ppt
23/51
5e$ugging5e$ugging
use out5+rintln to the html
+rint to a soc(et on localhost555
-
8/16/2019 Servlets.ppt
24/51
ive 2inuteive 2inute
Break Break
-
8/16/2019 Servlets.ppt
25/51
Continuity Pro$lemContinuity Pro$lem
SessionK " user sits do-n/ enters a-e$site/ does some -or(/ e7its
HTT& Stateless 'oes Nee+*"live Hel+
-
8/16/2019 Servlets.ppt
26/51
Client vs* Server SideClient vs* Server Side
%lient Side Store aria$leGalue indings in HT#
&age/ or %oo(ies
Server Side Store aria$leGalue indings in
'=Server emory
Store Session I' on %lient Side/ toidentify %lient
-
8/16/2019 Servlets.ppt
27/51
Three Ty%ical SolutionsThree Ty%ical Solutions
%oo(ies
U,# ,e-riting
Hidden ields
-
8/16/2019 Servlets.ppt
28/51
)TTP Cookies "ra$9$ag)TTP Cookies "ra$9$ag
#ifetime#ifetime Session – not -ritten to )le systemSession – not -ritten to )le system
&ersistent – -ritten to user +references&ersistent – -ritten to user +references
nly returns coo(ie to re;uestingnly returns coo(ie to re;uesting
domaindomain
%oo(ie must $e s+eci)ed $y content%oo(ie must $e s+eci)ed $y content
Ao s+ecial characters in coo(ieAo s+ecial characters in coo(ie
-
8/16/2019 Servlets.ppt
29/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
30/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
31/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
32/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
33/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
34/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
35/51
)TTP Cookies)TTP Cookies
Strin- s$8 , ma9e:niueStrin-(";
Hashtable session$no , ne# Hashtable(";
Hashtable -lobal'able , ind'ableStorin-Sessions(";
-lobal'able.put(s$8! session$no";
&oo9ie session&oo9ie , ne# &oo9ie()
-
8/16/2019 Servlets.ppt
36/51
)TTP Cookies)TTP Cookies
%n reuest
Strin- s$8 , reuest.-et&oo9ie()
-
8/16/2019 Servlets.ppt
37/51
)TTP Cookies)TTP Cookies
%n reuest
Strin- s$8 , reuest.-et&oo9ie()
-
8/16/2019 Servlets.ppt
38/51
)TTP Cookies)TTP Cookies
%n reuest
Strin- s$8 , reuest.-et&oo9ie()
-
8/16/2019 Servlets.ppt
39/51
n9Bro&ser Cookien9Bro&ser Cookie
2anagement2anagement
-
8/16/2019 Servlets.ppt
40/51
:L e&riting:L e&riting
,e-rite all U,#s in res+onse to containSessionI' htt+K==foo5com=servlet=cartidG1237yV
&arse out session I' from re;uest line
encodeU,#. in Htt+,es+onse o$
-
8/16/2019 Servlets.ppt
41/51
:L e&riting:L e&riting
-
8/16/2019 Servlets.ppt
42/51
)idden orm ields)idden orm ields
Rin+ut ty+eGOhiddenP nameGOsessionP valueGO555P
-
8/16/2019 Servlets.ppt
43/51
Java Servlet Solution Java Servlet Solution
Session trac(ing "&I $uilt on to+ ofU,# re-riting or coo(ies #oo( u+ Htt+Session o$
-
8/16/2019 Servlets.ppt
44/51
Look u% Session n!oLook u% Session n!o
HttpSession session , reuest.-etSession(true";
Shoppin-&art sc , (Shoppin-&art"
session.-et=ttribute()shoppin-&art)";
i (cart ,, null" {
cart , ne# Shoppin-&art(";session.set=ttribute()shoppin-&art)! cart";
3
...
do somethin- #ith our shoppin- cart object
-
8/16/2019 Servlets.ppt
45/51
)tt%Session 2ethods)tt%Session 2ethods
+u$lic String getId.
+u$lic $oolean isAe-.
+u$lic long get%reationTime.
+u$lic long get#ast"ccessedTime.
+u$lic int geta7InactiveInterval.
+u$lic void seta7InactiveInterval.intsecs
+u$lic void invalidate.
-
8/16/2019 Servlets.ppt
46/51
Associate n!o &( Session Associate n!o &( Session
HttpSession session , reuest.-etSession(true";
session.set=ttribute()reerrin-+a-e)!
reuest.-etHeader()Reerer)"";
Shoppin-&art cart ,
(Shoppin-&art"session.-et=ttribute()previous$tems)";
i (cart ,, null" {
cart , ne# Shoppin-&art(";
session.set=ttribute()previous$tems)! cart";
3
Strin- item$8 , reuest.-et+arameter()item$8)";
i (item$8 0, null" {
cart.add$tem(&atalo-.-et$tem(item$8"";
3
-
8/16/2019 Servlets.ppt
47/51
Session TerminationSession Termination
"utomaticF "fter a long enoughinterval .geta7InactiveInterval
-
8/16/2019 Servlets.ppt
48/51
Session TrackingSession Tracking
Amazon
Servlet Container
Session ID = !"#Y$
S%o&&in' Cart s
item ="!*+
$e%&e't
-
8/16/2019 Servlets.ppt
49/51
Session TrackingSession Tracking
Amazon
Servlet Container
Session ID = !"#Y$
S%o&&in' Cart s
item ="!*+
$e'!o('e:
Set-Cookie: 'i)=123*+,
-
8/16/2019 Servlets.ppt
50/51
Session TrackingSession Tracking
Amazon
Servlet Container
Session ID = !"#Y$
S%o&&in' Cart s
item ="!*+
$e%&e't:
Set-Cookie: 'i)=123*+,
-
8/16/2019 Servlets.ppt
51/51
Session TrackingSession Tracking
Amazon
Servlet Container
Session ID = !"#Y$
S%o&&in' Cart s
item ="!*
item !=,+
$e%&e't:
Set-Cookie: 'i)=123*+,