【Java】创建登录应用程序

创建Java登录应用程序

创建一个程序,从JSP的登录页面输入用户名和密码,通过点击注册按钮来成功登录并转到菜单页面。

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

JavaScript (简称 JS)

当在JSP页面上点击按钮时,将执行input标签的onclick属性buttonclick()的处理,并调用LoginServlet。

<script>
     function buttonclick() {
        document.myform.action = "<%=request.getContextPath()%>/LoginServlet";
        document.myform.submit();
     }
</script>

Servlet

如果能够读取用户ID和密码,将其保存到会话范围中并显示菜单页面。
如果与数据库中的值不符,则显示错误页面。

@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语句等。我希望在逐个功能进行复习的同时进行总结。

bannerAds