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

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

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

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

Java

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

Q&A

解決済

1回答

14922閲覧

action→サーブレット→JSPでJSP画面が真っ白

Chandler_Bing

総合スコア673

JSP

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

Java

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

0グッド

0クリップ

投稿2019/03/09 12:13

編集2019/03/10 08:52

一番初めのJSP(actionのPOST)からPOSTで飛んでくるサーブレットです。処理には問題ありません。(訂正)

Java

1//Basic1.java 2package servlet; 3 4import java.io.IOException; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12import javax.servlet.http.HttpSession; 13 14import model.Functions; 15 16/** 17 * Servlet implementation class Basic1 18 */ 19@WebServlet("/Basic1") 20public class Basic1 extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 protected void doPost(HttpServletRequest request, 24 HttpServletResponse response) 25 throws ServletException, IOException { 26 27 request.setCharacterEncoding("utf-8"); 28 29 String tobasic2 = request.getParameter("tobasic2"); 30 System.out.println(tobasic2); 31 32 if (tobasic2 != null) { 33 34 Functions fnc = new Functions(); 35 boolean error = false; 36 boolean birthError = false; 37 HttpSession session = request.getSession(); 38 39 String name = null; 40 String kananame = null; 41 String sex = null; 42 String year = null; 43 String month = null; 44 String day = null; 45 String birthOfDate = null; 46 String id = null; 47 String pass = null; 48 49 // リクエストパラメータの取得 50 request.setCharacterEncoding("UTF-8"); 51 if (fnc.checkValue(request.getParameter("name"))) { 52 name = request.getParameter("name"); 53 session.setAttribute("name", name); 54 } else { 55 //エラーメッセージをリクエストスコープに保存 56 request.setAttribute("nameError", "名前を入力してください"); 57 System.out.println("nameError"); 58 error = true; 59 } 60 61 if (fnc.checkValue(request.getParameter("kananame"))) { 62 kananame = request.getParameter("kananame"); 63 session.setAttribute("kananame", kananame); 64 } else { 65 request.setAttribute("kananameError", "ナマエを入力しください"); 66 System.out.println("kananameError"); 67 error = true; 68 } 69 70 if (fnc.checkValue(request.getParameter("sex"))) { 71 sex = request.getParameter("sex"); 72 session.setAttribute("sex", sex); 73 } else { 74 request.setAttribute("sexError", "性別を選択してください"); 75 System.out.println("sexError"); 76 error = true; 77 } 78 79 if (fnc.checkValue(request.getParameter("year"))) { 80 year = request.getParameter("year"); 81 session.setAttribute("year", year); 82 } else { 83 request.setAttribute("yearError", "西暦を選択してください"); 84 System.out.println("yearError"); 85 birthError = true; 86 } 87 88 if (fnc.checkValue(request.getParameter("month"))) { 89 month = request.getParameter("month"); 90 session.setAttribute("month", month); 91 92 } else { 93 request.setAttribute("monthError", "月を選択してください"); 94 System.out.println("monthError"); 95 birthError = true; 96 } 97 98 if (fnc.checkValue(request.getParameter("day"))) { 99 day = request.getParameter("day"); 100 session.setAttribute("day", day); 101 } else { 102 request.setAttribute("dayError", "日を選択してください"); 103 System.out.println("dayError"); 104 birthError = true; 105 } 106 107 //生年月日が全て入力されている場合のみ実行 108 if (birthError == false) { 109 boolean result = fnc.checkDate(year, month, day); 110 if (result) { 111 birthOfDate = year + month + day; 112 System.out.println("birth is valid"); 113 } else { 114 request.setAttribute("birthError", "生年月日が不正です"); 115 error = true; 116 System.out.println("birth is unvalid"); 117 } 118 } 119 120 if (fnc.checkId(request.getParameter("id"))) { 121 id = request.getParameter("id"); 122 session.setAttribute("id", id); 123 } else { 124 request.setAttribute("idError", "IDは5文字以上10文字以内の英数字で入力してください"); 125 System.out.println("idError"); 126 error = true; 127 } 128 129 if (fnc.checkPass(request.getParameter("pass"))) { 130 pass = request.getParameter("pass"); 131 } else { 132 request.setAttribute("passError", "PASSは6文字以上15文字以内で入力してください(英数字をそれぞれ1文字以上含む)"); 133 System.out.println("passError"); 134 error = true; 135 } 136 System.out.println("名前" + name); 137 System.out.println("ナマエ" + kananame); 138 System.out.println("性別" + sex); 139 System.out.println("年" + year); 140 System.out.println("月" + month); 141 System.out.println("日" + day); 142 System.out.println("生年月日" + birthOfDate); 143 System.out.println("id" + id); 144 System.out.println("pass" + pass); 145 146 if (error == false) { 147 //念のためもう一度格納 148 session.setAttribute("name", name); 149 session.setAttribute("kananame", kananame); 150 session.setAttribute("sex", sex); 151 session.setAttribute("birthOfDate", birthOfDate); 152 session.setAttribute("id", id); 153 session.setAttribute("pass", pass); 154 System.out.println("You've reached here"); 155 RequestDispatcher dispatcher = request.getRequestDispatcher("/Basic2"); 156 // RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/abc.jsp"); 157 dispatcher.forward(request, response); 158 } else { 159 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/basic1.jsp"); 160 dispatcher.forward(request, response); 161 } 162 } 163 164 } 165}

