package firstservlet;import java.util.*;/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class ContextObject {
    private List list = new ArrayList();
    private MyTimer timer = null;
    private boolean isCont = true;    public ContextObject() {
    }    public void time() {
        Date some = new Date();
        list.add(some);
    }    public List getTime() {
        return list;
    }    public void startTimeStamp() {
        timer = new MyTimer();
        timer.start();
    }    public void stopTimeStamp() {
        isCont = false;
        timer.interrupt();
    }    class MyTimer extends Thread {
        public void run() {
            while (isCont) {
                try {
                    sleep(1000);
                } catch (InterruptedException ex) {
                    interrupt();
                    break;
                }
                time();
            }
        }
    }
}
package firstservlet;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Date;/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class SimpleServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=gb2312";    //Initialize global variables
    public void init(ServletConfig cnf) throws ServletException {
        super.init(cnf);
        ServletContext cnt = cnf.getServletContext();
        ContextObject obj = new ContextObject();
        obj.startTimeStamp();
        cnt.setAttribute("obj", obj);
        System.out.println("SimpleServlet.init()");
    }    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>ContextObject</title></head>");
        out.println("");
        out.println("<body><center>");
        ServletContext cnt = getServletContext();
        Object cobj = cnt.getAttribute("obj");
        if (cobj != null) {
            ContextObject obj = (ContextObject) cobj;
            List list = obj.getTime();
            writeTimeTable(out, list);
        } else {
            out.println("未找到 ContextObject!");
        }
        out.println("</center></body>");
        out.println("</html>");
        out.close();
    }    /**
     * writeTimeTable
     *
     * @param out PrintWriter
     * @param list List
     */
    private void writeTimeTable(PrintWriter out, List list) {
        int size = list.size();
        if (size != 0) {
            out.println("<table border=\"1\">");
            out.println("<tr><th>次数</th><th>时间</th></tr>");
            for (int i = 0; i < size; i++) {
                out.println("<tr>");
                out.println("<td>第" + (i + 1) + "次</td>");
                out.println("<td>" + ((Date) list.get(i)).toString() + "</td>");
                out.println("</tr>");
            }
            out.println("</table>");
        } else {
            out.println("无时间标记!");
        }
    }    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        doGet(request, response);
    }    //Clean up resources
    public void destroy() {
        ServletContext cnt = getServletContext();
        Object cobj = cnt.getAttribute("obj");
        if (cobj != null) {
            ContextObject obj = (ContextObject) cobj;
            obj.stopTimeStamp();
            cnt.removeAttribute("obj");
        }
        System.out.println("SimpleServlet.destroy()");
    }
}<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app>
  <servlet>
    <servlet-name>simpleservlet</servlet-name>
    <servlet-class>firstservlet.SimpleServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>simpleservlet</servlet-name>
    <url-pattern>/simpleservlet</url-pattern>
  </servlet-mapping>
</web-app>

解决方案 »

  1.   

    就是WEB页面上显示无时间标签,就是执行了else {
                out.println("无时间标记!");
            }
    可我不是想执行else里的啊,我的web.xml文件写的对吗,我这里不怎么清楚
      

  2.   

    因为servlet在你第一次访问的时候才初始化 所以你访问的时候没有数据 你刷新肯定有就有了你可以设置让这个servlet 与tomcat一起启动就可以了 第一次就看见数据
      <servlet>
        <servlet-name>simpleservlet</servlet-name>
        <servlet-class>firstservlet.SimpleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>这样改就可以了
      

  3.   

    List list = obj.getTime();
    加System.out.println(list);
    或加加System.out.println(list.size());
    打印一下list看看它是不是为空,
    如果不为空,size就大于一,
    就不应该出"无时间标记"了!
      

  4.   

    恩,刷新后是有了,可为什么是
    第1次Sat Feb 24 15:21:31 CST 2007
    第2次Sat Feb 24 15:21:32 CST 2007
    第3次Sat Feb 24 15:21:33 CST 2007
    第4次Sat Feb 24 15:21:34 CST 2007
    第5次Sat Feb 24 15:21:35 CST 2007
    第6次Sat Feb 24 15:21:36 CST 2007
    我不是让进程睡眠了10秒吗,那间隔应该至少10秒啊,为什么现在是一秒?
      

  5.   

    sleep(1000);
    你是休息1000毫秒也就是一秒啊