package timertest; import java.io.IOException; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; import java.util.Timer; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: TimerTestServlet01 */ public class TimerTestServlet01 extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); //開始時刻firstTimeと実行間隔peroidをweb.xmlから取得する。 String[] FirstTimeParts = {"04", "00", "00"}; long peroid = 86400000; try { InitialContext context = new InitialContext(); String firstTime = (String)context.lookup("java:comp/env/FirstTime"); FirstTimeParts = firstTime.split(":"); peroid = ((Long)context.lookup("java:comp/env/Period")).longValue(); } catch (NamingException e) { throw new ServletException("The parameter 'FirstTime' or 'Period' can not be read.", e); } Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(FirstTimeParts[0])); cal.set(Calendar.MINUTE, Integer.parseInt(FirstTimeParts[1])); cal.set(Calendar.SECOND, Integer.parseInt(FirstTimeParts[2])); //開始時刻が過去である場合には、開始時刻を一日遅らせる。 if (cal.getTimeInMillis() < Calendar.getInstance().getTimeInMillis()) { cal.add(Calendar.DATE, 1); } Date firstTime = cal.getTime(); Timer timer1 = new Timer(); timer1.scheduleAtFixedRate(new Task01(config.getServletContext()), firstTime, peroid); log("Task scheduled. firstTime:" + firstTime + " period:" + peroid + "[ms]"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); out.println("Hello, world."); } }