servlets.ppt

Upload: gaby67

Post on 06-Jul-2018

221 views

Category:

Documents


0 download

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*+,