SpringでMySQLを利用してみる（Part 3: コントローラとビュー）

Part 1: [プロジェクトの作成](https://qiita.com/shoko93/items/99d95c292a78f3a77597)
Part 2: [データ保存のためのクラスを作成](https://qiita.com/shoko93/items/39737cf79792d23d8d1e)

Part 3 (最終回）では、コントローラとビューについて説明したいと思います。
具体的には以下のフォルダー構造の中のMainController.java、index.jsp、saved.jspのコードを紹介したいと思います。

![directory.png](https://qiita-image-store.s3.amazonaws.com/0/326104/dec5f30c-1603-5696-df2d-9cd213bcb8fd.png)

コントローラには三つのメソッドが定義されています。

---
###indexメソッド
ルート（localhostの場合、localhost:8080）にアクセスされた場合の処理
index.jsp（ホームページ）を表示します。

###showAllUsersメソッド
/all にアクセスされた場合の処理
まず空のStringを用意し、forループを利用し、各ユーザの名前、メールアドレスを追加してきます。最終的に生成されたStringをResponseBodyとして返し、データベースに登録されているユーザの一覧を表示します。

###addUserメソッド
フォームのAddボタンが押された場合の処理
Formクラスのオブジェクトに保存された入力データをデータベースにデータに移します。データ保存後、saved.jspに移動し、登録された名前とメールアドレスを表示します。

##コード

MainController.java

```java

package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {
	
	// This means to get the bean called userRepository
	// Which is auto-generated by Spring, we will use it to handle the data
	@Autowired 
	private UserRepository userRepository;

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index(Model model) {
		return "index";
	}

	@GetMapping("/all")
	public @ResponseBody String getAllUsers() {
		String body = "";
		for (User user : userRepository.findAll()) {
			body += user.getName() + ": " + user.getEmail() + "<br>";
		}
		return body;
	}
	
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String addUser(
			Model model, @ModelAttribute("loginForm") Form form
	) {
		model.addAttribute("name", form.getUserName());
		model.addAttribute("email", form.getUserEmail());
		
		User n = new User();
		n.setName(form.getUserName());
		n.setEmail(form.getUserEmail());
		userRepository.save(n);
		
		return "saved";
	}
}
```

##ビュー

以下がビューのコードです。

フォーム（index.jsp）

```html

<%@ page language="java"
  contentType="text/html;charset=UTF-8"
  pageEncoding="UTF-8" %>
  
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>

<!DOCTYPE html>
<html>
  <head>
   <meta charset="utf-8">
   <title>From</title>
  </head>
  <body>
    <a href="/all">Show users</a>
    <f:form modelAttribute="form" action="add" method="post">
      <div>
        <label for="userName">Name: </label>
        <input type="text" id="userName" name="userName">
      </div>
      <div>
        <label for="userEmail">Email: </label>
        <input type="text" id="userEmail" name="userEmail">
      </div>
      <div>
        <input type="submit" value="Add">
      </div>
    </f:form>
  </body>
</html>
```
データ登録完了画面（saved.jsp)

```html

<%@ page language="java"
  contentType="text/html;charset=UTF-8"
  pageEncoding="UTF-8" %>
  
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
  <head>
   <meta charset="utf-8">
   <title>From</title>
  </head>
  <body>
    <p>Saved</p>
    <p>Name: ${name}</p>
    <p>Email: ${email}</p>
    <a href="/">Home</a>
  </body>
</html>
```

##実行
プロジェクトを実行するためにApplication.javaを作成します。

```java

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

作成が終わったら、プロジェクトを右クリックし、Run As->Spring Boot Appを選択します。
この状態で、localhost:8080にアクセスすると以下のホームページが表示されます。
![home2.png](https://qiita-image-store.s3.amazonaws.com/0/326104/d58b3fe1-27ce-6e43-b284-c53a5fb0eb98.png)