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