前回のログの記事同様、汎用的なお話し。
Webアプリケーションを作っていると、アプリが起動したとき、アプリが停止した時に処理を入れたいことがままある。
そんな時にはServletContextListenerの出番。アノテーションを使えばweb.xmlの修正すらいらない(その代わり後からソースを追う人はどこにこのクラスがあるのかわかりにくい)
ServletContextListenerを継承したクラスを作成
3分クッキングよりも簡単。
ServletContextListenerを継承し、@WebListenerアノテーションをつけ、contextInitializedやcontextDestroyedを実装するだけ。
package com.tsu2t.spring8test.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@WebListener
public class TestContextListener implements ServletContextListener {
private static Log logger = LogFactory.getLog(TestContextListener.class);
public void contextDestroyed(ServletContextEvent ev) {
// nothing to do..
}
public void contextInitialized(ServletContextEvent ev) {
ServletContext context = ev.getServletContext();
logger.info("WebApp START!!");
context.log("+*+*+*+*+*+*+START+*+*+*+*+*+*+");
}
}
今回は起動時にログを出すようにしてみた。
起動させるとこんなログが出る。
16:22:54,385 INFO [com.tsu2t.spring8test.listener.TestContextListener] (MSC service thread 1-5) WebApp START!! 16:22:54,386 INFO [io.undertow.servlet] (MSC service thread 1-5) +*+*+*+*+*+*+START+*+*+*+*+*+*+
アノテーションを使わずにweb.xmlに下記を追加する方法もある。
<listener> <display-name>TestListner</display-name> <listener-class>com.tsu2t.spring8test.listener.TestContextListener</listener-class> </listener>