jsp+servlet用戶登錄案例

以下是本次案例(homework22)的目錄結構:
注意:手動導入jar包的lib文件要放在WEB-INF下

  • login.jsp
<body>
    <form action="/homework22/LoginServlet" method="post">
        <table>
            <tr>
                <td><input type="text" placeholder="請輸入用戶名" name="username" id="username"></td>
            </tr>
            <tr>
                <td><input type="password" placeholder="請輸入密碼" name="password" id="password"></td>
            </tr>
            <tr>
                <td align="center"><input type="submit" value="登錄" id="btn"></td>
            </tr>
        </table>
    </form>
</body>
  • JDBCUtil.java
public class JDBCUtil {
    private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/s1?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
    private static final String USER_NAME = "root";
    private static final String PASSWORD = "123456";

    /**
     * 連接數據庫信息
     */

    public static Connection getCon(){
        Connection con = null;
        try {
            Class.forName(DRIVER_NAME);//加載數據庫驅動
            con = DriverManager.getConnection(URL,USER_NAME,PASSWORD);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }

    /**
     * 關閉連接
     */
    public static void close(ResultSet rs, PreparedStatement ps, Connection con){
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(con!=null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
  • User.java
public class User {
    private int id;
    private String username;
    private String password;

    public User(){}

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • UserDao.java
    注意:sql語句不可以用user.getUser()來代替?
public class UserDao {
    /**
     * 根據用戶名和密碼判斷是否有這個人
     */
    public static User loginCheck(Connection con,User user) throws SQLException {
        User resultUser = null;
        String sql = "select* from user where username = ? and password = ? ";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1,user.getUsername());
        ps.setString(2,user.getPassword());

        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            resultUser = new User();//創建了User對象,纔可以賦值
            System.out.println(rs.getString("username"));
            resultUser.setUsername(rs.getString("username")) ;
            resultUser.setPassword(rs.getString("password"));
        }
        return resultUser;
    }
}
  • LoginServlet.java
    注意:try catch包圍的代碼可以防止出現錯誤異常,與sql操作一起用可以防止SQL出錯
@WebServlet("/homework22/LoginServlet")
public class LoginServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        /**
         * 判斷用戶名或密碼是否爲空先
         */
        String username = request.getParameter("username");
        String password = request.getParameter("password");


        if (username.equals("") || password.equals("")){
            request.setAttribute("IsNULL","用戶名或密碼不爲空");
            request.getRequestDispatcher("failure22.jsp").forward(request,response);
        }
        /**
         * 判斷請求的用戶名密碼是否與數據庫的一致
         * 爲此要先連接數據庫
         * 注意一定要用try  catch去包圍數據庫的操作,預防失敗
         */
        else{
            Connection con = null;
            User requestUser = new User(username,password);
            try {
                con = JDBCUtil.getCon();
                User result = UserDao.loginCheck(con,requestUser);//獲取數據庫搜索出來的數據
                HttpSession session = request.getSession();
                if(result != null){
                    session.setAttribute("username",result.getUsername());
                    request.getRequestDispatcher("success22.jsp").forward(request,response);
                }
                else{
                    session.setAttribute("msg","用戶名或密碼有誤");
                    request.getRequestDispatcher("failure22.jsp").forward(request,response);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                JDBCUtil.close(null,null,con);
            }
        }
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
  • success.jsp
<body>
    <h1>歡迎“<%=session.getAttribute("username")%>”登錄成功</h1>
</body>
  • failure.jsp
    用三目運算符,就不會在獲取值爲null時,直接在頁面打null
<body>
    <h1><%=request.getAttribute("IsNULL")==null? "":request.getAttribute("IsNULL")%></h1>
    <h1><%=session.getAttribute("msg")==null? "":session.getAttribute("msg")%></h1>
</body>

在這裏插入圖片描述
錯誤信息:
在這裏插入圖片描述
在這裏插入圖片描述
成功:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章