タイトル
TOPJavaspring → This Page

2.共通部分構築 Spring+MVC+DB+Test構築サンプル

前提

このページに記載している内容は 2018/09/24 に書かれたものです。
掲載している画面や方法が将来的に変更されている場合があります。
また、掲載しているインストール方法は Windows 8.1 の場合です。
開発環境は
・Windows 8.1
・JDK 8
・STS(Spring Tool Suite) 3.9.5
・PostgreSQL 9.5.14
とします。

目次

1.プロジェクトの作成
2.Maven Update Project
3.Maven clean
4.Maven install
5.確認実行
6.pom.xml編集
7.Maven Update Project
8.プロジェクトのJREを元に戻す
9.Java Compiler設定
10.Facets設定
11.index.jsp編集
12.result.jsp作成
13.TestController.java作成
14.mvc-config.xml編集
15.web.xml編集(Filter設定追加)
16.Maven clean
17.Maven install
18.Project Clean
19.確認実行
やることが多いですが、1つ1つは大したことがないので、めげずに頑張りましょう。

1.プロジェクトの作成

STS(Spring Tool Suite)を起動しましょう。
起動したらメニューから「File」>「New」>「Spring Legacy Project」を選択します。
図:STS

「New Spring Legacy Project」ダイアログが表示されます。
以下の通り入力・選択して「Finish」ボタンを押しましょう。
項目 入力・設定値
Project name お好きなプロジェクト名を入力しましょう
本サイトではどのDBアクセス方法を選択するかによって決めたいと思います。
(以降のページでも以下のプロジェクト名で説明するので合わせておいた方が無難です)
JdbcTemplate→WebDbSample1JdbcTemplate
EntityManager→WebDbSample2EntityManager
JpaRepository→WebDbSample3JpaRepository
Criteria API→WebDbSample4CriteriaAPI
Use default location チェックを入れたまま
Templates 「Simple Projects」>「Simple Spring Web Maven」を選択
Working sets チェックを入れない
図:New Spring Legacy Project

プロジェクトが作成されます。
(しばらく画面右下にBuild状況が表示されるのでそれが消えるまでは何も触らないこと)


2.Maven Update Project

プロジェクト名を右クリックして「Maven」>「Update Project」を選択します。
図:STS

「Update Maven Project」ダイアログが表示されます。
先ほど作成したプロジェクトにチェックが入っていることを確認し、「OK」ボタンを押します。
(しばらく画面右下にBuild状況が表示されるのでそれが消えるまでは何も触らないこと)
図:Update Maven Project


3.Maven clean

プロジェクト名を右クリックして「Run As」>「Maven clean」を選択します。
「Console」に「[INFO] Finished at ...」と表示されるまで待ちましょう。
図:STS
図:Console


4.Maven install

プロジェクト名を右クリックして「Run As」>「Maven install」を選択します。
先ほどと同様に「Console」に「[INFO] Finished at ...」と表示されるまで待ちましょう。
図:STS


5.確認実行

プロジェクト名を右クリックして「Run As」>「Run On Server」を選択します。
「Run On Server」ダイアログが表示されます。
以下の通り入力・選択して「Next」ボタンを押します。
項目 入力・設定値
Choose an existing server 選択(デフォルトで選択されているはず)
Server 「Pivotal tc Server ...」を選択
(デフォルトで選択されているはず)
Always use this server ... チェックを入れる
図:STS
図:Run On Server

右側の「Configured」に、作成したプロジェクトが入っていることを確認し、「Finish」ボタンを押します。
図:Run On Server

少し時間がかかりますが「Console」に状況が表示されていきます。
しばらくすると内蔵ブラウザが立ち上がり、「Click to enter」と表示されれば成功です。
図:Console
図:ブラウザ

場合によってはセキュリティの警告画面が表示されるかもしれません。
表示されたら「アクセスを許可する」を押しましょう。

表示されたのはプロジェクト作成時に自動作成されていた index.jsp です。
まだリンク遷移先がないのでクリックしてもエラーになります。
では実行確認ができたのでサーバを停止しましょう。
画面下にある「Servers」の赤い四角ボタンを押しましょう。
しばらくするとサーバーが停止します。
図:Server


6.pom.xml編集

さて、ここからが本番?です。
Spring+MVC+DB の環境設定を準備しましょう。
「pom.xml」を編集して「Maven」に必要なライブラリを揃えてもらいます。
ただし、ここではまだDBアクセスごとの個別の設定はせず、共通部分のみを設定します。

