我们开发了一个项目名称FirstApplication
,用于发送,使用来自Activemq
的消息并部署在Tomcat7
中。部署后,我们只需触发http://localhost:8080/FirstApplication/PackageName/SecondConsumer
链接一次到目前为止一切都很好。
我怀疑,稍后如果我们重新启动服务器,第一次我们必须触发该servlet对应的链接。而不是这样做,我想配置。
注意:我想要的是,只要Tomcat server
start.servlet放在WebApps/FirstApplication/WEB-INF/src/classes/PackageName/SecondConsumer.java
下,就应该自动评估servlet。
为此,我使用servletContextListener
类尝试了以下代码。
public class SecondConsumer extends HttpServlet implements ServletContextListener{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//my business code
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
}
并以下列方式在我的<Listener>
文件中添加了web.xml(which is placed under WebApps/FirstApplication/WEB-INF/web.xml)
。
<listener>
<listener-class>PackageName.SecondConsumer</listener-class>
</listener>
如果你观察我的代码,我没有在contextInitialized and contextDestroyed
方法下实现任何代码。我想在server
开始时评估这个servlet代码。
我试着用上面的方法,它不起作用。
请有人建议我。
感谢。
答案 0 :(得分:4)
你应该在实现ServletContextListener
的类中进行初始化,所以你需要这样的东西
@WebListener
public class AppServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
//do your init steps here
}
}
只要您的服务器启动或停止,这段代码就会执行。请注意,WebListener
注释仅适用于Java EE 6,在此之前您需要在<listener>
中定义web.xml
元素。
答案 1 :(得分:1)
Tomcat在运行时创建一个servlet实例,所以如果你想调用servlet,请使用在运行tomcat时实际触发的上下文列表器类。
谢谢
答案 2 :(得分:0)
我不太确定,你想要什么。如果您只是想在启动tomcat时执行代码,则可以配置ServletContextListener