Using the Session and Application Objects

Online programs are by default stateless—that is, when you load a page a number of times in succession, the data in the page is reinitialized each time. If you want to track, say, the number of times the user has accessed the page, you need to specifically store that data somewhere.

In a standard desktop program, where you're interacting with the user while the program is running, you can store data in variables. That data won't be reset to its default values the next time you look at it. Using JSP sessions, you actually can do the same thing in JSP—you can interact with the user as part of a “session.”

While the session is active, you can store data in it, and that data will be preserved on the server in between user accesses to the page. You can set your variables in one page access, and they'll hold the same data the next time you see the page, as long as the session hasn't timed out (the default session timeout is 30 minutes).

JSP session objects are based on the javax.servlet.http.HttpSession interface. The data you store in a session is stored as session attributes. You can use the session object's setAttribute method to store data, and you can use the getAttribute method to recover that data as long as the session is active. You'll find the significant methods of the javax.servlet.http.HttpSession interface in Table 5.2.

Table 5.2. The Significant javax.servlet.http.HttpSession Methods
MethodDoes this
void addCookie(Cookie cookie)Adds the specified cookie to the response object
java.lang.Object getAttribute(java.lang. String name)Returns the object of the given name in this session
java.util.Enumeration getAttributeNames()Returns a Java Enumeration of String objects containing the names of all the objects in this session
long getCreationTime()Returns the time when this session was created (measured in milliseconds since midnight January 1, 1970 GMT)
long getLastAccessedTime()Returns the last time the client sent a request in with this session, as the number of milliseconds since midnight January 1, 1970 GMT
int getMaxInactiveInterval()Returns the maximum time, in seconds, that the server will keep this session open between client accesses
void invalidate()Invalidates this session
boolean isNew()Returns a value of true if the client does not yet know about the session
void removeAttribute(java.lang.String name)Removes the object with the specified name from this session
void setAttribute(java.lang.String name, java.lang.Object value)Connects an object to this session, using the given name
void setMaxInactiveInterval(int interval)Specifies the time, in seconds, between client requests before the server will invalidate this session

This is all best seen in an example. For instance, say you were trying to create a hit counter and therefore needed to store the number of times a page has been viewed. You're not going to get very far doing something like this, where you simply increment a variable each time a page is accessed, as shown in ch05_06.jsp:

<HTML>
    <HEAD>
        <TITLE>A non-working hit counter</TITLE>
    </HEAD>

    <BODY>
        <H1>A non-working hit counter</H1>
        <%
            int counter = 0;
            counter++;
        %>
        Number of times you've been here: <%=counter%>
    </BODY>
</HTML>

The problem is that each time the JSP is displayed, all the data in it is reinitialized, which means that the counter variable will never hold more than 1, no matter how many times you view the page, as shown in Figure 5.8.

Figure 5.8. A non-working hit counter.


..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.221.140.111