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

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

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

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

Java

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

servlet

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

Q&A

解決済

3回答

3503閲覧

なぜデータベースから取得しているname,passと同じく入力しても、ログインができないのでしょうか?

edoooooo

総合スコア476

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2016/04/24 11:44

編集2016/04/24 12:21

前もってデータベースにcreateとinsertをしておいて、灘,1234と、name,passを指定しました。jspで灘,1234と入力しても、ログインできません。コードの要点を短くまとめ、説明しています。宜しくお願いします。

前もってデータベースに CREATE TABLE MUTTER(NAME VARCHAR(100) NOT NULL,PASS VARCHAR(100) NOT NULL);と入力しました。
続いて、INSERT INTO MUTTER(NAME,PASS)VALUES('灘','1234');
そして、INSERT INTO MUTTER(NAME,PASS)VALUES('綾部','2345');
と入力しました。

index.jspでは、ユーザー名の欄に 灘
パスワードの欄に 1234
を入力しています。

入力した値を
index.jsp

java

1<form action="/example24/Login" method="post"> 2ユーザー名:<input type="text" name="name"><br> 3パスワード:<input type="password" name="pass"><br> 4<input type="submit" value="ログイン">

これで送信して、
Login.java

java

1String name=request.getParameter("name"); 2 String pass=request.getParameter("pass"); 3 4 User user=new User(name,pass); 5 6 LoginLogic loginLogic=new LoginLogic(); 7 List<Mutter>mutterList=loginLogic.execute(user); 8 request.setAttribute("mutterList", mutterList); 9

受け取り、userを作りLoginLogicをnewして、executeメソッド(executeはMutter.DAOのfindAll()を呼ぶ)を呼び出す。
LoginLogic

java

