通过配置<load-on-startup>1</load-on-startup>
可以让该servlet
在系统启动的时候进行初始化,在web.xml
中的配置如下,代码如下:
<servlet>
<!-- Servlet名 -->
<servlet-name>timerServlet</servlet-name>
<!-- Servlet的实现类 -->
<servlet-class>org.light4j.servlet.lifecycle.TimerServlet</servlet-class>
<!-- 配置应用启动时,创建Servlet实例 ,相当于指定@WebServlet的loadOnStartup属性 -->
<load-on-startup>1</load-on-startup>
</servlet>
从Servlet3.0
开始,servlet
即支持web.xml
配置,也支持在servlet
上面进行注解配置,官方文档说在注解上配置loadOnStartup=1
可以达到和web.xml
配置<load-on-startup>1</load-on-startup>
同样的效果,但是实际情况并不是这样,程序启动之后该servlet
并不运行,代码如下:
package org.light4j.servlet.lifecycle;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Date;
/**
* Servlet生命周期
*
* @author longjiazuo
*
*/
@WebServlet(loadOnStartup = 1)
public class TimerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
super.init(config);
Timer t = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(new Date());
}
});
t.start();
}
}
后来查找资料,需要在注解上面加上urlPatterns
属性,在web.xml
里可以不用配置这个<url-pattern>
,但是使用servlet3.0
注解必须要有urlPatterns
,完整代码如下:
package org.light4j.servlet.lifecycle;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Date;
/**
* Servlet生命周期
*
* <p>
* 下面的注解如果不添加urlPatterns={"/timerServlet"},则定时器不起作用。
*
* @author longjiazuo
*
*/
@WebServlet(urlPatterns = { "/timerServlet" }, loadOnStartup = 1)
public class TimerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
super.init(config);
Timer t = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(new Date());
}
});
t.start();
}
}
这样配置之后就可以了。
公众号ID:longjiazuoA

未经允许不得转载:人生设计师 » 使用@WebServlet注解配置loadOnStartup不起作用的解决方法