用戶註冊登陸測試版(jsp+servlet+mysql)

整體內容不算複雜,主要是利用jsp+servlet+mysql去實現web端的註冊/登陸/顯示當前用戶/退出功能javascript

先看看效果圖:html

註冊:java

wKioL1LiGITyiBc5AAKjO-n-Uhw055.jpg

註冊成功後登陸:mysql

wKiom1LiGUGi8JRRAAIyfxpYYag117.jpg

登陸成功後顯示用戶信息,同時也能夠選擇用戶退出功能web

wKioL1LiGeuT3ektAAKDnXiT_hQ767.jpg


好了,言歸正傳,實現這樣一個簡單模塊主要是用到servlet技術去處理用戶的註冊登陸等信息,固然咱們能夠在這基礎上能夠加入其它須要的東西好比加個驗證碼、忘記密碼、ajax技術等,固然servlet是基本元素,這個是須要掌握的。能夠經過下面幾個步驟去總結一下,但願能給剛入門java web的同窗起到拋磚引玉的做用:ajax

1.理清思路(要設計一個什麼東西),設計數據庫,數據表:sql

CREATE TABLE tb_user (
id int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(50) NOT NULL,
password varchar(50) NOT NULL,
sex varchar(10) NOT NULL,
tel varchar(50) NOT NULL,
photo TINYBLOB NOT NULL, 
email varchar(100) NOT NULL
)

這裏須要注意photo類型要使用TINYBLOB,而不是varchar不然會提示出錯信息:      Data too long for column 'photo' at row 1數據庫


2.設計4個包用於放置java文件:app

com.lxy(用戶實體信息)jsp

com.lxy.dao(數據庫操做文件)

com.lxy.servlet(servlet文件)

com.lxy.code(編碼文件)

wKioL1LiG7yBpC97AACvAyllMQk713.jpg


3.編寫用戶實體類user.java(package:com.lxy)

