CS 318 - Week 9 Lecture - 3-29-13
* true fact: HTTP, by itself, is STATELESS
in "plain" HTTP, there is no way to associate
a request with a previous request
* there are various add-ons and kluges to
allow information from a previous request --
state information, if you will -- to
be associated with a request;
in Java, Java creates an HttpSession object
for each "logical" browser session;
we can add attributes to this session object,
we can retrieve attributes from this
session object,
we can invalidate this session when we're done
* basic Java syntax for this:
HttpServletRequest object has a method
getSession, one of whose versions accepts
a boolean argument:
getSession returns the current HttpSession
associated with the calling request,
OR if there is no current session and
the argument is true, return a new session
HttpSession session = request.getSession(true);
* NOTE!!!!!!
since this might modify the response
header (if cookies are the session
tracking mechanism), this needs to
be called BEFORE you retrieve a
PrintWriter or a ServletOutputStream
for the response!!!
* your session object has many useful methods.
Here are a few:
void setAttribute(String name, Object value)
* this binds an Object value with this
name in this session
Object getAttribute(String name)
* this returns the Object currently bound
to the given name in this session
returns null if NO object is bound
under this name
Boolean isNew()
* returns true if the client does not
yet know about this session
OR if the client chooses not to join
the session
void invalidate()
* invalidates the calling session and
unbinds any objects bound to it
* CLASS CODING STD - your code SHOULD
call invalidate when the session
is logically complete!
* closing the browser does NOT destroy
the session!
...although it CAN expire after some
amount of time,
...and if the server is restarted,
it would also be destroyed
String getId()
* returns a String containing the unique
identifier assigned to the calling
session
* fragment-examples:
in 1 servlet:
HttpSession session = request.getSession(true);
String whatsYourName = "Ann";
session.setAttribute("username", whatsYourName);
in another servlet:
HttpSession session = request.getSession(true);
...
out.println("Welcome, " +
(String) session.getAttribute("username")
+ "!");