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

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

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

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

Q&A

1回答

514閲覧

JSPとServletの遷移についての質問です。情報処理途中の例外について。

kisara

総合スコア10

Java

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

0グッド

0クリップ

投稿2019/05/27 07:13

1 「createUserv_ver2.jsp」にデータを入力、「CreateUserServlet.java」にデータを引き渡す。
2 「CreateUserServlet.java」に格納されたデータを「createUserConfirmv_ver2.jsp」で表示。登録ボタンを押して、データを「CreateUserServlet2.java」に引き渡す。
3 「CreateUserServlet2.java」に引き渡されたデータを、「CreateUserDAO」によってデータベースに登録。また、それに従って生成されたIDを「createUserSuccess.jsp」によって表示。

というプロセスで個人情報の処理を行いたいのですが、2と3の間で例外が発生してしまいます。
プログラム上の問題には違いないのですが、現在の私の知識では原因を発見できませんでした。
もしよろしければ、どなたかご教授いただけると大変うれしく思います。

createUserv_ver2.jsp (省略) <title>新規登録フォームトップ</title> (省略) } } </script> </head> <body> <h1>新規会員登録</h1><br> <p>新規登録を行います。以下の情報を入力してください。</p> <p>※英数字は半角で入力してください。</p> <form action="./CreateUserServlet" method="post"> 名前  <input type="text" size="10" name="userName"><br> 郵便番号  <input type="text" size="10" name="userPost"><br> 住所  <input type="text" size="100" name="userAddress"><br> 電話番号  <input type="text" size="15" name="userTel"><br> email  <input type="text" size="50" name="userEmail"><br> 生年月日(西暦)   <select name="userBirthYear"> <script type="text/javascript">loop(1900,2018)</script> </select>年 <select name="userBirthMonth"> <script type="text/javascript">loop(1,12)</script> </select>月 <select name="userBirthDay"> <script type="text/javascript">loop(1,31)</script> </select>日<br> <br> <br> <br> パスワードを設定します。任意の文字列を入力してください(4文字以上)。<br> <input type="password" size="20" name="userPassword" value="0000"><br> もう一度入力してください。<br> <input type="password" size="20" name="userPassword2" value="0000"><br> <br> <br> <input type="submit" value="次へ" > <br> <br> <a href ="top.jsp">トップへ戻る</a> </form> </body> </html>
CreateUserServlet.java (省略) @WebServlet("/CreateUserServlet") public class CreateUserServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //リクエストパラメーターの取得 request.setCharacterEncoding("UTF-8"); String userName=request.getParameter("userName"); String userPost=request.getParameter("userPost"); String userAddress=request.getParameter("userAddress"); String userTel=request.getParameter("userTel"); String userEmail=request.getParameter("userEmail"); String userBirthYear=request.getParameter("userBirthYear"); String userBirthMonth=request.getParameter("userBirthMonth"); String userBirthDay=request.getParameter("userBirthDay"); String userPassword=request.getParameter("userPassword"); String userPassword2=request.getParameter("userPassword2"); //パラメータチェック(教科書178ページ参照) if(userName.isEmpty()||userPost.isEmpty()||userAddress.isEmpty()||userTel.isEmpty()||userEmail.isEmpty() ||userPassword.isEmpty()||userPassword2.isEmpty()||userPassword.length()<=3) { request.setAttribute("message","空欄があります。または、パスワードの文字数が足りません。"); RequestDispatcher rd=request.getRequestDispatcher("/error.jsp"); rd.forward(request,response); }else { CreateUserBean cubean = new CreateUserBean(); cubean.setUserName(userName); cubean.setUserPost(userPost); cubean.setUserAddress(userAddress); cubean.setUserTel(userTel); cubean.setUserEmail(userEmail); cubean.setUserBirthYear(userBirthYear); cubean.setUserBirthMonth(userBirthMonth); cubean.setUserBirthDay(userBirthDay); cubean.setUserBirthday(StringToSqlDate.convertDate(userBirthYear,userBirthMonth,userBirthDay)); cubean.setUserPassword(userPassword); HttpSession session = request.getSession(); session.setAttribute("profile",cubean); RequestDispatcher rd = request.getRequestDispatcher("/createUserConfirmv_ver2.jsp"); rd.forward(request,response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
createUserConfirmv_ver2.jsp (省略) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新規登録フォームトップ</title> (省略) </head> <body> <h1>会員登録確認</h1><br> <p>以下の情報が入力されました。問題がなければ、「登録」ボタンによって処理を終了してください。入力ミスがあるがある場合は、前頁から訂正してください。</p> <p>※英数字は半角で入力してください。</p> <p>名前  ${profile.getUserName()}</p> <p>郵便番号  ${profile.getUserPost()}</p> <p>住所  ${profile.getUserAddress()}</p> <p>電話番号  ${profile.getUserTel()}</p> <p>email  ${profile.getUserEmail()}</p> <p>生年月日(西暦)  </p> <p>${profile.getUserBirthYear()}年 ${profile.getUserBirthMonth()}月 ${profile.getUserBirthDay()}日</p> <p style="text-indent:-9999px;">パスワード:${profile.getUserPassword()}</p> <br> <form method="post"> <button type="submit" name="go" onclick="location.href='./CreateUserServlet2'">登録</button> <button type="submit" name="return" onclick="location.href='./createUserv_ver2'">前頁に戻る</button> <br> <br> <br> <a href ="top.jsp">トップへ戻る</a> </form> </body> </html>
CreateUserServlet2.java (省略) @WebServlet("/CreateUserServlet2") public class CreateUserServlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String userName=request.getParameter("userName"); String userPost=request.getParameter("userPost"); String userAddress=request.getParameter("userAddress"); String userTel=request.getParameter("userTel"); String userEmail=request.getParameter("userEmail"); String userBirthYear=request.getParameter("userBirthYear"); String userBirthMonth=request.getParameter("userBirthMonth"); String userBirthDay=request.getParameter("userBirthDay"); String userPassword=request.getParameter("userPassword"); CreateUserBean cubean = new CreateUserBean(); cubean.setUserName(userName); cubean.setUserPost(userPost); cubean.setUserAddress(userAddress); cubean.setUserTel(userTel); cubean.setUserEmail(userEmail); cubean.setUserBirthday(StringToSqlDate.convertDate(userBirthYear,userBirthMonth,userBirthDay)); cubean.setUserPassword(userPassword); cubean.setSqlUserBirthday(userBirthYear, userBirthMonth, userBirthDay); System.out.println(cubean.getUserBirthday()); try { //CreateUserDAOの呼び出し CreateUserDAO dao = new CreateUserDAO(); dao.CreateUser(userName,userPost,userAddress,userTel,userEmail,userPassword,(Date) cubean.getUserBirthday()); System.out.print("完了"); ShowIdDAO daoId = new ShowIdDAO(); request.setAttribute("yourId",daoId); gotoPage(request, response, "/createUserSuccess.jsp"); }catch(Exception e){ e.printStackTrace(); request.setAttribute("message", "内部エラーが発生しました"); gotoPage(request,response,"error.jsp"); } } private void gotoPage(HttpServletRequest request, HttpServletResponse response, String page) throws ServletException, IOException{ RequestDispatcher rd= request.getRequestDispatcher(page); rd.forward(request, response); } }
CreateUserDAO.java (省略) public class CreateUserDAO { private Connection con; public CreateUserDAO()throws DAOException{ getConnection(); System.out.println("データベースに接続しました"); } public void CreateUser(String userName,String userPost,String userAddress,String userTel,String userEmail, String userPassword, Date userBirthday) throws DAOException{ if(con==null) getConnection(); PreparedStatement st=null; try{ String sql="INSERT INTO userinfo(" + "user_name,user_post,user_address,user_tel,user_email,user_password,user_birthday) " + "VALUES(?,?,?,?,?,?,?)"; st = con.prepareStatement(sql); st.setString(1,userName); st.setString(2,userPost); st.setString(3,userAddress); st.setString(4,userTel); st.setString(5,userEmail); st.setString(6,userPassword); st.setDate(7,userBirthday); st.executeUpdate(); st.close(); return; }catch(Exception e) { e.printStackTrace(); throw new DAOException("レコードの操作に失敗しました。"); }finally { try { if(st!=null) st.close(); }catch(Exception e) { throw new DAOException("リソースの開放に失敗しました"); } } } private void getConnection() throws DAOException{ try { // JDBCドライバの登録 Class.forName("org.postgresql.Driver"); // URL,ユーザ名,パスワード設定 String url = "jdbc:postgresql:webbook"; String user = "postgres"; String password = "himitu"; // データベース接続 con = DriverManager.getConnection(url, user, password); }catch(Exception e) { e.printStackTrace(); throw new DAOException("接続に失敗しました。"); } } }
ShowIdDAO (省略) public class ShowIdDAO { private Connection con; public ShowIdDAO()throws DAOException{ getConnection(); } // 現在最新行のIDを表示するメソッド public long showCurrId() throws DAOException{ PreparedStatement st=null; ResultSet rs=null; try { String sql="SELECT currval('userinfo_user_id_seq')"; st = con.prepareStatement(sql); rs = st.executeQuery(); int currId = 0; while(rs.next()) { currId = rs.getInt(sql); } return currId; }catch(Exception e) { e.printStackTrace(); throw new DAOException("レコードの操作に失敗しました。"); }finally { try { if(rs!=null) rs.close(); if(st!=null) st.close(); }catch(Exception e) { throw new DAOException("リソースの開放に失敗しました"); } } } private void getConnection() throws DAOException{ try { // JDBCドライバの登録 Class.forName("org.postgresql.Driver"); // URL,ユーザ名,パスワード設定 String url = "jdbc:postgresql:webbook"; String user = "postgres"; String password = "himitu"; // データベース接続 con = DriverManager.getConnection(url, user, password); }catch(Exception e) { e.printStackTrace(); throw new DAOException("接続に失敗しました。"); } } }
createUserSuccess.jsp (省略) <p>あなたの会員IDは${yourId}です。<p> <p><a href ="top.jsp">トップページ</a>へ戻ってください。<p> </body> </html>

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

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

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

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

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

guest

回答1

0

formタグにaction属性がなにも指定されていなければ(または空文字)自身に対して送信します。
/CreateUserServlet2を指定する必要があるのでは。

投稿2019/05/27 07:22

m.ts10806

総合スコア80850

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

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

kisara

2019/05/27 07:34

ご回答いただきありがとうございます。 createUserv_ver2.jspにおいて、 <button type="submit" name="go" onclick="location.href='./CreateUserServlet2'">登録</button> <button type="submit" name="return" onclick="location.href='./createUserv_ver2'">前頁に戻る</button> という記述を行っているのですが、それでは動作しないということでしょうか。
m.ts10806

2019/05/27 07:36 編集

それは単にクリックで画面遷移させているだけなのでform情報の送信にはならないと思います。 あくまでactionに指定した先に送信するものです。
kisara

2019/05/27 07:47

ご回答いただきありがとうございます。 actionで「CreateUserServlet2.java」を指定してみます。 助かりました。
m.ts10806

2019/05/27 07:49

動作確認して完全解決してから「解決済み」にしてくださいね。 でないと回答の意味がないですし、「それっぽいアドバイスが得られたら終了」では資産になりません。 別質問の回答も理解が間違っているため「解決済み」としてはいけないと思います。 https://teratail.com/questions/191554
kisara

2019/05/27 07:58

件の質問については、例の私の認識で動作してしまったため解決済みとしてしまいました。 改めて学びなおします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問