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)です。
package model;
import java.io.Serializable;
public class Mutter implements Serializable{
private String userName;
private String userPass;
public Mutter(){}
public Mutter(String userName,String userPass){
this.userName=userName;
this.userPass=userPass;
}
public String getUserName(){return userName;}
public String getUserPass(){return userPass;}
}
User.java(model)です。
package model;
import java.io.Serializable;
public class User implements Serializable{
//Userはログインの時に使う
private String name;
private String pass;
public User(){}
public User(String name,String pass){
this.name=name;
this.pass=pass;
}
public String getName(){return name;}
public String getPass(){return pass;}
}
index.jspです。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<form action="/example24/Login" method="post">
ユーザー名:<input type="text" name="name"><br>
パスワード:<input type="password" name="pass"><br>
<input type="submit" value="ログイン">
</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.LoginLogic;
//ここで Mutterをimportしているのに、if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){
//の下線にコンパイルエラーがでるのでしょうか?
import model.Mutter;
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();
//リクエストパラメータ(index.jsp)でsubmitで送信したnameとpassに対応した(MutterDAOでWHERE句で指定)PASSとNAMEをSELECTして、それらをuserNameとuserPassに代入
//して、それらがnullでないかをif文で確認
if(mutterList.getUserPass()!=null && mutterList.getUserName()!=null){
//nullでない場合は,
//User情報をセッションスコープに保存
HttpSession session=request.getSession();
session.setAttribute("loginUser", user);
//ログイン結果画面にフォワード
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp");
dispatcher.forward(request,response);
}else{
//nullだった場合は、
response.sendRedirect("/example24/");
//ログイン画面にリダイレクト
}
}
}
LoginLogic.java(model)です。
package model;
import java.util.List;
import dao.MutterDAO;
public class LoginLogic {
//GetMutterListLogicのfindAll()やnew MutterDAOをここでやる
//Login.java(serlvetのexecuteめそっとのコードにコンパイルエラーが出るからここでstaticに変更
public static List<Mutter>execute(){
MutterDAO dao=new MutterDAO();
List<Mutter>mutterList=dao.findAll();
return mutterList;
//mutterListを呼び出し元のLogin.java(servlet)に返す
}
}
MutterDAOです。
//書き換え完了(データベースからの取得内容とnew mutterの内容を変更
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//ここでUserをimportしているのに,なぜpStmt.setString(1, user.getName());
//pStmt.setString(2, user.getPass());のuserの下線にコンパイルエラーが出るのでしょうか?
import model.User;
import model.Mutter;
public class MutterDAO {
private final String DRIVER_NAME="org.h2.Driver";
private final String JDBC_URL="jdbc:h2:file:/Users/endo/Documents/networkspace/example23/h2data.dat";
private final String DB_USER="sa";
private final String DB_PASS="";
public List<Mutter>findAll(){
Connection conn=null;
List<Mutter>mutterList=new ArrayList<Mutter>();
try{
Class.forName(DRIVER_NAME);
conn=DriverManager.getConnection(JDBC_URL,DB_USER,DB_PASS);
String sql="SELECT NAME,PASS FROM MUTTER WHERE NAME=(?)AND PASS=(?)";
PreparedStatement pStmt=conn.prepareStatement(sql);
//Insert文中の「?」に使用する値を設定しSQLを完成
pStmt.setString(1, user.getName());
pStmt.setString(2, user.getPass());
//SELECTを実行
ResultSet rs=pStmt.executeQuery();
//SELECT文の結果をArrayList二格納
while(rs.next()){
//データベースのNAMEとPASSをuserNameとuserPass二代入
String userName=rs.getString("NAME");
//ここもString text=rs.getString("TEXT");
String userPass=rs.getString("PASS");
Mutter mutter=new Mutter(userName,userPass);
mutterList.add(mutter);
}
}catch(SQLException e){
e.printStackTrace();
return null;
}catch(ClassNotFoundException e){
e.printStackTrace();
return null;
}finally{
//データベース切断
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
return null;
}
}
}
return mutterList;
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
mutterListがMutterでなくList型だからですね。
Mutterのメソッドを使いたいならListから要素を取得してそれに対してメソッドのコールする必要があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/24 16: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を(色々な呼び出し元にも)入れたところ、
コンパイルエラーが消えました。
ありがとうございました。