Servlet註冊表單示例

這是一個使用servlet實現用戶註冊示例

在這裏,您將瞭解如何在servlet中創建簡單的註冊表單。這個示例中,我們使用MySQL數據庫。 需要先創建一個數據庫:testdb,以及一個表:servlet_user,這個表的結構所示:

CREATE TABLE `servlet_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  `passwd` varchar(32) NOT NULL DEFAULT '',
  `email` varchar(32) DEFAULT NULL,
  `city` varchar(24) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

要在servlet中創建註冊頁面,可以將數據庫邏輯與servlet分開。 但是在這裏,爲了簡化程序,我們在servlet中混合數據庫操作邏輯。以後可將DAODTOSingleton設計模式應用在JSP中開發此頁面。

Servlet中的註冊表單示例

在這個例子中,創建了以下幾個頁面。

  • register.html - 註冊表單顯示
  • User.java - 用戶POJO對象類,只有屬性對應的Setter和Getter方法。
  • Register.java - 執行數據收集和邏輯的頁面
  • RegisterDao.java - 數據訪問對象,連接數據庫及執行SQL語句。
  • web.xml - 應用程序配置和部署描述文件。

打開Eclipse,創建一個動態Web項目:ServletRegister,其完整的目錄結構如下所示 -

Servlet註冊表單示例

以下是這個項目中的幾個主要的代碼文件。

文件:*register.html* -

在這個頁面中,我們從用戶那裏獲取使用文本字段和組合框的輸入。用戶輸入的信息被轉發到Register Servlet,負責將數據存儲到數據庫中。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用戶註冊</title>
</head>
<body>
    <form action="register" method="post">
        <table>
            <tr>
                <td>用戶名:</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>密碼:</td>
                <td><input type="password" name="passwd" /></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type="text" name="email" /></td>
            </tr>
            <tr>
                <td>城市:</td>
                <td><select name="city">
                        <option value="北京">北京</option>
                        <option value="上海">上海</option>
                        <option value="廣州">廣州</option>
                        <option value="深圳">深圳</option>
                        <option value="其它">其它</option>
                </select></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交註冊" /></td>
            </tr>
        </table>
    </form>
</body>
</html>

文件:*User.java* -

package com.yiibai.bean;

public class User {
    private int id;
    private String username;
    private String passwd;
    private String email;
    private String city;

    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 getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

}

文件: Register.java

此servlet類接收用戶輸入的所有數據,並將其存儲到數據庫中。在這裏,由RegisterDao.java執行數據庫邏輯。但是也可以將連接數據庫的那部分代碼分離出去,這對於Web應用程序的維護將會是更好的。

package com.yiibai;

import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

import com.yiibai.bean.User;
import com.yiibai.dao.RegisterDao;

public class Register extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        String username = request.getParameter("username");
        String passwd = request.getParameter("passwd");
        String email = request.getParameter("email");
        String city = request.getParameter("city");

        if(username==null) {
            username = "";
        }
        passwd = (passwd==null)? "" :passwd;
        email = (email==null)? "" :email;
        city = (city==null)? "" :city;

        // 設置用戶數據信息
        User user = new User();
        user.setUsername(username);
        user.setPasswd(passwd);
        user.setEmail(email);
        user.setCity(city);

        int status = 0;
        try {
            status = RegisterDao.save(user);
            if (status > 0) {
                out.print("註冊用戶信息成功...");
            }else {
                out.print("註冊用戶信息失敗...");
            }
        } catch (Exception e2) {
            System.out.println(e2);
        }
        out.close();
    }
}

文件:*RegisterDao.java*

這個類主要用於實現數據連接和插入操作,詳細代碼如下 -

package com.yiibai.dao;

import java.util.*;

import com.yiibai.bean.User;
import java.sql.*;

public class RegisterDao {
    // 表名稱
    private static String tbName = "servlet_user";

    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8", "root", "123456");
        } catch (Exception e) {
            System.out.println(e);
        }
        return con;
    }

    // 插入用戶註冊信息
    public static int save(User u) {
        int status = 0;
        try {
            Connection con = RegisterDao.getConnection();
            String sql = "INSERT INTO " + tbName + "(name,passwd,email,city) values (?,?,?,?)";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, u.getUsername());
            ps.setString(2, u.getPasswd());
            ps.setString(3, u.getEmail());
            ps.setString(4, u.getCity());
            status = ps.executeUpdate();
            con.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return status;
    }
}

文件:*web.xml*

應用程序配置和部署描述文件,詳細代碼如下 -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletRegister</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
      <servlet>
        <servlet-name>ServRegister</servlet-name>
        <servlet-class>com.yiibai.Register</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServRegister</servlet-name>
        <url-pattern>/register</url-pattern>
    </servlet-mapping>
</web-app>

在編寫上面代碼後,部署此Web應用程序(在項目名稱上點擊右鍵->」Run On Server…」),打開瀏覽器訪問URL: http://localhost:8080/ServletRegister/ ,如果沒有錯誤,應該會看到以下結果 -

Servlet註冊表單示例

填寫上面表單項,並執行提交數據信息,註冊成功如下所示 -

Servlet註冊表單示例

現在查看servlet_user表中的數據,如下所示 -

mysql> select * from servlet_user;
+----+-------+--------+------------------+------+
| id | name  | passwd | email            | city |
+----+-------+--------+------------------+------+
|  1 | maxsu | 123456 | [email protected] | 廣州 |
+----+-------+--------+------------------+------+
1 row in set