前回のログの記事同様、汎用的なお話し。
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>