コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Spring MVC 4.0 No. 002 web.xmlの量を減らしたい

Java EE 6からプログラムからServletやFilterを登録できるようになりました。

そこで、001回目のweb.xmlをプログラムに置き換えてみます。

まず、web.xmlです。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 version="3.1">
 <jsp-config>
  <jsp-property-group>
   <url-pattern>*.jsp</url-pattern>
   <el-ignored>false</el-ignored>
   <page-encoding>utf-8</page-encoding>
   <scripting-invalid>true</scripting-invalid>
   <include-prelude>/WEB-INF/jsp/common/common.jsp</include-prelude>
  </jsp-property-group>
 </jsp-config>
</web-app>

web.xmlでは、ServletとFilterの設定を除去しています。

ついで、WebApplicationInitializerを実装した、MyWebApplicationInitializerを作成します。

package com.example.spring;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext context) throws ServletException {
        ServletRegistration.Dynamic dispacherServlet = context.addServlet(
                "dispatcher", new DispatcherServlet());
        dispacherServlet.setLoadOnStartup(1);
        dispacherServlet.addMapping("/");
        dispacherServlet.setInitParameter("contextConfigLocation",
                "/WEB-INF/spring/spring-context.xml");

        FilterRegistration.Dynamic characterEncodingFilter = context.addFilter(
                "CharacterEncodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "utf-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }
}

WebApplicationInitializerはServletContainerInitializerを実装した、SpringServletContainerInitializerが、呼び出します。

ソースは https://github.com/kuwalab/spring-mvc40 にあります。タグ002が今回のサンプルです。

まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_mvc/001
前回 http://kuwalab.hatenablog.jp/entry/spring_mvc/001
次回 http://kuwalab.hatenablog.jp/entry/spring_mvc/003