プロジェクト直下にある「pom.xml」をダブルクリックして開きます。
開いたら下のタブを「pom.xml」に切り替えます(最初からpom.xmlになっている場合もあります)
以下の内容に書き換えて保存します。
保存すると必要なライブラリのダウンロードやビルドが始まるのでしばらく待ちましょう。
(初回は結構時間がかかります)
図:pom.xml

赤文字の部分はプロジェクト名を入力しましょう。
<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.mitchy</groupId>
	<artifactId>WebDbSample1JdbcTemplate</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<properties>

		<!-- Generic properties -->
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		
		<!-- Web -->
		<jsp.version>2.2</jsp.version>
		<jstl.version>1.2</jstl.version>
		<servlet.version>3.1.0</servlet.version>
		
		<!-- Spring -->
		<spring-framework.version>5.0.2.RELEASE</spring-framework.version>

		<!-- Hibernate / JPA -->
		<hibernate.version>5.2.4.Final</hibernate.version>

		<!-- Logging -->
		<logback.version>1.2.3</logback.version>
		<slf4j.version>1.7.25</slf4j.version>

		<!-- Test -->
		<junit.version>4.12</junit.version>

	</properties>
	
	<dependencies>
	
		<!-- Spring MVC -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring-framework.version}</version>
		</dependency>
		
		<!-- Other Web dependencies -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>${jsp.version}</version>
			<scope>provided</scope>
		</dependency>
	
		<!-- Spring and Transactions -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring-framework.version}</version>
		</dependency>

		<!-- Logging with SLF4J & LogBack -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
			<scope>runtime</scope>
		</dependency>

		<!-- Hibernate -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		
		<!-- Test Artifacts -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring-framework.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

	</dependencies>	
</project>


7.Maven Update Project

プロジェクト名を右クリックして「Maven」>「Update Project」を選択します。
図:STS

「Update Maven Project」ダイアログが表示されます。
プロジェクトにチェックが入っていることを確認し、「OK」ボタンを押します。
(しばらく画面右下にBuild状況が表示されるのでそれが消えるまでは何も触らないこと)
図:Update Maven Project


8.プロジェクトのJREを元に戻す

プロジェクトの「JRE System Library」が「J2SE-1.5」になっているので変更します。
プロジェクトの「JRE System Library」を右クリックして「Properties」を選択します。
図:STS

「Properties for JRE System Library」ダイアログが表示されます。
「Workspace default JRE」を選択して「Apply and Close」ボタンを押します。
図:Properties for JRE System Library

これでプロジェクトの「JRE System Library」が「jdk1.8」になったと思います。
図:STS


9.Java Compiler設定

プロジェクト名を右クリックして「Properties」を選択します。
「Properties」ダイアログが表示されます。
左側のツリーから「Java Compiler」を選択します。
もしここで右側のドロップダウンリストが「1.8」になっていない場合は「1.8」にして「Apply」ボタンを押します。
警告が表示されたら「Yes」ボタンを押しましょう。
図:Properties


10.Facets設定

「Properties」ダイアログを開いたまま次の設定をします。
左側のツリーから「Project Facets」を選択します。
「Dynamic Web Module」を「3.1」に、「Java」を「1.8」にして
「Apply and Close」ボタンを押します。
図:Properties


11.index.jsp編集

プロジェクトを展開し、下のほうにあるsrcフォルダにある以下のファイルをダブルクリックして開きます。
src/main/webapp/index.jsp
リンクの記述箇所を"/showMessage.html"から"/test/check"に変更して保存しましょう。
図:プロジェクト
図:index.jsp


12.result.jsp作成

プロジェクト名を右クリックして「New」>「Other」を選択します。
図:STS

「New」ダイアログが表示されます。
ツリーから「Web」>「JSP File」を選択して「Next」ボタンを押します。
図:New

「New JSP File」画面でフォルダを
src/main/webapp/WEB-INF/view/test/
とし、「File name」を「result.jsp」として「Finish」ボタンを押します。
図:New JSP File

「result.jsp」の内容を以下のように書き換えて保存しましょう。
コントローラから受け取った data と list という名前の属性値を表示するだけのページです。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>テスト</title>
</head>
<body>
	<h1>DB取得結果</h1>
	<div>単体 = [${data}]</div>
	<div>リスト = [${list}]</div>
</body>
</html>

test フォルダに作成されていることを確認して下さい。
図:STS

13.TestController.java作成

プロジェクト名を右クリックして「New」>「Class」を選択します。
図:STS

「New Java Class」ダイアログが表示されます。
・「Package」は「jp.mitchy.controller」と入力する。
・「Name」は「TestController」と入力する。
・それ以外の項目はそのままにしておく
「Finish」ボタンを押します。
図:New Java Class