一つ上のサーブレットからこのサーブレットに飛んできます。

Java

1//Basic2.java 2package servlet; 3 4import java.io.IOException; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12import javax.servlet.http.HttpSession; 13 14@WebServlet("/Basic2") 15public class Basic2 extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doGet(HttpServletRequest request, 19 HttpServletResponse response) 20 throws ServletException, IOException { 21 22 //basic2.jspでforeachする配列 23 String[] levels = { "Lev1:まだ初心者", "Lev2:簡単な文法や単語なら分かる", "Lev3:基礎学習は終了済", "Lev4:特定の内容なら会話ができる", 24 "Lev5:内容に問わず会話ができる" }; 25 26 String[] purposes = { "趣味", "海外旅行", "試験対策", "海外赴任", "特になし" }; 27 28 String[] plans = { "毎日1レッスン", "毎日2レッスン", "毎日3レッスン", "毎日4レッスン" }; 29 30 String[] courses = { "日常英会話", "TOEIC", "ビジネス英会話" }; 31 32 HttpSession session = request.getSession(); 33 34 session.setAttribute("levels", levels); 35 session.setAttribute("purposes", purposes); 36 session.setAttribute("plans", plans); 37 session.setAttribute("courses", courses); 38 39 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/abc.jsp"); 40 dispatcher.forward(request, response); 41 42 } 43 44 protected void doPost(HttpServletRequest request, 45 HttpServletResponse response) 46 throws ServletException, IOException { 47 48 } 49}

このjsp(サンプルファイル)に飛んできますが真っ白になります。エラーなどはコンソールログに表示されません。

jsp

1 2<!---abc.jsp(サンプルのファイル)--> 3<%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Insert title here</title> 10</head> 11<body> 12<h2>成功です</h2> 13</body> 14</html>

これが画面が真っ白になっている時のURLです。

http://localhost:8120/Samples/Basic1

問題
一番初めのサーブレット(Basic1.java)の最後のシスアウトで、System.out.println("You've reached here");
と書いてありますが、formで値を送信する際、きちんと全ての項目に値を入れると表示されますので処理は問題ありません。

このプログラムは遷移先が
JSP(質問には載せてません。)→Basic1.java(サーブレット)→Basic2.java(サーブレット)→abc.jspとなっています。
これを実行すると記載のように真っ白になりますが、

JSP(質問には載せてません。)→Basic1.java(サーブレット)→abc.jspとするときちんとabc.jspが表示されます。どこが間違っていますでしょうか。
コンソールにはエラー情報を出ておりません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/09 13:05

疑問問題を解決せずにすすめてるのに問題無いと判断してるのが問題です。 その点を直さない限り回答者は減っていきます。
guest

回答1

0

ベストアンサー

最初のサーブレットで

java

1String tobasic2 = request.getParameter("tobasic2"); 2 3if (tobasic2 == null) { 4 ... 5}

としているので、リクエストパラメータに tobasic2が空文字でも設定されている場合は、このサーブレットは何もしないため、真っ白のページになるのではないでしょうか。

投稿2019/03/09 14:25

A-pZ

総合スコア12011

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

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

Chandler_Bing

2019/03/09 16:44

ありがとうございます。Basic1の処理は問題ありません。Basic2を追加するまではきちんと作動していました。
Chandler_Bing

2019/03/09 16:51

現在確認したところ、jsp(最初のサーブレットに飛ばすもの)のinputのsumitのnameが消えていました。 しかし、改善しないのでもう少し粘ります。
Chandler_Bing

2019/03/10 08:58

追記いたしました。よろしくお願いします。 また、先ほどの配列の件もありがとうございました。
A-pZ

2019/03/11 15:51

なるほど、最初のServletへはPOSTへ送信されているので、doPostで受けているんですね。 doPostで受けたサーブレットが、RequestDispatcherでfowrardしたときにも、POSTを使いますので、次の2番目のServletのdoPostへ遷移してしまうので、空白のページになるのでしょう。
Chandler_Bing

2019/03/12 08:32

返信ありがとうございます。 >RequestDispatcherでfowrardしたときにも、POSTを使いますので これは初耳でした。POSTはずっとformのみだと思っておりました。一度訂正し問題があれば報告させていただきます。
Chandler_Bing

2019/03/12 08:37

ありがとうございます。現在doGetに書かれているコードをそのままdoPostに移動させると、成功しました。ありがとうございました。
A-pZ

2019/03/12 12:34

正確には、 最初のServletへはPOSTへ送信されていて、RequestDispatcherのforwardをしたときには、同じHTTPメソッドを使うのでPOSTで送信→遷移先もdoPostが選ばれます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問