⑴ java Web 启动时自动执行代码的几种方式
Web容器启动后执行代码的几种方式
其执行顺序为:
4===>5===>1===>2===>3
即指定init-method的Bean开始执行
接着实现spring的Bean后置处理器开始执行
然后是Servlet的监听器执行
再接下来是Servlet的过滤器执行
最后才是Servlet执行
1、实现Servlet监听器接口ServletContextListener
[java] view plain
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {
}
@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化执行
System.out.println("================>[ServletContextListener]自动加载启动开始.");
SpringUtil.getInstance().setContext(
<span style="white-space:pre"> </span>WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
<span style="white-space:pre"> </span>);
}
}
然后在web.xml文件配置该监听器
[html] view plain
<listener>
<listener-class>com.test.init.InitListener</listener-class>
</listener>
2、实现Servlet的过滤器Filter
[html] view plain
public class InitFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================>[Filter]自动加载启动开始.");
// 读取Spring容器中的Bean[此时Bean已加载,可以使用]
//写启动需要执行的代码
System.out.println("================>[Filter]自动加载启动结束.");
}
}
然后在web.xml文件配置过滤器即可
[html] view plain
<filter>
<filter-name>InitFilter</filter-name>
<filter-class>com.test.init.InitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>InitFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
3、编写一个Servlet,在web.xml里面配置容器启动后执行即可
[html] view plain
public class InitServlet extends HttpServlet {
/**
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================>[Servlet]自动加载启动开始.");
// 读取Spring容器中的Bean[此时Bean已加载,可以使用]
//执行想要的代码
System.out.println("================>[Servlet]自动加载启动结束.");
}
}
然后在web.xml文件配置该Servlet的启动方式为:容器启动后执行
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.test.init.InitServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>test</param-value>
</init-param>
<!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
关于启动后执行,由load-on-startup指定:
(1)当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。值越小,启动优先级越高;
(2)当是一个负数时或者没有指定时,表示该servlet被调用时才加载。
4、如果你使用Spring IOC作为Bean管理容器,那么可以指定init-method其中init-method表示bean加载成功后,立即执行某个方法。配置如下:start为要执行的方法名称
[html] view plain
<!-- service -->
<bean id="shopService" class="com.test.teach.service.ShopService" <span style="color:#33ffff;">init-method="start"</span>>
<property name="shopDao" ref="shopDao" />
</bean>
⑵ java WEB程序 每天自动执行某个操作
package com.timer.test; import java.util.Calendar; </SPAN></li>import java.util.Date; </SPAN></li>import java.util.Timer; </SPAN></li>import java.util.TimerTask; </SPAN></li> /**** </SPAN></li> * TimerTask与Timer * * @author bruceleey * */ public class TestTimer { </SPAN></li> static int count = 0; </SPAN></li> public static void showTimer() { </SPAN></li> TimerTask task = new TimerTask() { </SPAN></li> @Override </SPAN></li> public void run() { </SPAN></li> ++count; System.out.println("count执行了-->" + count); // 1次 </SPAN></li> } }; Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); </SPAN></li> int month = calendar.get(Calendar.MONTH)+1; </SPAN></li> int day = calendar.get(Calendar.DAY_OF_MONTH); </SPAN></li> /*** 定制每日00:24:00执行方法 ***/ </SPAN></li> calendar.set(year, month, day, 24, 24, 00); </SPAN></li> Date date = calendar.getTime(); Timer timer = new Timer(); </SPAN></li> timer.schele(task, date); } public static void main(String[] args) { </SPAN></li> showTimer(); } } 这个方法只要调用一次以后就会按时间自动执行,你可以在服务器启动的时候加入
⑶ java在web工程开发中如何实现多线程定时进行一项操作
给你写个大概思路吧
//创建处理房间状态的线程类,去执行改status的操作,操作在run方法里写好
class ChangeRoomStatusProcess extends Thread {...}
//主线程创建线程池,数量自定,当前为5
ScheledExecutorService ses = Executors.newScheledThreadPool(5);
...
ses.shutdown();
//当某个线程将status设置为1以后,设置定时器,30秒后执行ChangeRoomStatusProcess的run方法
ses.schele(new ChangeRoomStatusProcess(), 30000, TimeUnit.MILLISECONDS);
⑷ JAVA定时执行任务,每天定时几点钟执行任务
案例: 你想让他几点执行都ok
1.MyJob02
//首先我们需要定义一个任务类,比如为MyJob02 ,
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在
//这个方法中就是我们具体的任务执行的地方。
//由希望由调度程序执行的组件实现的接口
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 执行响应的任务.
System.out.println("HelloJob.execute,"+new Date());
}
2.
public static void main(String[] args) throws Exception {
//SchelerFactory 是一个接口,用于Scheler的创建和管理
SchelerFactory factory = new StdSchelerFactory();
//从工厂里面拿到一个scheler实例
//计划表(可能翻译的不太贴切),现在我们有了要做的内容,
//与调度程序交互的主要API
/*
* Scheler的生命期,从SchelerFactory创建它时开始,
到Scheler调用shutdown()方法时结束;Scheler被创建后,
可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作
(如暂停Trigger)。但是,Scheler只有在调用start()方法后,
才会真正地触发trigger(即执行job)
*/
Scheler scheler = factory.getScheler();
//具体任务.
//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();
}
⑸ 在java的Web开发过程中添加一个全局的定时器,如何处理
那就是所有打开的页面共享数据咯
方案有二:
一、
1.每个页面都添加定时器,
2.然后两秒钟或者5秒钟用ajax访问以下session,
如果session中的值比较小,就写值进去,如果session中的值比较大,就读值出来;这样就保证了每个页面上的计时器共享资源
二、与方案一唯一不同的一点就是,存值进cookie;
他们各有优缺点,
方案一的话:因为要计算请求时间,如果网速不好的话,就会有比较大的误差。
方案二的话:必须的保证用户的cookie没有禁用,而实际上很多用户的cookie都是禁用的。
个人比较喜欢第一种,如果真是没人操作的话,那时间差一些也无关紧要,
又没人看见。而且差的时间是多的,而不是少的,,多给用户一些时间,说不定还能多拉一些用户。
或者直接就不给给网速不好的用户这项功能
再或者判断网速不好的话就存cookie,如果cookie没有开的话,就不管了
个人想法仅供参考
⑹ 如何用 Java 实现 Web 应用中的定时任务
首先,定时任务不是只存在web端的。只要是java写的应用都可以用定时任务。
网上的开源库也有不少,比如quartz
⑺ java web规定时间点击按钮
你可以用js前端定时器
setInterval("testFunction()",time);//time你写时间就行,单位是毫秒,意思就是每隔好多time执行一次testFunction()函数。
⑻ Javaweb有哪些定时任务
TimerTask java自带的定时类
Quartz 定时器任务框架
⑼ Java中如何让web服务器启动的时候自动运行web程序中某个类的某个
1、首先让需要自动运行的类继承javax.servlet.http.HttpServlet
2、把需要自动运行的类中写一个init方法。(servlet应用程序启动的入口就是init方法)
publicvoidinit(){
System.out.println("这样在web容器启动的时候,就会执行这句话了!");
}
3、在web.xml中新建一个servlet,如下:
<servlet>
<servlet-name>GenerateData</servlet-name>
<servlet-class>com.yq.javaSCADA.business.impl.GenerateData</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
4、启动的web服务器,tomcat,weblogic,jboss,就会自动运行类中的init方法了。
⑽ Java下定时执行任务的方法有哪些
1)java.util.Timer
这个方法应该是最常用的,不过这个方法需要手工启动你的任务:
Timer timer=new Timer();
timer.schele(new ListByDayTimerTask(),10000,86400000);
这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。
2)ServletContextListener
这个方法在web容器环境比较方便,这样,在web server启动后就可以
自动运行该任务,不需要手工操作。
将ListByDayListener implements ServletContextListener接口,在
contextInitialized方法中加入启动Timer的代码,在contextDestroyed
方法中加入cancel该Timer的代码;然后在web.xml中,加入listener:
详细教程请参考: http://java.e800.com.cn/articles/2010/1012/1286862116545_1.html