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

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

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

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

4452閲覧

ログインだけのアプリケーションを作ったのですが、nullpointとなってしまいます。どうぞよろしくお願いします。

edoooooo

総合スコア476

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/04/24 08:25

編集2016/04/24 08:47

すでにデータベースでCREATE TABLBE やINSERT をすませログイン時に入力した
nameとpassが一致したらログインできるコードを書きました。しかしログイン時にnullpointとなってしまいます。

エラーには、loginResult.jspの <% for(Mutter mutter:mutterList){ %>

<p><%if(mutterList!=null && mutter.getUserName()!=null && mutter.getUserPass()!=null){ %> </p>のなかだと思うのですがわかりません. どうぞよろしくお願いします。

エラー

java

1HTTP Status 500 - java.lang.NullPointerException 2 3type Exception report 4 5message java.lang.NullPointerException 6 7description The server encountered an internal error that prevented it from fulfilling this request. 8 9exception 10 11org.apache.jasper.JasperException: java.lang.NullPointerException 12 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556) 13 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477) 14 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 15 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 16 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 17 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 18 servlet.Login.doPost(Login.java:63) 19 javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 20 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 21 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 22root cause 23 24java.lang.NullPointerException 25 org.apache.jsp.WEB_002dINF.jsp.loginResult_jsp._jspService(loginResult_jsp.java:110) 26 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 27 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 28 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 29 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 30//字数制限のため省略させていただきました。

index.jsp

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7<title>ログインだけのやつ</title> 8</head> 9<body> 10<h1>ログインだけのやつにようこそ</h1> 11<form action="/example24/Login" method="post"> 12ユーザー名:<input type="text" name="name"><br> 13パスワード:<input type="password" name="pass"><br> 14<input type="submit" value="ログイン"> 15</body> 16</html>

Login.java(servlet)

java

1package servlet; 2 3import java.io.IOException; 4import java.util.List; 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//import model.GetMutterListLogic; 15import model.LoginLogic; 16 17import model.Mutter; 18//import model.PostMutterLogic; 19import model.User; 20 21 22@WebServlet("/Login") 23public class Login extends HttpServlet { 24 private static final long serialVersionUID = 1L; 25 26 27 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 29 //リクエストパラメータの取得 30 request.setCharacterEncoding("UTF-8"); 31 String name=request.getParameter("name"); 32 String pass=request.getParameter("pass"); 33 34 //Userインスタンス(ユーザー情報お)の生成 35 User user=new User(name,pass); 36 37 //ログイン処理 38 39 LoginLogic loginLogic=new LoginLogic(); 40 //execute()で帰ってきたmutterListを代入 41 List<Mutter>mutterList=loginLogic.execute(user); 42 43 //mutterListをリクエストスコプに保存? 44 request.setAttribute("mutterList", mutterList); 45 /* }else{ 46 //エラーメッセージ 47 request.setAttribute("errorMsg","つぶやきが入力されていません"); 48 */ 49 //このエラーメッセージは、どちらにしろ変更の必要はあるがとりあえず今は、エラーは、表示しない Redirectだけにしておく 50 51 52 //リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 53 //して、それらがnullでないかをif文で確認 54 //これは、LoginResult.jspでやる 55 56 //これは、jspでの記入方法がわからなかったため 57 //ここに書く 58 HttpSession session=request.getSession(); 59 session.setAttribute("loginUser", user); 60 //ログイン結果画面にフォワード 61 RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); 62 dispatcher.forward(request,response); 63 64 } 65 }

LoginLogic.java(model)

java

