這是一個(gè)使用servlet實(shí)現(xiàn)用戶注冊(cè)示例
在這里,您將了解如何在servlet中創(chuàng)建簡(jiǎn)單的注冊(cè)表單。這個(gè)示例中,我們使用MySQL數(shù)據(jù)庫(kù)。 需要先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):testdb,以及一個(gè)表:servlet_user,這個(gè)表的結(jié)構(gòu)所示:
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中創(chuàng)建注冊(cè)頁面,可以將數(shù)據(jù)庫(kù)邏輯與servlet分開。 但是在這里,為了簡(jiǎn)化程序,我們?cè)趕ervlet中混合數(shù)據(jù)庫(kù)操作邏輯。以后可將DAO,DTO和Singleton設(shè)計(jì)模式應(yīng)用在JSP中開發(fā)此頁面。
在這個(gè)例子中,創(chuàng)建了以下幾個(gè)頁面。
打開Eclipse,創(chuàng)建一個(gè)動(dòng)態(tài)Web項(xiàng)目:ServletRegister,其完整的目錄結(jié)構(gòu)如下所示 -

以下是這個(gè)項(xiàng)目中的幾個(gè)主要的代碼文件。
文件:*register.html* -
在這個(gè)頁面中,我們從用戶那里獲取使用文本字段和組合框的輸入。用戶輸入的信息被轉(zhuǎn)發(fā)到Register Servlet,負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用戶注冊(cè)</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="提交注冊(cè)" /></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類接收用戶輸入的所有數(shù)據(jù),并將其存儲(chǔ)到數(shù)據(jù)庫(kù)中。在這里,由RegisterDao.java執(zhí)行數(shù)據(jù)庫(kù)邏輯。但是也可以將連接數(shù)據(jù)庫(kù)的那部分代碼分離出去,這對(duì)于Web應(yīng)用程序的維護(hù)將會(huì)是更好的。
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;
// 設(shè)置用戶數(shù)據(jù)信息
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("注冊(cè)用戶信息成功...");
}else {
out.print("注冊(cè)用戶信息失敗...");
}
} catch (Exception e2) {
System.out.println(e2);
}
out.close();
}
}
文件:*RegisterDao.java*
這個(gè)類主要用于實(shí)現(xiàn)數(shù)據(jù)連接和插入操作,詳細(xì)代碼如下 -
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;
}
// 插入用戶注冊(cè)信息
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*
應(yīng)用程序配置和部署描述文件,詳細(xì)代碼如下 -
<?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應(yīng)用程序(在項(xiàng)目名稱上點(diǎn)擊右鍵->”Run On Server…”),打開瀏覽器訪問URL: http://localhost:8080/ServletRegister/ ,如果沒有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -

填寫上面表單項(xiàng),并執(zhí)行提交數(shù)據(jù)信息,注冊(cè)成功如下所示 -

現(xiàn)在查看servlet_user表中的數(shù)據(jù),如下所示 -
mysql> select * from servlet_user;
+----+-------+--------+------------------+------+
| id | name | passwd | email | city |
+----+-------+--------+------------------+------+
| 1 | maxsu | 123456 | maxsu@yiibai.com | 廣州 |
+----+-------+--------+------------------+------+
1 row in set