質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1495閲覧

Servletで値を保持するには

yufu8

総合スコア5

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2020/06/14 13:10

モンスターを倒すとレベルが上がっていくサイトを作成したいです。現状ではレベルを保持することができていません。MonsterServletのどこをどのように改善すればよいのかわからないのでご教授お願いいたします

MonsterServlet

1import java.io.IOException; 2 3import javax.servlet.RequestDispatcher; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9import javax.servlet.http.HttpSession; 10 11import model.MonsterBean; 12import model.MonsterLogic; 13import model.PlayerBean; 14 15@WebServlet("/monster") 16public class MonsterServlet extends HttpServlet { 17 18 final MonsterLogic logic = new MonsterLogic(); 19 20 @Override 21 protected void doGet(HttpServletRequest request, HttpServletResponse response) 22 throws IOException, ServletException { 23 24 PlayerBean playerBean = new PlayerBean("noName"); 25 HttpSession session = request.getSession(); 26 session.setAttribute("playerBean", playerBean); 27 28 //モンスターリストを取得して、リクエストスコープに格納 29 request.setAttribute("monsters", logic.getMonsters()); 30 31 //モンスター選択画面に遷移 32 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/Monster.jsp"); 33 dispatcher.forward(request, response); 34 35 } 36 37 @Override 38 protected void doPost(HttpServletRequest request, HttpServletResponse response) 39 throws IOException, ServletException { 40 41 request.setCharacterEncoding("UTF-8"); 42 PlayerBean playerBean = new PlayerBean("noName"); 43 44 request.setCharacterEncoding("UTF-8"); 45 //リクエストスコープにあるモンスターのIDを確認 46 int monsterId = Integer.parseInt(request.getParameter("monsterId")); 47 //モンスターの情報を取得 48 MonsterBean monsterBean = logic.getMonster(monsterId); 49 //モンスターとの勝敗結果を取得 50 boolean won = logic.battle(monsterBean.getWinRate()); 51 52 //結果の画面で表示するメッセージを格納するための変数 53 String msg = null; 54 55 //勝利した場合 56 if (won) { 57 58 //モンスターから得た経験値をレベルに加算 59 int level = playerBean.getLevel() + monsterBean.getExperience(); 60 playerBean.setLevel(level); 61 //勝利メッセージを設定 62 msg = monsterBean.getName() + "に勝利した!" + playerBean.getUserName() + "は" + playerBean.getLevel() 63 + "レベルになった!"; 64 65 } else { 66 //負けたため、レベルを1にして負けカウントを増やす 67 playerBean.setLevel(1); 68 playerBean.setLoseCount(1); 69 70 //敗北メッセージを設定 71 msg = monsterBean.getName() + "に敗北した・・・。" + playerBean.getUserName() + "は1レベルに戻った。敗北回数:" 72 + playerBean.getLoseCount(); 73 } 74 75 HttpSession session = request.getSession(); 76 session.setAttribute("playerBean", playerBean); 77 78 79 //結果の画面用のメッセージをリクエストスコープに設定 80 request.setAttribute("msg", msg); 81 82 //対戦結果画面に遷移 83 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/MonsterResult.jsp"); 84 dispatcher.forward(request, response); 85 86 } 87 88} 89

PlayerBean

1import java.io.Serializable; 2 3public class PlayerBean implements Serializable { 4 5 private static final long serialVersionUID = 1L; 6 7 private String userName; 8 private int level; 9 private int loseCount; 10 11 public PlayerBean(String userName) { 12 this.userName = userName; 13 //初期レベル 14 this.level = 1; 15 this.loseCount = 0; 16 } 17 18 public String getUserName() { 19 return userName; 20 } 21 22 public int getLevel() { 23 return level; 24 } 25 26 public void setLevel(int level) { 27 this.level = level; 28 } 29 30 public int getLoseCount() { 31 return loseCount; 32 } 33 34 public void setLoseCount(int loseCount) { 35 this.loseCount += loseCount; 36 } 37 38} 39

MonsterResult.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@page import="java.util.List"%> 4<%@page import="model.MonsterBean"%> 5 6<% 7 //スコープからメッセージを取得 8 String msg = (String) request.getAttribute("msg"); 9%> 10 11<!DOCTYPE html> 12<html> 13<head> 14<meta charset=UTF-8> 15<meta http-equiv="X-UA-Compatible" content="IE=edge"> 16<meta name="viewport" content="width=device-width, initial-scale=1"> 17<title>対戦結果</title> 18<!-- Bootstrapの読み込み --> 19<link 20 href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" 21 rel="stylesheet"> 22<!-- jQuery読み込み --> 23<script 24 src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 25<!-- BootstrapのJS読み込み --> 26<script 27 src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 28</head> 29<body class="bg-warning"> 30 <header> 31 <nav class="navbar navbar-default"> 32 <div class="container-fluid"> 33 <div class="collapse navbar-collapse"> 34 <ul class="nav navbar-nav"> 35 <li><div class="pull-left">${playerBean.userName} のレベル: 36 ${playerBean.level}</div></li> 37 </ul> 38 <ul class="nav navbar-nav navbar-right"> 39 <li><a href="/WExam0431/logout" role="button">ログアウト</a></li> 40 </ul> 41 </div> 42 </div> 43 </nav> 44 </header> 45 <div class="container"> 46 47 <p class="alert alert-info"><%=msg%></p> 48 <div class="col-md-2 col-md-offset-5"> 49 <a class="btn btn-primary" href="/WExam0431/monster" role="button">戻る</a> 50 </div> 51 </div> 52</body> 53</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2020/06/14 15:44

自分でどこまで調べたのでしょうか。 検索すればいくらでも方法は出てくると思いますが。
KoichiSugiyama

2020/06/14 17:34

デバッグして原因がわからないのであれば、どこの値がどう変わって欲しいのに変わっていないか具体的に示していただいた方が早く回答がつくと思います。
退会済みユーザー

退会済みユーザー

2020/06/14 22:10

そもそも、他の情報もほぞんしたやつではないのでは
guest

回答1

0

毎回新しくPlayerBeanを作成してセッションに保存しているようですが、保存したPlayerBeanをセッションから取得する処理がありませんね。しかるべき場所でgetしないと。

セッションの仕組みがよくわかっていないなら、下記サイトをよく読んで勉強しましょう。
いずれもjavaでは定番の解説サイトです。

hishidama様のところ
javadrive様のところ

投稿2020/06/15 02:29

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問