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