8月21日

復習としてSpringMVCを使ったWebアプリケーションを作成する。

ServletとJSPを使って作成した診断アプリを、SpringMVCを使って作成してみよう。

プロジェクト名: Shindan

5月29日の内容を参考にしてプロジェクトを作成する。

5月29日

6月2日の内容を参考にして mvc-config.xml を編集する。

6月2日

コントローラを作成する。
コントローラ: ShindanController.java

コントローラから shindan.jsp を表示させるコードを書く。

package jp.abc;

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
public class ShindanController {

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

この状態で、http://localhost:8080/Shindan/input にアクセスすると404エラーが発生する。
エラーで WEB-INF/view/shindan.jsp が見つからないといわれるので、shindan.jsp を作成する。

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>診断アプリ</title>
</head>
<body>

<form method="post" action="ShindanServlet">
<input type="text" name="name">さんの<br>
<input type="text" name="type">度を診断します<br>
<input type="submit" value="診断">

</form>

</body>
</html>

コントローラにPOSTメソッドのリクエストを受け取るためのメソッドを追加する。

package jp.abc;

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
public class ShindanController {

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

	@RequestMapping(value = "/input", method = RequestMethod.POST)
	public String form(Model model) {
		return "shindan";
	}
}

フォームのあとに、「○○さんの○○度はXX%です。」と表示する部分を追加する。
nameにデータがあるときだけ表示するように、JSTLの c:if タグで条件を指定する。

<!DOCTYPE html>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>診断アプリ</title>
</head>
<body>

<form method="post" action="input">
<input type="text" name="name">さんの<br>
<input type="text" name="type">度を診断します<br>
<input type="submit" value="診断">

</form>

<c:if test="${name != null}">
${name} さんの ${type} 度は、${percent}%です。<br>
</c:if>

</body>
</html>

名前と診断内容を表示するために、リクエストパラメータから値を取得する。
そのために、POSTメソッドを受け取る form メソッドに、@RequestParam アノテーションを追加した引数を追加する。

	@RequestMapping(value = "/input", method = RequestMethod.POST)
	public String form(@RequestParam(value = "name") String name,
					   @RequestParam(value = "type") String type,
					   Model model) {
		model.addAttribute("name", name);
		model.addAttribute("type", type);
		return "shindan";
	}

これで、名前と診断内容は表示できるようになる。

次に診断結果を表示できるようにする。
以前の ShindanServlet を参考にコードを追加する。

	@RequestMapping(value = "/input", method = RequestMethod.POST)
	public String form(@RequestParam(value = "name") String name,
					   @RequestParam(value = "type") String type,
					   Model model) {
		model.addAttribute("name", name);
		model.addAttribute("type", type);
		String s = name + type;
		int h = Math.abs(s.hashCode());
		h = h % 101;
		model.addAttribute("percent", h);
		return "shindan";
	}

これまでの診断結果をデータベースに保存するようにしてみよう!

そのためには、pom.xml にデータベース関連のライブラリを追加する必要があるので、
6月19日の内容を参照して pom.xml を変更する。

6月19日

さらに、database.properties ファイルと persistence.xml を追加する。
これも6月19日を参照すればOK。

また、6月19日の記録を参照し、application-config.xml ファイルも変更する。

ここまでやれば、データベースを利用する準備が完了。

デスクトップに作成した hsqldb.bat をダブルクリックして HSQLDB を起動する。

Shindan エンティティの作成

jp.abc パッケージを右クリックして、[新規]-[クラス]を選択する。
クラス名は「Shindan」とする。

package jp.abc;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Shindan {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column
	private long id;

	@Column
	private Date time;

	@Column
	private String name;

	@Column
	private String type;

	@Column
	private int value;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Date getTime() {
		return time;
	}

	public void setTime(Date time) {
		this.time = time;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}
}

次回予定

  • DAOインタフェースの作成
  • DAO実装クラスの作成
  • コントローラの修正
  • JSPの修正

以上を行えば、データベースにアクセスできるようになるはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です