###前提・実現したいこと
初めて利用させていただきます。Java独学中のものです。
データベースを利用した条件分岐に関して質問させて頂きます。
仮にAとBというテーブルがあって、Yさんの登録状況としては、テーブルAにレコードが存在しておりAにはユーザーIDやパスワード、その他個人情報が格納されています。
テーブルBには、とあるシステムの設定値が格納することになっており、未だYさんのレコードはB側に存在しておらず、Yさんはログイン画面内のログインボタン押下後、ログイン先の新規登録画面で登録するといった形式です。
その際、既にB側にレコードを持つユーザーのログインの場合は、A側とB側に共通するユーザーIDをif文の条件に指定してequalsで比較し、それに加えログイン画面にて入力されたユーザーIDとパスワードをパラメータで引っ張ってきて、A側のResultsetの結果と比較したのち、新規登録画面とは別の更新画面へと通すことが出来るのですが、B側にレコードが無いユーザー(先ほどのYさん)をログイン処理にて既登録者とは別画面(B側のテーブルにレコードを追加する新規登録画面)に遷移させたい場合に、どうやっても通すことが出来ません。A側に登録されたIDとパスワードを打ち込み、ログインボタンを押した途端に画面が真っ白になります。スタックトレースも表示されません。
どのような条件を与えてやれば、フォワードを用いて既登録者とは別画面へ遷移させることが出来るでしょうか?
よろしくお願いします。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String ID = request.getParameter("ID"); //ログイン画面を実装したJSPから、パラメータで値を引っ張ってくる。 String Pass = request.getParameter("Pass"); Ctrl_M_Dao ctrlDaoInstance = new Ctrl_M_Dao(); List<Serch_Ctrl_M> Ctrl_M_List = ctrlDaoInstance.findAll(ID); //B側のテーブルの値を格納しており、メソッドの呼び出しにて引っ張ってくる配列。 HttpSession session = request.getSession(true); session.setAttribute("ID", ID); Connection connection = null; PreparedStatement ps = null; String url = "jdbc:postgresql://localhost:5432/ログイン処理"; String user = "hoge"; String password = "hoge"; for (Serch_Ctrl_M ctrlInstance : Ctrl_M_List) { String ctrlId = ctrlInstance.getId(); //B側のテーブルの値をctrlID変数に格納。 try { Class.forName("org.postgresql.Driver"); connection = DriverManager.getConnection(url, user, password); String login = "Select user_id, password From A Where user_id=?"; //入力されたIDで紐づけて検索をかける。 ps = connection.prepareStatement(login); ps.setString(1, ID); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString("user_id"); String pass = rs.getString("password"); //ログイン判定処理 if(request.getParameter("button") != null && id.equals(ID) pass.equals(Pass) && ctrlId.equals(ID)) { //ログインボタンが押され、尚且つ入力されたパスとA側に格納されたパス //が正しい場合、尚且つB側のIDと入力されたIDが等しい場合に更新画面へ。 RequestDispatcher dispatcher = request.getRequestDispatcher("koshin.jsp") dispatcher.forward(request, response); } else { RequestDispatcher dispatcher = request.getRequestDispatcher("shinki.jsp"); //それ以外は新規登録画面へ。 dispatcher.forward(request, response); } } //以下、例外処理へ。
###試したこと
nullや空文字や、.lengthなどによる比較。
###補足情報(言語/FW/ツール等のバージョンなど)
java,jsp,servlet,eclipse4.6,postgreSQL
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/11 11:43