我的第一个java定时器

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时,

接下来就去开发我的第一个java定时器吧,Java计时器实用程序允许您执行线程或任务在一个预先确定的将来的时间,并根据一组这些任务可以重复频率。
设计和实现一个计时器,会用到model-control-view(MVC)设计模式。

开始:

首先来构w建一个最简单的java web 项目吧。这里我用的是最myeclipse,好处自然不必多说,谁用谁知道,当然如果

你要用其他IDE也可以。

在myeclipse中创建一个新的web应用程序很简单,点击File-new-WebProject,输入我们的项目名就可以了。

这个时候会系统会生成很多东西,我们找到WebRoot 下面的index.jsp页面,输入

Hello World!

启动我 们的tomcat,好了这个时候我们的第一个web项目就构建完成了;

现在我们已经有了自己的第一个 java web 程序了,可以尝试去写一个java web 计时器了;

表示层(View)

我们通常把web应用程序的表示层称为视图展现层,。 它将包括一个屏幕显示计时器在任何时候的状态,以及一组按钮控制计时器的激活(启动计时器)和失活(停止计时器)。
您还可以定义定时器的间隔秒重复一个导演的任务。 最后,一个刷新屏幕按钮将更新事件通知显示在屏幕上。

模型层

模型层主要有两个类,MyTimerDisplay(其目的是报告的状态计时器,它可以显示).

先看一看他们的结构体系:

Display类有三个方法和构造函数。 在构造函数中Display(),display属性初始化为一个空字符串。

该方法getDisplay()返回属性的内容display
最后,该方法insert(value)接受一个字符串作为参数,

创建了一个换行符,并将其添加到display;

 public void insert(String value) {
        Calendar now = Calendar.getInstance();
        String stamp = now.get(Calendar.HOUR_OF_DAY)+":"+now.get(Calendar.MINUTE)+
                ":"+now.get(Calendar.SECOND)+" - ";
        display+=stamp+value+"\n<br>";
    }

MyTimer直接与JSP页面交互。MyTimer可以执行各种操作,包括启动一个计时器(timerStarted()),停止计时器(timerStopped()),并在屏幕上显示事件通知(getDisplay())。
它包含两个属性:对象displaytimer