1public List<Mutter>execute(User user){ 2 MutterDAO dao=new MutterDAO(); 3 List<Mutter>mutterList=dao.findAll(user); 4 return mutterList;

さらにdao.findAllを呼び出し、データベースからuserのnameとpassに一致しているNAMEとPASSを取得、そして、userName,userPassに代入
Mutter.DAO

java

1public List<Mutter>findAll(User user){ 2 3 String sql="SELECT NAME,PASS FROM MUTTER WHERE NAME=(?)AND PASS=(?)"; 4 PreparedStatement pStmt=conn.prepareStatement(sql); 5 pStmt.setString(1, user.getName()); 6 pStmt.setString(2, user.getPass()); 7 8 ResultSet rs=pStmt.executeQuery(); 9 10 while(rs.next()){ 11 12 String userName=rs.getString("NAME"); 13 String userPass=rs.getString("PASS"); 14 15 Mutter mutter=new Mutter(userName,userPass); 16 mutterList.add(mutter);

そしてmutterListをreturnする(returnされたmutterListはLogin.javaにいきrequest.setAttribute("mutterList", mutterList); このようにリクエストスコープに保存

loginResult.jsp

java

1 <% 2 //セッションスコープからユーザー情報を取得 3 User loginUser=(User)session.getAttribute("loginUser"); 4 5 //リクエストスコープに保存されたつぶやきリストを取得 6 List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList"); 7 8 %> 9<%if(mutterList!=null){ %> 10<% for(Mutter mutter:mutterList){ %> 11<%if(mutter.getUserName().length()!=0 && mutter.getUserPass().length()!=0){ %> 12<p>ログインに成功しました。</p> 13<p>ようこそ<%=loginUser.getName() %>さん</p> 14<%} %> 15<%}}else{ %> 16<p>ログインに失敗しました。</p> 17<a href="/example24/">TOPへ</a> 18<%}%>

if文で、データベースからリクエストパラメータの入力画面でユーザーが入力した値と同じnameとpassをSELECTしているはずなので、elseとならずにログイン成功

となるはずが、elseとなります。
おかしいところをどうかお教えください。
どうぞよろしくお願いします。

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

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

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

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

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

guest

回答3

0

文字コードが相違しているとか?

投稿2016/04/25 03:03

HiroshiWatanabe

総合スコア2160

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

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

edoooooo

2016/04/25 04:22

nameとpassのリクエストパラメータを取得するLogin.java(servlet)のpostメソッドでは、//リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); このようにUTF-8で指定しています。  最後にデータを表示するloginResutでは、HTMLの最初で、<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>このように指定しています。  他にも指定するべき場所があるのでしょうか?  見当はずれでしたら、どうかお教えください。宜しくお願いします。
edoooooo

2016/04/25 04:59

昨日は、何度実行しても、動かすことができなく、今日になり、eclipseを再起動していないのに、動かすことが、できました。  これからいろいろとコードを改良していく中で、文字コードにも、気おつけていきたいと思います。ありがとうございました。
guest

0

ベストアンサー

ResultSetがどうなっているかを確認してみましたか?

投稿2016/04/24 20:01

dojikko

総合スコア3939

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

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

edoooooo

2016/04/25 04:18

ResultSetクラスのrsにpStmt.executeQuery()を代入して、next()でget()で取得しているのですが、そういうことではないですよね、どうなっているか?とは、どのようなことなのでしょうか?どうぞよろしくお願いします。
dojikko

2016/04/25 04:30 編集

ResultSetにちゃんと正しい(意図する)値が返ってきているかという意味です > nameとpassをSELECTしているはずなので と書かれていますが、本当にそうなっていますかという意味です 違うものが返ってきていていたり、比較しようと思っているものが違っていたら、それらを比較したらFalseになりますよね
edoooooo

2016/04/25 05:08

MutterDAOの中で、System.out.println(userName); System.out.println(userPass);と表示したところ、灘 1234 と入力した通りの、値がコンソールに出力されました。 昨日には、何度実行しても、if elseのどちらの表示も、されなかったのが、今日になり、eclipseを再起動していないにもかかわらず、なぜか、動かすことが、できました。  回答をいただいているのに、理由がわかりません、申し訳ありません。 ありがとうございました。 しかし、データベースに登録されていない、名前と、passを入力したところ、elseとなるはずが、elseの実行(<a href="/example24/>トップへ</a>が表示されません。 if else文のコードが、たとえifとならなくても、elseにたどり着かないと、思ったのですが、教えていただけないでしょうか?
edoooooo

2016/04/25 05:08

<%if(mutterList!=null){ %> <% for(Mutter mutter:mutterList){ %> <%if(mutter.getUserName().length()!=0 && mutter.getUserPass().length()!=0){ %> <p>ログインに成功しました。</p> <p>ようこそ<%=loginUser.getName() %>さん</p> <%} %> <%}}else{ %> <p>ログインに失敗しました。</p> <a href="/example24/">TOPへ</a> <%}%>
kaputaros

2016/04/25 06:01

横から失礼します。 おそらく、mutterListがnullではないのでは? 0長のリストが返ってきている可能性があるので、nullまたはlength=0で判定したほうが良いかと思います。 ログ出しする際は、中身だけでなく、すべての変数を出来る限りログ出しした方が、原因をつかみやすくなりますよ。 また、変数を出力する際、ただ出すのではなく、変数を[]などでくくって出力されるようにしておくと、スペースが入ってたりすることに気づきやすいです。
edoooooo

2016/04/25 06:55 編集

ありがとうございます。 変数を[ ]でくくって、出力して確認することも、していきます。 ありがとうございます。 無事解決ました。
guest

0

考えられる点としては dojikko様、HiroshiWatanabe様の点だと思われますが、
String name=request.getParameter("name") で想定通りの値が入っているかをデバッグモードやSystem.outなどで確認してください。

また、SQLの宣言にも気になる記述があります。

SQL

1SELECT NAME,PASS FROM MUTTER WHERE NAME=(?) AND PASS=(?)

カッコは不要です

投稿2016/04/25 04:02

A-pZ

総合スコア12011

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

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

edoooooo

2016/04/25 04:57

System.out.println()で出力したところ、しっかりと、入力した値が、コンソールに表示されました。カッコは、昨日直していたのですが、ダメだったのですが、今日、実行してみたら、なぜが、ログインすることが、できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問