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

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

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

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

1回答

4173閲覧

サーブレット、jspについて

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2018/07/08 04:03

編集2018/07/08 05:29

なぜ、jspが表示されないのかわかりません。
nullpointexceptionになります。

org.apache.jasper.JasperException: An exception occurred processing [/WEB-INF/Login.jsp]at line [12]

どなたかわかる方、教えていただけないでしょうか。→GETしたときは、表示されました。
しかし、POSTしてきたときにエラーになります。

org.apache.jasper.JasperException: An exception occurred processing [WEB-INF/Login.jsp] at line [12]と表示されます。→コメント頂いて、エラーにはなりません。

でも、肝心のエラーが表示されません.......なぜなんでしょうか.....

java

1LoginServlet.java 2 3package servlet; 4 5import java.io.IOException; 6import java.util.ArrayList; 7 8import javax.servlet.RequestDispatcher; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15 16import model.AccountLogic; 17import model.Login; 18 19@WebServlet("/LoginServlet") 20public class LoginServlet extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 protected void doGet(HttpServletRequest request, 24 HttpServletResponse response) 25 throws ServletException, IOException { 26 27 28 ArrayList<String> error = new ArrayList<>(); 29 request.setAttribute("error", error); 30 error.add(""); 31 32 33 //フォワード 34 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 35 dispatcher.forward(request, response); 36 } 37 38 protected void doPost(HttpServletRequest request, 39 HttpServletResponse response) 40 throws ServletException, IOException { 41 42 43 //リクエストパラメータの取得 44 request.setCharacterEncoding("UTF-8"); 45 String userId = request.getParameter("userId"); 46 String pass = request.getParameter("pass"); 47 48 //配列を用意 49 ArrayList<String> error = new ArrayList<>(); 50 51 if(userId == null) { 52 error.add("ログインIDを入力してください。"); 53 request.setAttribute("error", error); 54 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 55 dispatcher.forward(request, response); 56 }else if(pass == null){ 57 error.add("パスワードを入力してください。"); 58 request.setAttribute("error", error); 59 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 60 dispatcher.forward(request, response); 61 } 62 63 //ログイン処理の実行 64 Login rs = new Login(); 65 rs.setUserId(userId); 66 rs.setPass(pass); 67 AccountLogic bo = new AccountLogic(); 68 boolean result = bo.execute(rs); 69 70 //ログインの成否によって処理を分岐 71 72 73 74 if (result) { //ログイン成功時 75 76 //セッションスコープにユーザーIDを保存 77 HttpSession session = request.getSession(); 78 session.setAttribute("userId", userId); 79 80 //フォワード 81 RequestDispatcher dispatcher = request.getRequestDispatcher("/ListScreen"); 82 dispatcher.forward(request, response); 83 } else { 84 //ログイン失敗時 85 // 86 87 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 88 dispatcher.forward(request, response); 89 90 } 91 } 92 } 93

java

1Login.jsp 2 3<!DOCTYPE HTML> 4<html lang="ja"> 5<head> 6<%@ page language="java" contentType="text/html; charset=Windows-31J" 7 pageEncoding="Windows-31J"%> 8<%@ page import="java.util.ArrayList"%> 9</head> 10 11 12<body> 13 <form action="/gyomuhokoku/LoginServlet" method="post"> 14 <h1>ログイン</h1> 15 <% 16 ArrayList<String> error = (ArrayList<String>) request.getAttribute("error"); 17 if (error != null) { 18 for (int i = 0; i < error.size(); i++) { 19 %> 20 <%=error.get(i)%> 21 <% 22 } 23 %> 24 <% 25 } 26 %> 27 ユーザーID:<input type="text" name="userId" id="notice-input-1"> <br> 28 パスワード:<input type="text" name="pass" id="notice-input-2"> <br> 29 <button type=submit>ログイン</button> 30 </form> 31</body> 32</html>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/20 07:09

解決済みにしました。対応が遅くなりました。
guest

回答1

0

ベストアンサー

LoginServlet.javaで、errorオブジェクトをrequestにsetAttribute()していないのが原因と思われます。

まず、エラーは、Login.jspの12行目でnullのオブジェクトにアクセスしようとしているよ、という例外です。
Login.jspの12行目(と思われる付近)を見てみると、

<% ArrayList<String> error = (ArrayList<String>) request.getAttribute("error"); for(int i = 0; i < error.size(); i++){

この辺の、特にerrorオブジェクトあたりが怪しそうだと思ったので、LoginServlet.javaを見に行きました。

そうしたら、

error.add("ログインIDを入力してください。"); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); dispatcher.forward(request, response);

errorオブジェクトにエラーメッセージをセットしてから、requestオブジェクトにsetAttribute()していないようですので

error.add("ログインIDを入力してください。"); request.setAttribute("error", error); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); dispatcher.forward(request, response);

