Spring 4.1 を試す

こんにちわ、猫派のほげPGです。今回は Spring4 を試してみます

1、eclipseインストール

以下を各サイトを参考にインストールする。

eclipse

4.4を使用

 

2、プロジェクト作成

eclipse を起動し、新規作成>プロジェクト、mavenプロジェクトを選択。
WS000001
WS000002
次へ
WS000003
maven-archetype-webapp を選択
WS000004
以下を入力し、完了押下
グループID:jp.co.ois.hoge
アーティファクトID:sandbox
WS000005
プロジェクトはなぜかフォルダが欠損しているのでフォルダを作成する。

以下のフォルダを作成する。
src/main/java
src/test/java

3、pom.xmlの修正

以下をpom.xmlに追加。

<properties>
 <spring.version>4.1.4.RELEASE</spring.version>
</properties>
<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.17</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
 <artifactId>validation-api</artifactId>
 <version>1.1.0.Final</version>
</dependency>
<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>5.2.0.Alpha1</version>
</dependency>
<!-- javax.servlet -->
<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>3.1.0</version>
 <scope>provided</scope>
</dependency>
<dependency>
 <groupId>javax.servlet.jsp</groupId>
 <artifactId>javax.servlet.jsp-api</artifactId>
 <version>2.3.1</version>
 <scope>provided</scope>
</dependency>
<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>jstl</artifactId>
 <version>1.2</version>
</dependency>
<!-- Spring Framework -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-web</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>${spring.version}</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-support</artifactId>
 <version>${spring.version}</version>
</dependency>

 

4、web.xml の修正

WEB-INFの下の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">
 <filter>
 <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
 <servlet>
 <servlet-name>dispatcher</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/spring-context.xml</param-value>
 </init-param>
 </servlet>
 <servlet-mapping>
 <servlet-name>dispatcher</servlet-name>
 <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

 

5、spring-context.xml の作成

WEB-INFの下にspring-context.xmlを作成する。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:tx ="http://www.springframework.org/schema/tx"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-4.1.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
 <context:component-scan base-package="jp.co.ois.hoge.sandbox" />
 <mvc:annotation-driven />
 <bean
 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/views/" />
 <property name="suffix" value=".jsp" />
 </bean>
 <mvc:resources mapping="/resources/**" location="/resources/" />
</beans>

 

6、コントローラの作成

HogeController クラスの作成

package jp.co.ois.hoge.sandbox;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HogeController {
 @RequestMapping("/hoge")
 @ResponseBody
 public String hoge() {
 return "hogehoge !";
 }
}

 

7、動作確認

メニューから、新規>その他、サーバーのサーバー選択、次へ
WS000007
Apacheのtomcatを選択(バージョンは好きなのを)
WS000008
tomcatのフォルダを指定し、完了押下
WS000009
sandbox プロジェクトを右クリックし、実行>サーバーで実行を選択、次へ押下、完了押下。
WS000010WS000011WS000012
tomcatが起動したら、ほげってみる。
ブラウザで以下にアクセス
http://localhost:8080/sandbox/hoge
WS000013
ほげ!(good)

8、入力画面を作成してみる

入力値は名前とコメントの二つ。名前は1~10文字。コメントは1~999文字とする。
HogeController を以下のように修正

package jp.co.ois.hoge.sandbox;
import javax.validation.Valid;
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
public class HogeController {
 @ModelAttribute("hogeForm")
 public HogeForm createForm() {
 return new HogeForm();
 }
 @RequestMapping("/hoge")
 public String hoge(Model model) {
 return "hoge";
 }
 @RequestMapping("/hogehoge")
 public String hogehoge(@Valid HogeForm form, BindingResult result, Model model) {
 if (result.hasErrors()) {
 model.addAttribute("result", "error");
 return "hoge";
 }
 model.addAttribute("result", "success");
 return "hoge";
 }
}

HogeForm を作成

package jp.co.ois.hoge.sandbox;
import javax.validation.constraints.Size;
public class HogeForm {
 @Size(min = 1, max = 10)
 String name = null;
 @Size(min = 1, max = 999)
 String comment = null;
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getComment() {
 return comment;
 }
 public void setComment(String comment) {
 this.comment = comment;
 }
}

WEB-INF/views/hoge.jsp を作成

<%@page contentType="text/html; charset=utf-8" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
 <title>ほげ</title>
</head>
<body>
 <form:form modelAttribute="hogeForm" servletRelativeAction="/hogehoge" method="POST">
 <h1>ほげ</h1>
 <br><br>
 名前:<form:input path="name" />
 <form:errors path="name" /><br>
 コメント:<form:input path="comment" />
 <form:errors path="comment" /><br>
 <hr>
 <input type="submit" value="ほげ">
 </form:form>
 ${result}<br>
</body>
</html>

動作確認してみる。
http://localhost:8080/sandbox/hoge
WS000014
何も入力しないでほげ押下。
WS000015
名前:ほげ、コメント:ほげほげ、ほげ押下。
WS000016

9、formタグのactionプロパティについて

spring4になって、コンテキストパスが自動で設定されなくなった。代わりに、servletRelativeActionプロパティを設定すれば大丈夫なようだ。
※最初 ${pageContext.request.contextPath} としていたが、しっくりこないので、FormTag のソースを見てservletRelativeActionプロパティを探し当てた。

今回のプロジェクト一式は以下に置きました。
http://www.ois-yokohama.co.jp/oisblog/file/sandbox.zip

とりあえず、今回はここまで。次回はMyBatisを使ってDBへの保存を試してみる予定。

\ 最新情報をチェック /