1package model; 2import java.util.List; 3import dao.MutterDAO; 4public class LoginLogic { 5 //GetMutterListLogicのfindAll()やnew MutterDAOをここでやる 6 7 //Login.java(serlvetのexecuteめそっとのコードにコンパイルエラーが出るからここでstaticに変更 8 public static List<Mutter>execute(User user){ 9 MutterDAO dao=new MutterDAO(); 10 List<Mutter>mutterList=dao.findAll(user); 11 return mutterList; 12 //mutterListを呼び出し元のLogin.java(servlet)に返す 13 } 14}

MutterDAO.java(dao)

java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11//ここでUserをimportしているのに,なぜpStmt.setString(1, user.getName()); 12//pStmt.setString(2, user.getPass());のuserの下線にコンパイルエラーが出るのでしょうか? 13import model.User; 14import model.Mutter; 15 16public class MutterDAO { 17 18 private final String DRIVER_NAME="org.h2.Driver"; 19 private final String JDBC_URL="jdbc:h2:file:/Users/endo/Documents/networkspace/example23/h2data.dat"; 20 private final String DB_USER="sa"; 21 private final String DB_PASS=""; 22 23 public List<Mutter>findAll(User user){ 24 Connection conn=null; 25 List<Mutter>mutterList=new ArrayList<Mutter>(); 26 try{ 27 Class.forName(DRIVER_NAME); 28 conn=DriverManager.getConnection(JDBC_URL,DB_USER,DB_PASS); 29 30 String sql="SELECT NAME,PASS FROM MUTTER WHERE NAME=(?)AND PASS=(?)"; 31 PreparedStatement pStmt=conn.prepareStatement(sql); 32 //Insert文中の「?」に使用する値を設定しSQLを完成 33 pStmt.setString(1, user.getName()); 34 pStmt.setString(2, user.getPass()); 35 36 //SELECTを実行 37 ResultSet rs=pStmt.executeQuery(); 38 39 //SELECT文の結果をArrayList二格納 40 while(rs.next()){ 41 42 //データベースのNAMEとPASSをuserNameとuserPass二代入 43 String userName=rs.getString("NAME"); 44 //ここもString text=rs.getString("TEXT"); 45 String userPass=rs.getString("PASS"); 46 47 Mutter mutter=new Mutter(userName,userPass); 48 mutterList.add(mutter); 49 } 50 }catch(SQLException e){ 51 e.printStackTrace(); 52 return null; 53 }catch(ClassNotFoundException e){ 54 e.printStackTrace(); 55 return null; 56 }finally{ 57 //データベース切断 58 if(conn!=null){ 59 try{ 60 conn.close(); 61 }catch(SQLException e){ 62 e.printStackTrace(); 63 return null; 64 } 65 } 66 } 67 return mutterList; 68} 69 70}

loginResult.jsp

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="model.User,model.Mutter,java.util.List" %> 4 <% 5 //セッションスコープからユーザー情報を取得 6 User loginUser=(User)session.getAttribute("loginUser"); 7 //リクエストスコープに保存されたつぶやきリストを取得 8 List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList"); 9 10 %> 11<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 12<html> 13<head> 14<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 15<title>ログインのみ(データベースから)</title> 16</head> 17<body> 18<h1>ログイン</h1> 19//リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 20 //して、それらがnullでないかをif文で確認 21 22 <% for(Mutter mutter:mutterList){ %> 23<p><%if(mutterList!=null && mutter.getUserName()!=null && mutter.getUserPass()!=null){ %> 24 </p> 25<p>ログインに成功しました。</p> 26<p>ようこそ<%=loginUser.getName() %>さん</p> 27 28<%}else{ %> 29<p>ログインに失敗しました。</p> 30<a href="/example24/">TOPへ</a> 31<%}} %> 32 33</body> 34</html>

Mutter.java(model)

java

1package model; 2import java.io.Serializable; 3 4public class Mutter implements Serializable{ 5 6 //変数を変更 そして、methodの変数も変 7 //本当は、id,UserName,textなのだが、textを無しにして、passをデータベースから取得して、ログインできるか確認したいからUserpassに変更 8 private String userName; 9 private String userPass; 10 11 public Mutter(){} 12 public Mutter(String userName,String userPass){ 13 this.userName=userName; 14 this.userPass=userPass; 15 } 16 public String getUserName(){return userName;} 17 public String getUserPass(){return userPass;} 18 19 }

User.java(model)

java

1package model; 2import java.io.Serializable; 3public class User implements Serializable{ 4 //Userはログインの時に使う 5 //Mutter.java(model)にあるUserNameはこのnameから派生して作られたもの?か確認、そしてたに作った、UserPassは、どうやって作成するか考えコードを書く 6 private String name; 7 private String pass; 8 9 public User(){} 10 public User(String name,String pass){ 11 this.name=name; 12 this.pass=pass; 13 } 14 public String getName(){return name;} 15 public String getPass(){return pass;} 16 }

データベースので入力したコード
CREATE TABLE MUTTER(
NAME VARCHAR(100) NOT NULL,
PASS VARCHAR(255) NOT NULL);

INSERT INTO MUTTER(NAME,PASS)VALUES('灘','1234');

INSERT INTO MUTTER(NAME,PASS)VALUES('綾部','2345');

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

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

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

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

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

takasima20

2016/04/24 08:33

せめて、どのソースのどこらへんでエラーになったかくらいは提示できませんか? まるごと(しかも机上で)デバッグしてといわれても…
edoooooo

2016/04/24 08:41 編集

申し訳ありませんでした。 エラーには、loginResult.jspの  <% for(Mutter mutter:mutterList){ %> <p><%if(mutterList!=null && mutter.getUserName()!=null && mutter.getUserPass()!=null){ %> </p>のなかだと思うのですが、 記載したコードの並び順は、実行した時にたどる順番になっています。(フィールドのMutter,User以外)どうぞよろしくお願いします。
guest

回答1

0

ベストアンサー

JSP

1<h1>ログイン</h1> 2//リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 3 //して、それらがnullでないかをif文で確認 4 5 <% for(Mutter mutter:mutterList){ %> 6<p><%if(mutterList!=null && mutter.getUserName()!=null && mutter.getUserPass()!=null){ %> 7 </p> 8<p>ログインに成功しました。</p> 9<p>ようこそ<%=loginUser.getName() %>さん</p> 10 11<%}else{ %> 12<p>ログインに失敗しました。</p> 13<a href="/example24/">TOPへ</a> 14<%}} %>

すぐに思いつくことというと…
mutterList!=null の判定は for の前でやらないとまずい
ってことスかね。また違う問題が判明するかもですが
それはまた別途デバッグしていただくということで…

投稿2016/04/24 08:54

takasima20

総合スコア7458

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

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

edoooooo

2016/04/24 08:59

ありがとうございます。変更してみます。 今までは、本を写していただけで、これは新たに追加したいコードを書いてみたのですが、すぐにわからないことが出てきて、勉強の順序として間違えていませんでしょうか? どのような初心者も同じ状態になるのでしょうか?どうぞよろしくお願いします。
edoooooo

2016/04/24 09:06

無事ログインできました。ありがとうございます。 しかし、どんなパスワード,どんなIDでも、ログインできてしまいます。 nullpointの問題は解決したので、別の質問で続きは、質問させていただきます。 ありがとうございました。 もしよろしければ、どうぞ宜しくお願いします。
takasima20

2016/04/24 09:10

知らない時に参考となるものを写すのは問題ないと思います。 ただ、できるだけ内容を理解するようつとめましょう。 数をこなせばそのうち見えてくるものもあります。 :-)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問