#### 建立一个 servlet 程序，用来实现会话跟踪，程序是 SessionTracker.java 完整代码如下：

import java.io.PrintWriter;

import java.io.IOException;

import java.util.Date;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class SessionTracker extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html;charset=GBK");

PrintWriter out = res.getWriter();

HttpSession session = req.getSession(true);

Integer totalCount = (Integer) getServletContext().getAttribute(

"servlets.total");

if (totalCount == null) {

totalCount = new Integer(1);

} else {

totalCount = new Integer(totalCount.intValue() + 1);

}

Integer count = (Integer) session.getAttribute("count");

if (count == null) {

count = new Integer(1);

} else {

count = new Integer(count.intValue() + 1);

}

session.setAttribute("count", count);

getServletContext().setAttribute("servlets.total", totalCount);

out.println("<html><head><title>SessionSnoop</title></head>");

out.println("<body><h1>会话(Session)详细信息</h1>");

out.println("当前会话访问本页面的次数： " + count + "<br/>");

out.println("本页面访问总次数: " + totalCount + "<br/>");

out.println("<h3>会话(session)信息:</h3>");

out.println("Session ID: " + session.getId() + "<br/>");

out.println("是否新会话: " + session.isNew() + "<br/>");

out.println("超时时间(TimeOut): " + session.getMaxInactiveInterval()

+ "<br/>");

out.println("创建时间: " + new Date(session.getCreationTime()) + "<br/>");

out.println("最后访问时间: " + new Date(session.getLastAccessedTime())

+ "<br/>");

out.println("</body></html>");

}

}

n 重写 public void doGet()方法：

1. 设置响应(response)内容类型 res.setContentType("text/html;charset=GBK");

2. 获得 response 的输出流，即 PrintWriter out = res.getWriter();

3. 获得 session 引用，即 HttpSession session = req.getSession(true);

4. 获得变量"servlets.total"的值，这个变量表示页面的总访问次数，"servlets.total"是应用程序(Application)范围的变量，Web 应用程序共享此变量。即 Integer totalCount = (Integer) getServletContext().getAttribute("servlets.total")。

5. 如果是第一次访问，赋值 1，即 if (totalCount == null){totalCount = new Integer(1);}

6. 否则，自增 1，即 else {totalCount = new Integer(totalCount.intValue() + 1)}

7. 获得变量"count"，这个变量表示当前会话(session)访问页面的次数。"count"为 Session 范围的变量。即 Integer count = (Integer) session.getAttribute("count")

8. 如果是第一次访问，赋值 1，即 if (count == null) {count = new Integer(1);}

9. 否则，自增 1，即 else {count = new Integer(count.intValue() + 1);}

10. 把"count"变量的值再保存到会话中，即 session.setAttribute("count", count);

11. 把"servlets.total"变量的值再保存到应用程序范围中，即 getServletContext().setAttribute("servlets.total", totalCount);

12. 输出访问次数，如 out.println("当前会话访问本页面的次数： " + count + "<br/>");out.println("本页面访问总次数: " + totalCount + "<br/>")

13. 最后输出会话的一些相关信息，如：out.println("Session ID: " + session.getId() + "<br/>")

n 修改 web.xml，配置 Servlet，web.xml 文件内容如下：

<servlet>

<servlet-name>SessionTracker</servlet-name>

<servlet-class>SessionTracker</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>SessionTracker</servlet-name>

<url-pattern>/tracker</url-pattern>

</servlet-mapping>

#### 4.3 部署运行

n 部署文件

· 编译 SessionTracker.java，把 class 文件放到 WEB-INF\classes\jsplession 目录下。

n 启动 Tomcat

n 在 IE 浏览器的地址栏中输入

http ://localhost:8080/jsp_test/tracker

n 关闭 IE（为了关闭 Session），重新打开 IE，输入

http ://localhost:8080/jsp_test/tracker