1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】ログインアプリの作成

Posted at

【Java】ログインアプリ作成

jspのログイン画面からユーザーIDとパスワードを入力し、登録ボタンを押すことでログインが成功し メニュー画面へ遷移するプログラムの作成。

jsp画面

リクエストパラメータを使って値をサーブレットから取得するため、inputタグのname属性の値が必須になる。
jsp
<form name="myform" action="" method="post">
 <p>ユーザーID</p>
 <p><input type="text" name=user_id value=""></p>
 <p>パスワード</p>
 <p><input type="text" name=pass value=""></p>

 <input type="button" value="ログイン" name="login" onclick="buttonclick()">
</form>

Javascript

jsp画面からボタンをクリックするとinputタグのonclick属性buttonclick()の処理が行われ、 LoginServletが呼び出される。
javascript
<script>
     function buttonclick() {
		document.myform.action = "<%=request.getContextPath()%>/LoginServlet";
		document.myform.submit();
     }
</script>

サーブレット

ユーザーIDとパスワードを読み込むことができたら、セッションスコープへ保存しメニュー画面を表示する。 データーベースの値と一致しなければエラー画面を表示する。
servlet
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession session = request.getSession(false);

		//リクエストパラメータを取得しuser_idとpassを変数に格納する。
		String uid = request.getParameter("user_id");
		String pass = request.getParameter("pass");

        //beanクラスのUserをインスタンス
		User user = new User(uid, pass);

		//データーベース接続処理 コネクションプーリング
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			Context context = new InitialContext();
			DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/データーベース名");
			con = ds.getConnection();

            //データベースに登録してあるテーブルからユーザーIDとパスワードを取得
			String sql = "SELECT * FROM テーブル名 WHERE カラム名 = ? AND カラム名 = ?";

			ps = con.prepareStatement(sql);

			ps.setString(1, uid);
			ps.setString(2, pass);

			rs = ps.executeQuery();

            //一致する行があればメニュー画面へフォワード
			if (rs.next()) {
				session.setAttribute("LoginInfo", user);
				RequestDispatcher dispatch = request.getRequestDispatcher("/WEB-INF/Menu.jsp");
				dispatch.forward(request, response);

       //なければエラー画面へフォワード
			} else {
				// ログインエラー				
				RequestDispatcher dispatch = request.getRequestDispatcher("/WEB-INF/Error.jsp");
				dispatch.forward(request, response);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					//
				}

				rs = null;
			}

			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					//
				}

				ps = null;
			}

			if (con != null) {
				try {
					con.close();
				} catch (SQLException e) {
					//
				}

				con = null;
			}
		}
	}
}


まとめ

ログイン機能を持ったアプリケーションを作成をするにあたり、リクエストパラメータの取得、コネクションプーリングやSQL文など、様々な知識が必要だと改めて感じた。 これから一つ一つの機能について復習しつつ、まとめていけたらと思う。
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?