作成された「TestController.java」が開くので、内容を以下のように書き換えて保存しましょう。

package jp.mitchy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@RequestMapping("/test/*")
@Controller
public class TestController {
	@RequestMapping(value = "/check", method = RequestMethod.GET)
	public String test(Model model) {
		model.addAttribute("data", "なし");
		model.addAttribute("list", "なし");
		
		// /WEB-INF/view/test/result.jsp を表示
		return "test/result";
	}
}

クラス名に @RequestMapping("/test/*") を指定することで
http://サーバ/プロジェクト名/test/
のURLに対応したコントローラとなります。

同じくクラス名に @Controller を指定することで
MVC のコントローラとなります。

メソッド名に @RequestMapping(value = "/check", method = RequestMethod.GET)
を指定することで
http://サーバ/プロジェクト名/test/check
のURLに対応したメソッドとなります。
クラス名につけた @RequestMapping と メソッド名につけた @RequestMapping
の組み合わせの URL に対応します。

model.addAttribute("data", "なし");
を指定することで
先ほど JSP に記載した
${data}
に "なし" と表示されます。

そして最後の
return "test/result";
で /WEB-INF/view/test/result.jsp がレスポンスとしてクライアントに返されます。
これは次に出てくる mvc-config.xml でも解説します。


14.mvc-config.xml編集

src/main/webapp/WEB-INF/mvc-config.xmlをダブルクリックして開きます。
図:mvc-config.xml

<beans...>から</beans>の間の適当な場所に
<context:component-scan base-package="jp.mitchy.controller" />
を追記して保存しましょう。
これでコントローラーが先ほど作成したクラスのパッケージにあることが設定されました。
図:mvc-config.xml

また、
prefixが/WEB-INF/view/
suffixが.jsp
という設定箇所があります。
(図の緑カッコの中)

これが先ほど TestController のメソッドに記載した return
と連動しており、
"/WEB-INF/view/" + return 値 + ".jsp"
つまり
return "test/result";

/WEB-INF/view/test/result.jsp
となる仕組みです。


15.web.xml編集(Filter設定追加)

src/main/webapp/WEB-INF/web.xmlをダブルクリックして開きます。
図:web.xml

末尾の</web-app>の直前の行に以下のFilter設定を追記して保存しましょう。
これがないと日本語(全角文字列)が文字化けしてしまいます。

	<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>


16.Maven clean

プロジェクト名を右クリックして「Run As」>「Maven clean」を選択します。
「Console」に「[INFO] Finished at ...」と表示されるまで待ちましょう。
図:STS
図:Console


17.Maven install

プロジェクト名を右クリックして「Run As」>「Maven install」を選択します。
先ほどと同様に「Console」に「[INFO] Finished at ...」と表示されるまで待ちましょう。
図:STS

もしかしから以下のエラーが「Console」に表示されるかもしれません。
[ERROR] No compiler is provided in this environment.
そうなったら次の「18.Project Clean」を実施してから
再度「17.Maven install」をやってみましょう。


18.Project Clean

本作業は「17.Maven install」で
[ERROR] No compiler is provided in this environment.
のエラーが出たときだけ実施すればよいです。

STSメニューの「Project」>「Clean」を選択します。
図:STS

「Clean」ダイアログが表示されます。
プロジェクトにチェックが入っていることを確認して「Clean」ボタンを押します。
(JRE System Library や Project Facets を変更したあとはこれをやらないと後々のコンパイルでエラーになることがある)
図:Clean

再度「17.Maven install」をやってみましょう。


19.確認実行

プロジェクト名を右クリックして「Run As」>「Run On Server」を選択します。
図:STS

少し時間がかかりますが「Console」に状況が表示されていきます。
しばらくすると内蔵ブラウザが立ち上がり、「Click to enter」と表示されます。
図:ブラウザ

「Click to enter」のリンクをクリックしてみましょう。
リンク先 /test/check に連動する TestController クラスの test メソッドが呼び出され、
/WEB-INF/view/test/result.jsp が表示されることが確認できます。
図:ブラウザ

長かったですが、以上で共通部分構築の完了です。


ダウンロード

作成したプロジェクトのソースをダウンロードできます。
DBアクセス方法別に4つとも用意しています。

WebDbSample1JdbcTemplate.zip
WebDbSample2EntityManager.zip
WebDbSample3JpaRepository.zip
WebDbSample4CriteriaAPI.zip


更新履歴

2018/09/24 新規作成

TOPJavaspring → This Page