当对象myTimer被创建时,构造函数传递一个参数叫什么seconds,它的类型为Integer(该参数定义了定时器的时期,这是转换为毫秒。Timer是一个具体的类,属于Java实用程序包和允许一个线程操作任务,可以在需要时启动在未来某个时间和停止。
它的scheduleAtFixedRate()方法是用来计划任务重复固定利率执行。 这需要三个参数:任务执行(MyTask),延迟计时器开始前(设置为0),和时间转换为毫秒。 创建并启动一个计时器,就创建一个新的对象myTimer

 public MyTimer(Integer seconds) {
        timer = new Timer();
        long msec = 1000;
        display = new Display();

        timer.scheduleAtFixedRate(new MyTask(), 0*msec,
                seconds.intValue()*msec);

        display.insert("Timer is started.");
    }

计时器的任务时间表是定义为MyTask类,此类继承自TimeTask,并扩展了TimerTask——另一个类的Java实用程序包。MyT

ask作为MyTimer的一个私人内部类,允许操作对象display
因此,MyTask作用是为了在一个时间段显示的去调用执行

display对象的insert方法.

public class MyTimer {
    private Timer timer;
    private Display display;
    private String snapshot;
    public MyTimer(Integer timeSecond) {
    }
    private class MyTask extends TimerTask {
        @Override
        public void run() {
            // task to do
            display.insert("New event.");
        }

timerStopped()方法停止计时器,它的实现非常简单。 它调用timer对象的cancel()方法,然后创建一个事件通知,显示在屏幕上的web应用程序。

 public void timerStopped() {
        timer.cancel();
        display.insert("Timer has stopped.");
    }

最后一个方法getSnapshot()将作为一个字符串返回的结果的方法getDisplay()从对象display中提取getDisplay();
该方法用于更新web应用程序的屏幕。

 public String getSnapshot() {
        snapshot=display.getDisplay();
        return snapshot;
    }

创建接口引入JSTL

<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

由于,我们的秒数是1-9,所以可以利用JSTL,循环出来一个简易的下拉式列表框,供我们选择

<%
Integer seconds[] = {new Integer(1),new Integer(2),new Integer(3),
                    new Integer(4),new Integer(5),new Integer(6),
                    new Integer(7),new Integer(8),new Integer(9)};
request.setAttribute("seconds", seconds);

Integer second=(Integer) session.getAttribute("second");
if(second==null) {
    session.setAttribute("second", seconds[0]);
}
%>
</pre><strong></strong><div><strong></strong></div><div><strong>完善视图层</strong></div><div><strong></strong><pre name="code" class="html"><html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <style type="text/css">
            #foo { overflow-y: hidden; }
            .bar { float: left; margin:5px 5px 5px 5px; }
            .screen {border:solid 4px;width:500px;height:300px;
                     background-color:beige; padding: 5px 5px 5px 5px;
                     overflow:scroll}
	</style>
    </head>
    <body>
        <h1>Hello World!</h1>
        <div id="foo">
            <div class="bar">
                <form method="post" action="start.action">
                  	  间隔 (秒)
                    <select name="second">
                        <c:forEach items="${seconds}" var="row">
                            <c:if test="${row != second}">
                                <option>${row}</option>
                            </c:if>
                            <c:if test="${row == second}">
                                <option selected="">${row}</option>
                            </c:if>
                        </c:forEach>
                    </select>
                    <input type="submit" value="开始  计时">
                </form>
            </div>
            <div class="bar">
                <form method="post" action="stop.action">
                    <input type="submit" value="停止  计时">
                </form>
            </div>
            <div class="bar">
                <form method="post" action="control/doRefresh.jsp">
                    <input type="submit" value="刷新">
                </form>
            </div>
        </div>
        <c:if test="${mytimer == null}">
            <div class="screen" style="border-color:red">
                ${display}
            </div>
        </c:if>
        <c:if test="${mytimer != null}">
            <div class="screen" style="border-color:green">
                ${display}
            </div>
        </c:if>
    </body>
</html>

配置

 <servlet>
    <servlet-name>StratServlet</servlet-name>
    <servlet-class>servlet.StartServlet</servlet-class>
  </servlet>
 <servlet-mapping>
    <servlet-name>StratServlet</servlet-name>
    <url-pattern>/start.action</url-pattern>
  </servlet-mapping>

	 <servlet>
    <servlet-name>StopServlet</servlet-name>
    <servlet-class>servlet.StopServlet</servlet-class>
  </servlet>
 <servlet-mapping>
    <servlet-name>StopServlet</servlet-name>
    <url-pattern>/stop.action</url-pattern>
  </servlet-mapping>

控制层

这里控制层,我用了两种不同的方法,一种是使用在JSP页面引入JSTL,进行判断,跳转。还有一种是使用Servlet,进行控制跳转。其实一个JSP也就是一个简易的Servlet,在JSP页面进行流程控制有一个好处,就是不用到Web.xml里面去配置,比较简单,方便。这里我两种方式都采用了。

@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		try {
			//得到间隔秒数
			Integer second = new Integer(req.getParameter("second"));
			//得到对象
			MyTimer mytimer = (MyTimer) req.getSession()
					.getAttribute("mytimer");
			//判断对象是否存在,如果存在,就表明重复点击了开始按钮,这里先结束一下,当前的线程,再开始新的;
			if (mytimer != null) {
				// stop timer
				mytimer.timerStopped();
			}
			//新对象,新方法,新线程
			mytimer = new MyTimer(second);
			req.getSession().setAttribute("mytimer", mytimer);
			req.getSession().setAttribute("display", mytimer.getSnapshot());
			req.getSession().setAttribute("second", second);
			resp.sendRedirect("\\index.jsp");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

如果我们去JSP页面去控制的话,那么首先先去创建一个文件夹,我这里取名叫control,接着在里面写方法.

<%@page contentType="text/html" pageEncoding="UTF-8" import="data.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%
Integer second= new Integer(request.getParameter("second"));

MyTimer mytimer = (MyTimer) session.getAttribute("mytimer");
if(mytimer!=null) {
    // stop timer
    mytimer.timerStopped();
}
mytimer = new MyTimer(second);
session.setAttribute("mytimer", mytimer);
session.setAttribute("display", mytimer.getSnapshot());
session.setAttribute("second", second);
%>

<c:redirect url="/index.jsp"/>

好了到这里一个简易的Java计时器就完成了,接下来看一看运行效果吧;

源代码已上传,想看看的可以去下载http://download.csdn.net/detail/liaodehong/9052595

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-31 02:19:09

我的第一个java定时器的相关文章

java 定时器的几种实现方式以及 配置参数的说明

2.java中常见的定时器 1)借助Java.util.Timer来实现 2)OpenSymphony社区提供的Quartz来实现 3.介绍Timer 利用Timer开发定时任务是主要分为两个步骤: 1)创建定时任务类 示例代码: package org.lzstone.action import java.util.TimeTask public class LzstoneTimeTask extends TimeTask{ public void run(){ //执行的定时器任务 } }

整理:java定时器。

本文纯属个人思路,如有错误,请指正. java的Timer依赖Thread,每一个Timer实际上都是一个Thread. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.util.TimerTask; /**  * 本类仅为实现TimerTask,意义不大.  * @author 9082046**@qq.com  *  */ public class Task  extends TimerTask {       public void run()

java定时器实现总结

前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("MyTimerTask, now: " + new SimpleDateFormat("y

java 定时器的使用

在北京这边实习也一个多月了,也接触了不少东西,今天领导开会,说服务器压力太大,客户很不满意,访问速度上要求很苛刻,我们项目里的一些操作,没有必要写成动态的都改写成静态的,每天定时更新一下静态html页面里面的内容(因为客户每天会定时更新一些内容,而且只更新一次). 听得我好蒙啊,我头一次听说java 的定时操作呢!要命的东西,好坑的啊,晚上抽出了时间,学习了一下java的定时器,也就是一些基本的操作. java定时器主要用到两个类:Timer(计划任务调度类)和TimerTask(具体任务类)

java定时器

以下内容根据 JavaTM Tutorial 和相关API doc和网上的资料翻译整理,以供日后查看和参考: 1.描述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: import java.util.Timer; import java.util.TimerTask; /** * Simple demo that uses java.util.T

一个java程序员自学IOS开发之路(四)

根据上图,由于我是一个Java程序员,前面两个阶段还是学的比较快的,但是由于电脑配置不行,光是开启虚拟机登陆OS系统就卡的不要不要的了,在那里面写代码简直是煎熬= =,后面的UI学习又要启动ios模拟器,根本无法进行. 于是下定决心,入手一台Macbook pro,告别我用了四年的联想~今天本本到货啦,哈哈^_^,可以愉快的继续了 2015/10/14 Day 15 为了便于开发者打造各式各样的优秀app,UIKit框架提供了非常多功能强大又易用的UI控件 2015/10/16 Day 16 第

分享一个java Map实现的cache manager,定时清除缓存起来的值

原文:分享一个java Map实现的cache manager,定时清除缓存起来的值 源代码下载地址:http://www.zuidaima.com/share/1550463676140544.htm 用来存储短暂对象的缓存类,实现Map接口,内部有一个定时器用来清除过期(30秒)的对象. 为避免创建过多线程,没有特殊要求请使用getDefault()方法来获取本类的实例. package com.zuidaima.modules.common.util; import java.util.A

Java定时器的使用(Timer简介)

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作.这时候我们就要去设置个定时器,Java中最方便.最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务. 1.简介 Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 Timer 安排为一次执行或重复执行的任务.实际上就是一

java定时器的使用

java定时器的使用(Timer) 1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等. 对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. privatejava.util.Timer timer; timer = newTimer(true); timer.schedule( newjava.util.TimerTask() { public void run() {//server.checkNewMail(); 要操作的方法} }, 0