とすれば、jspで取得できるようになるのではないでしょうか。
jspでgetAttribute("error")するためには、事前に request.setAttribute("error", errorという文字列で取得したいオブジェクトや値) をしておかなければいけません。

参考:https://www.javadrive.jp/servlet/dispatch/index3.html

投稿2018/07/08 04:13

編集2018/07/08 04:17
yukapome789

総合スコア361

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

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

退会済みユーザー

退会済みユーザー

2018/07/08 04:59

ご回答ありがとうございます。しかし、POSTのときに同じようなエラーになってしまいます。
yukapome789

2018/07/08 05:09 編集

POSTだからではなく、errorオブジェクトがセットされない正常な場合だからエラーになる、ではないですか? 下記のfor文はerrorオブジェクトがnullじゃなかったら実行するようにすれば良いと思いますよ。(if文でfor文を囲む) <% ArrayList<String> error = (ArrayList<String>) request.getAttribute("error"); for(int i = 0; i < error.size(); i++){ %> <%=error.get(i) %> <% } %> ↓ <% ArrayList<String> error = (ArrayList<String>) request.getAttribute("error"); if(error != null){ for(int i = 0; i < error.size(); i++){ error.get(i); } } %>
退会済みユーザー

退会済みユーザー

2018/07/08 05:18

エラーにならないようになりました! "errorオブジェクトがセットされない正常な場合だからエラーになる" そうですね!! エラーが表示されるはずなんですが.....
yukapome789

2018/07/08 05:21

どこにエラーメッセージを表示させようとしていますか? <body>タグで囲まれた中じゃないと、コンテンツ内には表示されませんよ。しかも<head>タグが閉じられてないです。
退会済みユーザー

退会済みユーザー

2018/07/08 05:23

<h1>タグの下に表示させたいです。
yukapome789

2018/07/08 05:26 編集

じゃあ<h1>タグの下に表示させたい文字列を出力している処理を<% %>で組み込めば良いと思いますよ。ここまでできてるんだからわかると思います、試してみてください。
退会済みユーザー

退会済みユーザー

2018/07/08 05:29

試しました...でもうまくいきません...
退会済みユーザー

退会済みユーザー

2018/07/08 05:30

祈りたくなっちゃいます。(無駄な行為ですけど)
yukapome789

2018/07/08 05:32

じゃあLoginServlet.javaでエラーメッセージが本当に格納されているか、System.out.println()で出力させてみていけば良いと思いますよ。どう試してうまくいかないのかわからないのでこれ以上はわからないです。
退会済みユーザー

退会済みユーザー

2018/07/08 05:42

できました。
退会済みユーザー

退会済みユーザー

2018/07/08 05:44

nullで条件をかいているのがよくなかったです。""のときと書き直したら、動きました!! ありがとうございます。
yukapome789

2018/07/08 05:48

よかったですね。一つのエラーを解消しても別のエラーが続いて嫌になることもあると思いますが、一つずつ解消していけばいつか意図通り動きますので、がんばってくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問