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

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

ただいまの
回答率

87.35%

Java(サーブレット)についてです。リクエストスコープにある値がjspで表示されない。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,169

score 16

表題の通りです。
下記のコードでは、メッセージを送信するとそのメッセージが表示されるシステムです。
メッセージに値を入れずに送信すると「つぶやきが入力されていません」というエラーが返ってきてほしいのですが
何もかえってきません。
これはなぜでしょうか?

サーブレット

package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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.Mutter;
import model.PostMutterLogic;
import model.User;

@WebServlet("/Main")
public class Main extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    // つぶやきリストをアプリケーションスコープから取得
    ServletContext application = this.getServletContext();
    List<Mutter> mutterList =
        (List<Mutter>) application.getAttribute("mutterList");
    // 取得できなかった場合は、つぶやきリストを新規作成して
    // アプリケーションスコープに保存
    if (mutterList == null) {
      mutterList = new ArrayList<>();
      application.setAttribute("mutterList", mutterList);
    }
    // ログインしているか確認するため
    // セッションスコープからユーザー情報を取得
    HttpSession session = request.getSession();
    User loginUser = (User) session.getAttribute("loginUser");
    if (loginUser == null) { // ログインしていない場合
      // リダイレクト
      response.sendRedirect("/docoTsubu/");
    } else { // ログイン済みの場合
      // フォワード
      RequestDispatcher dispatcher =
          request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
      dispatcher.forward(request, response);
    }
  }

  protected void doPost(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    // リクエストパラメータの取得
    request.setCharacterEncoding("UTF-8");
    String text = request.getParameter("text");

    // 入力値チェック
    if (text != null && text.length() != 0) {
      // アプリケーションスコープに保存されたつぶやきリストを取得
      ServletContext application = this.getServletContext();
      List<Mutter> mutterList =
          (List<Mutter>) application.getAttribute("mutterList");

      // セッションスコープに保存されたユーザー情報を取得
      HttpSession session = request.getSession();
      User loginUser = (User) session.getAttribute("loginUser");

      // つぶやきをつぶやきリストに追加
      Mutter mutter = new Mutter(loginUser.getName(), text);
      PostMutterLogic postMutterLogic = new PostMutterLogic();
      postMutterLogic.execute(mutter, mutterList);

      // アプリケーションスコープにつぶやきリストを保存
      application.setAttribute("mutterList", mutterList);
    } else {
      //エラーメッセージをリクエストスコープに保存
      request.setAttribute("errorMsg", "つぶやきが入力されていません");
    }

    // メイン画面にフォワード

    RequestDispatcher dispatcher =
        request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");

    dispatcher.forward(request, response);
  }
}


jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model.User,model.Mutter,java.util.List"%>
<%
    // セッションスコープに保存されたユーザー情報を取得
    User loginUser = (User) session.getAttribute("loginUser");
    // アプリケーションスコープに保存されたつぶやきリストを取得
    List<Mutter> mutterList = (List<Mutter>) application.getAttribute("mutterList");
    // リクエストスコープに保存されたエラーメッセージを取得
    String errorMsg = (String) request.getAttribute("errorMsg");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>どこつぶ</title>
</head>
<body>
    <h1>どこつぶメイン</h1>
    <p>
        <%=loginUser.getName()%>さん、ログイン中 <a href="/docoTsubu/Logout">ログアウト</a>
    </p>
    <p>
        <a href="/docoTsubu/Main">更新</a>
    </p>
    <form action="/docoTsubu/Main" method="post">
        <input type="text" name="text"> <input type="submit"
            value="つぶやく">
    </form>
    <% if (errorMsg != null) { %>
        <p><%=errorMsg%></p>
    <% } %>
    <%
        for (Mutter mutter : mutterList) {
    %>
    <p><%=mutter.getUserName()%><%=mutter.getText()%></p>
    <% } %>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • キャンセル

  • asahina1979

    2020/05/23 16:14

    とりあえず質問を消す人に回答は不要でしょう

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 87.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る