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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

10028閲覧

データベースに登録済みの人が、ログインするコードを書きたいです。なぜコンパイルエラーが出るのでしょうか?

edoooooo

総合スコア476

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2016/04/24 06:27

編集2016/04/24 08:12

Login.javaで Mutterをimportしているのに、if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){
//の下線にコンパイルエラーがでるのでしょうか?

また、MutterDAOでUserをimportしているのに,なぜpStmt.setString(1, user.getName());
//pStmt.setString(2, user.getPass());のuserの下線にコンパイルエラーが出るのでしょうか?

コードの順番は、実際の流れを元に書きました。
まず、フィールドとなるMutter.java,User.java
そして、最初の画面でリクエストパラメータ(name,pass)の送信元となるindex.jsp
次に、送信先となるLogin.java(servlet),
Login.javaの中でnewされデータベースと関わるfindAll()を持つexecute()を持つLoginLogic.java(model)
最後に、そのfindAll()を持つMutterDAO.java(model)
の順番に記載しています。

どうぞよろしくお願いします。

Mutter.java(model)です。

java

1package model; 2 3import java.io.Serializable; 4 5public class Mutter implements Serializable{ 6 7 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 } 17 public String getUserName(){return userName;} 18 public String getUserPass(){return userPass;} 19 20 } 21 22

User.java(model)です。

java

1package model; 2 3import java.io.Serializable; 4public class User implements Serializable{ 5 6 //Userはログインの時に使う 7 8 private String name; 9 private String pass; 10 11 public User(){} 12 public User(String name,String pass){ 13 this.name=name; 14 this.pass=pass; 15 } 16 public String getName(){return name;} 17 public String getPass(){return pass;} 18 } 19 20

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; 5import java.util.ArrayList; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.HttpSession; 14 15import model.LoginLogic; 16 17//ここで Mutterをimportしているのに、if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){ 18//の下線にコンパイルエラーがでるのでしょうか? 19import model.Mutter; 20import model.User; 21 22 23@WebServlet("/Login") 24public class Login extends HttpServlet { 25 private static final long serialVersionUID = 1L; 26 27 28 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 30 //リクエストパラメータの取得 31 request.setCharacterEncoding("UTF-8"); 32 String name=request.getParameter("name"); 33 String pass=request.getParameter("pass"); 34 35 //Userインスタンス(ユーザー情報お)の生成 36 User user=new User(name,pass); 37 38 //ログイン処理 39 40 LoginLogic loginLogic=new LoginLogic(); 41 //execute()で帰ってきたmutterListを代入 42 List<Mutter>mutterList=LoginLogic.execute(); 43 44 //リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 45 //して、それらがnullでないかをif文で確認 46 if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){ 47 //nullでない場合は, 48 //User情報をセッションスコープに保存 49 HttpSession session=request.getSession(); 50 session.setAttribute("loginUser", user); 51 52 //ログイン結果画面にフォワード 53 RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); 54 dispatcher.forward(request,response); 55 }else{ 56 //nullだった場合は、 57 response.sendRedirect("/example24/"); 58 //ログイン画面にリダイレクト 59 } 60 } 61} 62

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(){ 9 MutterDAO dao=new MutterDAO(); 10 List<Mutter>mutterList=dao.findAll(); 11 return mutterList; 12 //mutterListを呼び出し元のLogin.java(servlet)に返す 13 } 14}

MutterDAOです。

java

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

mutterListがMutterでなくList型だからですね。
Mutterのメソッドを使いたいならListから要素を取得してそれに対してメソッドのコールする必要があります。

投稿2016/04/24 06:51

kinme

総合スコア843

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

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

edoooooo

2016/04/24 07:44

ありがとうございます。 Main.java(servletでやろうとしていたことをrequest先のloginResult.jspでやることにしました。 リクエストスコープにmutterListを入れて、for文で変数mutterに代入しmutter.getUseName()で呼び出しました。 //loginResult.jspです。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="model.User,model.Mutter,java.util.List" %> <% //セッションスコープからユーザー情報を取得 User loginUser=(User)session.getAttribute("loginUser"); //リクエストスコープに保存されたつぶやきリストを取得 List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ログインのみ(データベースから)</title> </head> <body> <h1>ログイン</h1> //リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 //して、それらがnullでないかをif文で確認 <% for(Mutter mutter:mutterList){ %> <p><%if(mutterList!=null && mutter.getUserName()!=null && mutter.getUserPass()!=null){ %> </p> <p>ログインに成功しました。</p> <p>ようこそ<%=loginUser.getName() %>さん</p> <%}else{ %> <p>ログインに失敗しました。</p> <a href="/example24/">TOPへ</a> <%}} %> </body> </html> //Login.java(servlet)です。 package servlet; import java.io.IOException; import java.util.List; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; //import model.GetMutterListLogic; import model.LoginLogic; //ここで Mutterをimportしているのに、if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){ //の下線にコンパイルエラーがでるのでしょうか? import model.Mutter; //import model.PostMutterLogic; import model.User; @WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); String name=request.getParameter("name"); String pass=request.getParameter("pass"); //Userインスタンス(ユーザー情報お)の生成 User user=new User(name,pass); //ログイン処理 LoginLogic loginLogic=new LoginLogic(); //execute()で帰ってきたmutterListを代入 List<Mutter>mutterList=LoginLogic.execute(); //mutterListをリクエストスコプに保存? request.setAttribute("mutterList", mutterList); /* }else{ //エラーメッセージ request.setAttribute("errorMsg","つぶやきが入力されていません"); */ //このエラーメッセージは、どちらにしろ変更の必要はあるがとりあえず今は、エラーは、表示しない Redirectだけにしておく //リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入 //して、それらがnullでないかをif文で確認 //これは、LoginResult.jspでやる  //これは、jspでの記入方法がわからなかったため //ここに書く HttpSession session=request.getSession(); session.setAttribute("loginUser", user); //ログイン結果画面にフォワード RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); dispatcher.forward(request,response); } } もう一つのMutterDAOのほうは、引数にuserを(色々な呼び出し元にも)入れたところ、 コンパイルエラーが消えました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問