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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Q&A

解決済

1回答

873閲覧

Javaでログイン機能の実装ができないのでご教授お願い致します。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

0グッド

0クリップ

投稿2018/08/13 06:06

編集2018/08/13 08:41

Java,MySQLを用いてログイン画面の実装をしようとしています。(のちにajax実装予定)

DBにサンプルデータを入れてログインが正常に行われるか試している段階ですが、
エラーの原因がわからず時間を食ってしまっているので質問するに至りました。

説明の不足点があれば申し訳ございませんが言っていただければ随時追記いたします。

環境:
Windows10,
jdk1.8.0_181,
EclipsePhoton(最新),
tomcat7.0,

ログインボタンを押すとこのようなエラーが出てしまいます。これの原因がわかりません。

Error

1Type ステータスレポート 2 3メッセージ /project/UserLoginServlet 4 5説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 6

また、UserLoginServletを手動コンパイルしようとすると

Command

1C:\Users\ユーザ名\workspase\projectcom\src\projectpackage>javac -encoding utf-8 -classpath "C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar" UserLoginServlet.java 2UserLoginServlet.java:38: エラー: シンボルを見つけられません 3 Dao dao = new Dao(); 4 ^ 5 シンボル: クラス Dao 6 場所: クラス UserLoginServlet 7UserLoginServlet.java:38: エラー: シンボルを見つけられません 8 Dao dao = new Dao(); 9 ^ 10 シンボル: クラス Dao 11 場所: クラス UserLoginServlet 12UserLoginServlet.java:39: エラー: シンボルを見つけられません 13 Dto user = dao.findUser(id); 14 ^ 15 シンボル: クラス Dto 16 場所: クラス UserLoginServlet 17エラー3個

となります。

以下各ファイルです。

loginJSP

1<form action="./UserLoginServlet" method="post"> 2 <div class="form-group inputs"> 3 <table> 4 <tbody> 5 <tr><td><input name="id" class="form-control" type="text" id="id" placeholder="username"></td></tr> 6 7 <tr><td><input type="password" name="password"class="form-control" id="password" placeholder="password"></td></tr> 8 9 <tr><td><button type="submit" class="btn btn-primary" onclick="loginajax"><font color="#FFFFFF">ログイン</font></button></td></tr> 10 </tbody> 11 </table> 12 </div> 13 </form>

UserLoginServlet

1package projectpackage; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10import javax.servlet.http.HttpSession; 11 12 13@WebServlet("/UserLoginServlet") 14public class UserLoginServlet extends HttpServlet{ 15 private static final long serialVersionUID = 1L; 16 17 /** 18 * @see HttpServlet#HttpServlet() 19 */ 20 public UserLoginServlet() { 21 super(); 22 } 23 24 /** 25 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 26 */ 27 @Override 28 public void doPost(HttpServletRequest request, HttpServletResponse response) 29 throws ServletException, IOException { 30 request.setCharacterEncoding("UTF-8"); 31 32 33 34 35 String id = request.getParameter("id"); 36 String password = request.getParameter("password"); 37 38 Dao dao = new Dao(); 39 Dto user = dao.findUser(id); 40 41 42 43 boolean isLogin = (user != null && password.equals(user.getPassword())); 44 HttpSession session = request.getSession(); 45 session.setAttribute("isLogin", isLogin); 46 47 48 if (isLogin) { 49 request.setAttribute("username", user.getid()); 50 request.getRequestDispatcher("/top.jsp").forward(request, response); 51 } else { 52 request.setAttribute("error", "IDかパスワードが間違っています。\n再入力してください。"); 53 request.getRequestDispatcher("/login.jsp").forward(request, response); 54 } 55 56 57 } 58 59 60}

Dao

1package projectpackage; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.sql.Statement; 8 9public class Dao { 10 11 private static Connection getConnection() { 12 13 String url = "jdbc:mysql://localhost/userdb?" + "serverTimezone=JST"; 14 String user = "root"; 15 String password = "root"; 16 17 try { 18 19 Class.forName("com.mysql.jdbc.Driver"); 20 return DriverManager.getConnection(url, user, password); 21 22 } catch (Exception e) { 23 throw new IllegalArgumentException(e); 24 } 25 } 26 27 static Connection connection = null; 28 29 30 public Dto findUser(String id) { 31 Dto user = new Dto(); 32 33 try { 34 connection = getConnection(); 35 36 37 Statement statement = connection.createStatement(); 38 String sql="select * from userinf where id="+id; 39 40 ResultSet resultSet = statement.executeQuery(sql); 41 42 while (resultSet.next()) { 43 44 user.setid(resultSet.getString("id")); 45 user.setPassword(resultSet.getString("password")); 46 47 } 48 49 } catch (SQLException e) { 50 e.printStackTrace(); 51 } 52 return user; 53 54 } 55

Dto

1package projectpackage; 2 3 4public class Dto{ 5 private String id; 6 private String password; 7 8 public String getid() { 9 return id; 10 } 11 public String getPassword() { 12 return password; 13 } 14 15 public void setid(String id) { 16 this.id = id; 17 } 18 public void setPassword(String password) { 19 this.password = password; 20 } 21 22} 23

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

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

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

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

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

guest

回答1

0

ベストアンサー

例外

java.lang.NullPointerException
projectpackage.UserLoginServlet.doPost(UserLoginServlet.java:44)

↑何かがnullになっていて、not-nullのつもりで使おうとしているエラー。

<input class="form-control" type="text" id="id" placeholder="username">

↑「name="id"」がついてないので、

String id = request.getParameter("id");

↑この結果はnull

String sql="select * from userinf where id="+id;

↑よって、Daoのこの部分は実行時に「where id=null」になり、検索結果0件。
検索結果0件でもDtoは返ってきているので「user.getPassword()」などの結果はnullになるはず。

で、

<input type="password" class="form-control" id="password" placeholder="password">

↑こちらも「name="password"」がついてないので、

String password = request.getParameter("password");

↑この結果はnull

boolean isLogin = (user != null && password.equals(user.getPassword()));

↑なので、「null.euqals(null)」をやってるのがNullPointerExceptionの原因と推測。

また、UserLoginServletを手動コンパイルしようとすると

Eclipse使ってるのに主導コンパイルする必要が分かりませんが、「projectpackage」の一つ上のフォルダから「javac projectpackage/*.java」などとやる必要があると思います。

投稿2018/08/13 07:29

tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2018/08/13 08:04

ご回答ありがとうございます。id = request.getParameter("id");はnameを探しに行くんですね。name=idを入れたら治りましたが新たなエラーが出ました。そもそものロジックが間違えてそうな予感です。 Type ステータスレポート メッセージ /project/UserLoginServlet 説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
退会済みユーザー

退会済みユーザー

2018/08/13 08:06

手動コンパイルについては、なにか参考にならないかと、コンパイル時のエラー内容を提示するためにやりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問