We will store the exact time a request is received. If the next request is received later than a certain threshold, we can potentially timeout the session. Many websites do this for security.
In this example, we will not actually timeout - we just want to demonstrate how to maintain 'state'.
We will maintain a simple Hashtable which maps the user ID (that we get from the cookie) to the time the request is received.
Here is what HelloWorld looks like now:
package org.confucius;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet {
private static int nextUserId = 0;
private static HashMap<String, Date> requestsTracker = new HashMap<String, Date>();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String cookieValue = getCookieValue(request.getCookies(), "userId");
if (cookieValue == null) {
cookieValue = String.valueOf(nextUserId);
Cookie userCookie = new Cookie("userId", cookieValue);
response.addCookie(userCookie);
nextUserId++;
}
Date now = new Date();
response.getWriter().write(
"Your last request was received on: "
+ requestsTracker.get(cookieValue) + ", updating to: "
+ now);
requestsTracker.put(cookieValue, now);
}
private String getCookieValue(Cookie[] cookies, String cookieName) {
if (cookies == null)
return null;
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName()))
return (cookie.getValue());
}
return null;
}
}
Build HelloWorld.war, deploy it, then point your browser to:
http://localhost:8080/HelloWorld/home
Each time you refresh the browser, you will see the time that the last request was received.
No comments:
Post a Comment