SpringプロジェクトにSpring MVCを設定する。
- 前回は、Springのプロジェクトを作ってTomcatを設定するところまでやりました。
- 環境
- Spring MVC を設定します。
- 次回は、簡単なアプリを作ってみます。
- この本を読みながらやっています。
前回は、Springのプロジェクトを作ってTomcatを設定するところまでやりました。
Spring MVC を設定します。
pom.xmlに依存関係を追加します。
- pom.xml に追記して依存関係を追加していきます。
Spring MVC のモジュールを指定します。
spring-webmvc を指定すると Spring Web やその他のSpring Frameworkの依存モジュールへの依存関係を解決できます。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency>
Hibernate(ハイバネート) Validator を指定します。
Hibernate Validatorは、Bean Validation のリファレンス実装です。
Spring MVC は Bean Validation の仕組みを利用して入力チェックをします。
fits.hatenablog.com
you-tk.hatenablog.com
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
JCL inplement over SLF4 と Logback を指定します。
Spring はJCL(Apache Commons Logging)のAPIを使ってログ出力を行います。
そのため、SLF4JのAPIにロギング処理をブリッジするJCLの実装クラスを提供するライブラリである JCL inplement over SLF4 と
SLF4Jの実装クラスを提供するライブラリであるLogbackを指定します。
ponsuke-tarou.hatenablog.com
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency>
ContextLoaderListener のセットアップ
ContextLoaderListener クラスをサーブレットコンテナに登録することで、Webアプリケーション用のアプリケーションコンテキストを生成できます。
www.weblio.jp
qiita.com
空のコンフィギュレーションクラスを作成します。
package example.config; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { }
作成したコンフィギュレーションクラスをweb.xmlに設定して、アプリケーションコンテキストを生成できるようにします。
src/main/webapp/WEB-INF/web.xmlを開いて追記していきます。
<listener> <!-- ContextLoaderListenerクラスをサーブレットコンテナのリスナクラスとして指定します. --> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <!-- AnnotationConfigWebApplicationContextクラスをサーブレットコンテナのパラメータに指定します. --> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </context-param> <context-param> <!-- 作成したコンフィギュレーションクラスをサーブレットコンテナのパラメータに指定します. --> <param-name>contextConfigLocation</param-name> <param-value>example.config.AppConfig</param-value> </context-param>
DispatcherServlet のセットアップ
DispatcherServletクラスをサーブレットコンテナに登録することで、Spring MVC のフロントコントローラを利用できるようにします。
Spring MVCではWebアプリケーション用のアプリケーションコンテキストとは別に、DispatcherServlet 用のアプリケーションコンテキストを作成します。
DispatcherServlet 用のコンフィギュレーションクラスを作成します。
package example.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * DispatcherServlet用のコンフィギュレーションクラス. * EnableWebMvcアノテーション を指定すると、Spring MVC を利用するために必要となるコンポーネントのBean定義が自動で行われる. * ComponentScanアノテーション を指定すると、value属性に指定されたパッケージの配下にある Component や Controller などの * アノテーションを付与したクラスがスキャンされ、アプリケーションコンテキストにBean登録される. */ @Configuration @EnableWebMvc @ComponentScan("example.app") public class WebMvcConfig extends WebMvcConfigurerAdapter { // WebMvcConfigurerAdapterクラスを継承すると、デフォルトで適用されるBean定義を簡単にカスタマイズできる。 }
DispatcherServletクラスをサーブレットコンテナに登録します。
src/main/webapp/WEB-INF/web.xmlを開いて追記していきます。
<servlet> <servlet-name>app</servlet-name> <servlet-class> <!-- DispatcherServletクラスをサーブレットコンテナに登録します. --> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <!-- contextClassパラメータにAnnotationConfigWebApplicationContextを指定します. --> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </init-param> <init-param> <!-- contextConfigLocationパラメータに作成したコンフィギュレーションクラスを指定します. --> <param-name>contextConfigLocation</param-name> <param-value>example.config.WebMvcConfig</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!-- DispatcherServlet を使用してリクエストをハンドリングするURLのパターンを定義します. --> <servlet-name>app</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
日本語が文字化けしないようにCharacterEncordingFilter のセットアップをします。
CharacterEncordingFilterクラスをサーブレットコンテナに登録することで、画面から入力した日本語が文字化けしないようにします。
src/main/webapp/WEB-INF/web.xmlを開いて追記していきます。
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class> <!-- CharacterEncodingFilterクラスをサーブレットコンテナに登録します. --> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <!-- encodingパラメータにリクエストパラメータの文字エンコーディングとしてUTF-8を指定します. --> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <!-- forceEncodingパラメータにリクエストとレスポンスの文字エンコーディングを上書きするかを指定します. trueを指定してリクエストは強制的に指定したUTF-8に上書きされ、レスポンスもUTF-8となります. --> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <!-- CharacterEncodingFilterを適用するリクエストのURLパターンを指定します. --> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Viewを判別できるように ViewResolver をセットアップします。
Spring MVC では、ViewResolver を使用してView名を解決して使用するViewを判別します。
以下メソッドを作成したWebMvcConfigに追加します。
/** ViewResolverのセットアップ用メソッド. */ @Override public void configureViewResolvers(ViewResolverRegistry registry) { // ViewResolverRegistryクラスのjspメソッドを呼び出し JSP 用のViewResolverをセットアップします。 // これにより、/WEB-INFディレクトリ配下に格納されているJSPファイルがViewとして扱われます。 registry.jsp(); }
JSPからSpring MVCのtaglibが利用できるように定義を追加します。
以前作成したinclude.jspに定義を追加します。
ponsuke-tarou.hatenablog.com
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>