MVCに分割して以下のようなジャンケンゲームを作成してみよう。勝敗数はゲーム中保持される。
セッションスコープを利用すること。

●実行すると以下のような画面が表示される。

●手を選んで送信を押すと結果が表示される

●カウントをリセットするをクリックするとリセットされる

1.新規動的プロジェクトでrspgameを作成する。
2.modelパッケージにRspクラスを以下のように作成する。
●model.Rsp.java

package model;

import java.io.Serializable;

public class Rsp implements Serializable{
	private String myHand;
	private String pcHand;
	private String result;
	private int win;
	private int lose;

	public Rsp(){}
	public String getMyHand() {
		return myHand;
	}
	public void setMyHand(String myHand) {
		this.myHand = myHand;
	}
	public String getPcHand() {
		return pcHand;
	}
	public void setPcHand(String pcHand) {
		this.pcHand = pcHand;
	}
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
	public int getWin() {
		return win;
	}
	public void setWin(int win) {
		this.win = win;
	}
	public int getLose() {
		return lose;
	}
	public void setLose(int lose) {
		this.lose = lose;
	}

}

3.modelパッケージにRspLogicクラスを以下のように作成する
●model.RspLogic.java

package model;

public class RspLogic {
	public void execute(Rsp rsp,String hand) {
		rsp.setMyHand(hand);
		String[] hands= {"グー","チョキ","パー"};
		rsp.setPcHand(hands[(int)(Math.random()*hands.length)]);
		if(rsp.getMyHand().equals(rsp.getPcHand())) {
			rsp.setResult("引き分け");
		}else if(rsp.getMyHand().equals("グー") && rsp.getPcHand().equals("チョキ")
				|| rsp.getMyHand().equals("チョキ") && rsp.getPcHand().equals("パー")
				|| rsp.getMyHand().equals("パー") && rsp.getPcHand().equals("グー")
				) {
			rsp.setResult("あなたの勝ち");
			rsp.setWin(rsp.getWin()+1);
		}else {
			rsp.setResult("あなたの負け");
			rsp.setLose(rsp.getLose()+1);
		}

	}
}

4.controllerパッケージの中にIndexクラスを作成する。
●controller.Index.java

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Rsp;
import model.RspLogic;

/**
 * Servlet implementation class Index
 */
@WebServlet("/index.html")
public class Index extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String action=(String)request.getParameter("action");
		if(action != null && action.equals("reset")) {
			HttpSession session=request.getSession();
			session.removeAttribute("rsp");
			response.sendRedirect("/rspgame/");
		}else {
		RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/view/index.jsp");
		rd.forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String hand=(String)request.getParameter("hand");
		if(hand==null) {
			request.setAttribute("err", "手を入力してください!");
			RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/view/index.jsp");
			rd.forward(request, response);
			return;
		}
		HttpSession session=request.getSession();
		Rsp rsp=(Rsp)session.getAttribute("rsp");
		if(rsp == null) {
			rsp=new Rsp();
		}
		RspLogic logic=new RspLogic();
		logic.execute(rsp, hand);
		session.setAttribute("rsp", rsp);
		doGet(request,response);
	}

}


5.WebContent/WEB-INF/の中にviewフォルダを作成しその中にindex.jspを以下のように作成する。
●WebContent/WEB-INF/view/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="model.*"%>
 <%
String err=(String)request.getAttribute("err");
 Rsp rsp=(Rsp)session.getAttribute("rsp");
 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ジャンケンゲーム</title>
</head>
<body>
<h1>ジャンケンゲーム!</h1>
<%if(err !=null) {%>
<p style="color:red;"><%=err %></p>
<%} %>
<form action="/rspgame/index.html" method="post">
<input type="radio" id="gu" name="hand" value="グー" <%if(rsp !=null && rsp.getMyHand().equals("グー")){ out.print(" checked");} %>><label for="gu">グー</label>
<input type="radio" id="choki" name="hand" value="チョキ" <%if(rsp !=null && rsp.getMyHand().equals("チョキ")){ out.print(" checked");} %>><label for="choki">チョキ</label>
<input type="radio" id="per" name="hand" value="パー" <%if(rsp !=null && rsp.getMyHand().equals("パー")){ out.print(" checked");} %>><label for="per">パー</label>
<input type="submit" value="送信">
</form>
<%if(rsp != null){%>
<p>あなたは<%=rsp.getMyHand() %></p>
<p>PCは<%=rsp.getPcHand() %></p>
<p><%=rsp.getResult() %></p>
<p>Win:<%=rsp.getWin() %></p>
<p>Lose:<%=rsp.getLose() %></p>
<a href="/rspgame/index.html?action=reset">カウントをリセットする。</a>
<% 	}%>
</body>
</html>

6.実行してみよう。