SpringMVCサンプルプロジェクト
Spring3でSpringMVCをやってみる。
Eclipseで「spring3-mvc-smpl」というプロジェクトで作る。
Maven2を利用。(なんで3じゃないねんって突っ込みは無しで。)
「Home」ページから名前を入力して、「Menu」ページで、こんにちはって言ってくれるサンプル。
POMを下記のように作成。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jp.sample.app</groupId> <artifactId>spring3-mvc-smpl</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <name>${project.artifactId}</name> <description>SpringMVC3のサンプル</description> <build> <plugins> <!-- コンパイラの設定 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> <dependencies> <!-- javax.servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Validation --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.CR3</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.0.Final</version> </dependency> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.2.RELEASE</version> </dependency> <!-- Spring Security --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-acl</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.1.2.RELEASE</version> </dependency> <!-- Tiles --> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> <version>2.2.2</version> <exclusions> <exclusion> <artifactId>jcl-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-servlet</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-template</artifactId> <version>2.2.2</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.4</version> <scope>test</scope> </dependency> </dependencies> </project>
次に以下を作成する。
- Homeページ用コントローラクラス(jp.sample.app.home.controller.HomeController)
- HTTPリクエストに対する処理を実行するクラス。
- @Controllerや@RequestMappingアノテーションを使用する。
- Menuページ用コントローラクラス(jp.sample.app.menu.controller.MenuController)
- HTTPリクエストに対する処理を実行するクラス。
- @Controllerや@RequestMappingアノテーションを使用する。
- Homeページ用フォームクラス(jp.sample.app.home.form.HomeForm)
- Homeページでテキストボックスから入力される値を格納するDTO。
- Homeページ用jsp(/WEB-INF/views/home.jsp)
- Menuページ用jsp(/WEB-INF/views/menu.jsp)
- 共通ヘッダ用jsp(/WEB-INF/views/common/include.jsp)
- 全て(上記)のjspのヘッダに挿入される。
- Bean定義ファイル(/WEB-INF/mvc-dispatcher-servlet.xml)
- web.xml
- Springが提供するサーブレットを登録する。
■Homeページ用コントローラクラス(jp.sample.app.home.controller.HomeController)
package jp.sample.app.home.controller; import java.util.Date; import jp.sample.app.home.form.HomeForm; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/sample") public class HomeController { @RequestMapping public String index(Model model) { return home(model); } @RequestMapping(value = "home", method = RequestMethod.GET) public String home(Model model) { model.addAttribute(new HomeForm()); Date date = new Date(); model.addAttribute("date", date); return "home"; } }
■Menuページ用コントローラクラス(jp.sample.app.menu.controller.MenuController)
package jp.sample.app.menu.controller; import javax.validation.Valid; import jp.sample.app.home.form.HomeForm; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/sample/menu") public class MenuController { @RequestMapping public String index(@ModelAttribute @Valid HomeForm form, BindingResult result, Model model) { if(result.hasErrors()) { return "home"; } model.addAttribute("name", form.getName()); return "menu"; } }
■Homeページ用フォームクラス(jp.sample.app.home.form.HomeForm)
package jp.sample.app.home.form; import java.io.Serializable; import org.hibernate.validator.constraints.NotEmpty; public class HomeForm implements Serializable { private static final long serialVersionUID = 1L; @NotEmpty private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
■Homeページ用jsp(/WEB-INF/views/home.jsp)
<html> <head> <title>Home</title> </head> <body> <h1>ようこそHomeページへ !</h1> <p>現在時刻は「 ${date}」です。</p> <spring:url value="/sample/menu" var="action" /> <form:form modelAttribute="homeForm" action="${action}"> <form:label path="name">あなたの名前は?</form:label> <form:input path="name" /> <form:errors path="name" cssStyle="color:red" /> <input type="submit" value="送信" /> </form:form> </body> </html>
■Menuページ用jsp(/WEB-INF/views/menu.jsp)
<html> <head> <title>Menu</title> </head> <body> <h1><c:out value="${name}" />さん、こんにちは !</h1> </body> </html>
■共通ヘッダ用jsp(/WEB-INF/views/common/include.jsp)
<%@ page contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8"%> <%@ page session="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <fmt:requestEncoding value="UTF-8" />
■Bean定義ファイル(/WEB-INF/mvc-dispatcher-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="jp.sample" /> <annotation-driven /> <resources mapping="/resources/**" location="/resources/" /> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> </beans:beans>
■web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC-Application-sample</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>characterEncodingFileter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFileter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> <page-encoding>UTF-8</page-encoding> <scripting-invalid>false</scripting-invalid> <include-prelude>/WEB-INF/views/common/include.jsp</include-prelude> </jsp-property-group> </jsp-config> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
以上でサンプル実装完了。
サンプルを起動した後ブラウザで「http://[FQDN]:8080/spring3-mvc-smpl/sample/home」へアクセスすると「ようこそHomeページへ !」と表示される。
名前を入力して「送信」を押すと挨拶してくれる。
空で「送信」を押すと入力チェックエラーになる。