public class User {
    private int id;         // 標識
    private String username;// 用戶名
    private String password;// 密碼
    private String sex;     // 性別
    private String tel;     // 電話
    private String photo;   // 頭像
    private String email;   // 電子郵箱
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
下面省略getXXX()和setXXX()方法,請自行編寫


4.編寫數據庫鏈接ConnectDB(package:com.lxy.dao)同時導入mysql的jar包

public static Connection getConnection(){
        Connection conn = null;
        try {
            // 加載驅動
            Class.forName("com.mysql.jdbc.Driver");
            // 數據庫鏈接url
            String url = "jdbc:mysql://localhost:3306/db_test1";
            // 獲取數據庫鏈接
            conn = DriverManager.getConnection(url, "root", "lixiyu");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    /**
     * 關閉數據庫鏈接
     * @param conn Connection對象
     */
    public static void closeConnection(Connection conn){
        // 判斷conn是否爲空
        if(conn != null){
            try {
                conn.close();   // 關閉數據庫鏈接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

編寫用戶操做類UserDao(com.lxy.dao):

public void saveUser(User user){
        // 獲取數據庫鏈接Connection對象
        Connection conn = ConnectDB.getConnection();
        // 插入用戶註冊信息的SQL語句
        String sql = "insert into tb_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";
        try {
            // 獲取PreparedStatement對象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 對SQL語句的佔位符參數進行動態賦值
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getSex());
            ps.setString(4, user.getTel());
            ps.setString(5, user.getPhoto());
            ps.setString(6, user.getEmail());
            // 執行更新操做
            ps.executeUpdate();
            // 釋放此 PreparedStatement 對象的數據庫和 JDBC 資源
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            // 關閉數據庫鏈接
            ConnectDB.closeConnection(conn);
        }
    }
    /**
     * 用戶登陸
     * @param username 用戶名
     * @param password 密碼
     * @return 用戶對象
     */
    public User login(String username, String password){
        User user = null;
        // 獲取數據庫鏈接Connection對象
        Connection conn = ConnectDB.getConnection();
        // 根據用戶名及密碼查詢用戶信息
        String sql = "select * from tb_user where username = ? and password = ?";
        try {
            // 獲取PreparedStatement對象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 對SQL語句的佔位符參數進行動態賦值
            ps.setString(1, username);
            ps.setString(2, password);
            // 執行查詢獲取結果集
            ResultSet rs = ps.executeQuery();
            // 判斷結果集是否有效
            if(rs.next()){
                // 實例化一個用戶對象
                user = new User();
                // 對用戶對象屬性賦值
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setSex(rs.getString("sex"));
                user.setTel(rs.getString("tel"));
                user.setPhoto(rs.getString("photo"));
                user.setEmail(rs.getString("email"));
            }
            // 釋放此 ResultSet 對象的數據庫和 JDBC 資源
            rs.close();
            // 釋放此 PreparedStatement 對象的數據庫和 JDBC 資源
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            // 關閉數據庫鏈接
            ConnectDB.closeConnection(conn);
        }
        return user;
    }
    /**
     * 判斷用戶名在數據庫中是否存在
     * @param username 用戶名
     * @return 布爾值
     */
    public boolean userIsExist(String username){
        // 獲取數據庫鏈接Connection對象
        Connection conn = ConnectDB.getConnection();
        // 根據指定用戶名查詢用戶信息
        String sql = "select * from tb_user where username = ?";
        try {
            // 獲取PreparedStatement對象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 對用戶對象屬性賦值
            ps.setString(1, username);
            // 執行查詢獲取結果集
            ResultSet rs = ps.executeQuery();
            // 判斷結果集是否有效
            if(!rs.next()){
                // 若是無效則證實此用戶名可用
                return true;
            }
            // 釋放此 ResultSet 對象的數據庫和 JDBC 資源
            rs.close();
            // 釋放此 PreparedStatement 對象的數據庫和 JDBC 資源
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            // 關閉數據庫鏈接
            ConnectDB.closeConnection(conn);
        }
        return false;
    }
}


5.編寫註冊/登陸/退出的jsp和servlet(篇幅太長,這裏只給出註冊的關鍵代碼,案例源碼我會在後面共享出來)

註冊reg.jsp:

寫個javascripe去作判斷:

<script type="text/javascript">
           function reg(form){
               if(form.username.value == ""){
                   alert("用戶不能爲空!");
                   return false;
               }
               if(form.password.value == ""){
                   alert("密碼不能爲空!");
                   return false;
               }
               if(form.repassword.value == ""){
                   alert("確認密碼不能爲空!");
                   return false;
               }
               if(form.password.value != form.repassword.value){
                   alert("兩次密碼輸入不一致!");
                   return false;
               }
               if(form.tel.value == ""){
                   alert("聯繫電話不能爲空!");
                   return false;
               }
               if(form.email.value == ""){
                   alert("電子郵箱不能爲空!");
                   return false;
               }
           }
           function change(){
               var photo = document.getElementById("photo");
               var photoImg = document.getElementById("photoImg");
               photoImg.src = photo.value;
           }
       </script>

下面在jsp中設計你因此想要的表單的效果好比個人這個用個table去寫:

<form action="RegServlet" method="post" onsubmit="return reg(this);">
                           <table align="center" width="450" border="0">
                               <tr>
                                   <td align="right">用戶名:</td>
                                   <td>
                                       <input type="text" name="username">
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">密 碼:</td>
                                   <td>
                                       <input type="password" name="password">
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">確認密碼:</td>
                                   <td>
                                       <input type="password" name="repassword">
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">性 別:</td>
                                   <td>
                                       <input type="radio" name="sex" value="男" checked="checked">男
                                       <input type="radio" name="sex" value="女">女
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">頭 像:</td>
                                   <td>
                                       <select name="photo" id="photo" onchange="change();">
                                           <option value="p_w_picpaths/boy.png" selected="selected">頭像boy</option>
                                           <option value="p_w_picpaths/girl.png">頭像girl</option>
                                       </select>
                                       <img id="photoImg" src="p_w_picpaths/boy.png">
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">聯繫電話:</td>
                                   <td>
                                       <input type="text" name="tel">
                                   </td>
                               </tr>
                               <tr>
                                   <td align="right">電子郵箱:</td>
                                   <td>
                                       <input type="text" name="email">
                                   </td>
                               </tr>
                               <tr>
                                   <td colspan="2" align="center">
                                       <input type="submit" value="注 冊">
                                       <input type="reset" value="重 置">
                                   </td>
                               </tr>
                           </table>
                       </form>

寫註冊的RegServlet:

public class RegServlet extends HttpServlet {
    private static final long serialVersionUID = 5280356329609002908L;
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 獲取用戶名
        String username = request.getParameter("username");
        // 獲取密碼
        String password = request.getParameter("password");
        // 獲取性別
        String sex = request.getParameter("sex");
        // 獲取頭像
        String photo = request.getParameter("photo");
        // 獲取聯繫電話
        String tel = request.getParameter("tel");
        // 獲取電子郵箱
        String email = request.getParameter("email");
        // 實例化UserDao對象
        UserDao userDao = new UserDao();
        if(username != null && !username.isEmpty()){
            if(userDao.userIsExist(username)){
                // 實例化一個User對象
                User user = new User();   
                // 對用戶對象中的屬性賦值
                user.setUsername(username);
                user.setPassword(password);
                user.setSex(sex);
                user.setPhoto(photo);
                user.setTel(tel);
                user.setEmail(email);
                // 保存用戶註冊信息
                userDao.saveUser(user);
                request.setAttribute("info", "恭喜,註冊成功!<br>");
            }else{
                request.setAttribute("info", "錯誤:此用戶名已存在!");
            }
        }
        // 轉發到message.jsp頁面
        request.getRequestDispatcher("message.jsp").forward(request, response);
    }
}

在xml中聲明及映射servlet對象:

<!-- 用戶註冊 -->
    <servlet>
        <servlet-name>RegServlet</servlet-name>
        <servlet-class>com.lxy.servlet.RegServlet</servlet-class>
    </servlet>
<!-- Servlet映射 -->
    <servlet-mapping>
        <servlet-name>RegServlet</servlet-name>
        <url-pattern>/RegServlet</url-pattern>
    </servlet-mapping>


登陸那塊步驟也是類似的,就不一一展開了。源碼裏面註釋較多,看下學習下基本上能懂得。

—————————————————分割線—————————————————————

積少成多,集腋成裘

源碼請見附件

相關文章
相關標籤/搜索