<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">用户实体对象</span>
User类用于封装用户实体对象,提供了用户对象的详细信息以及相应的setXXX()和getXXX()方法:
<span style="font-family:Times New Roman;">package model;
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;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}</span><span style="font-family:宋体;">
</span>
数据库连接工具类
对数据库的操作封装成一个类,在类中提供相应的方法。获取数据库连接对象和关闭数据库连接的方法:
<span style="font-family:Times New Roman;">package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DataBaseUtil {
public static Connection getConnection(){
Connection conn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/registersystem";
conn=DriverManager.getConnection(url,"root","123");
}catch(Exception e){
e.printStackTrace();
System.out.println("数据库连接失败!");
}
return conn;
}
public static void closeConnection(Connection conn){
if(null!=conn){
try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("数据库关闭失败!");
}
}
}
}
</span>
用户数据库操作
与用户相关的数据库操作方法封装成一个类中,此类提供一系列需要的方法。例如:添加对象和验证对象。方法如下:
<span style="font-family:Times New Roman;">package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public boolean userIsExist(String username){
Connection conn=DataBaseUtil.getConnection();
String sql="SELECT * FROM login_user where username=?";
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, username);
ResultSet rs=ps.executeQuery();
if(!rs.next()){
return true;
}
rs.close();//释放ResultSet对象数据资源
ps.close();//释放PreparedStatement对象资源
} catch (SQLException e) {
e.printStackTrace();
}finally{
DataBaseUtil.closeConnection(conn);
}
return false;
}
public void saveUser(User user){
Connection conn=DataBaseUtil.getConnection();
String sql="INSERT INTO login_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";
try {
PreparedStatement ps=conn.prepareStatement(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();
ps.close();//释放PreparedStatement对象资源
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("数据库写入数据失败!");
}finally{
DataBaseUtil.closeConnection(conn);///关闭数据库连接,释放连接资源
}
}
public User login(String username,String password){
User user=null;
Connection conn=DataBaseUtil.getConnection();
String sql="SELECT * FROM login_user WHERE username=? AND password=?";
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2,password);
ResultSet rs=ps.executeQuery();
if(rs.next()){
user=new User();
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"));
}
rs.close();//释放ResultSet对象数据资源
ps.close();//释放PreparedStatement对象资源
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("用户登录验证错误!");
}finally{
DataBaseUtil.closeConnection(conn);
}
return user;
}
}</span>
创建Servlet对象:
RegServlet类用于实现用户注册,创建reg.jsp视图用于显示。LoginServlet类实现用户登录,处理登录请求。UserExitServlet类进行处理,用于用户退出。
<span style="font-family:Times New Roman;">package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.User;
import model.UserDao;
public class RegServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
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");
System.out.println("--"+username+"-"+password+"-"+sex+"-"+photo+"-"+email);
UserDao userDao=new UserDao();
if(null!=username && !username.isEmpty()){
if(userDao.userIsExist(username)){
User user=new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.setTel(tel);
user.setSex(sex);
user.setPhoto(photo);
userDao.saveUser(user);
request.setAttribute("info", "恭喜,注册成功!<br/>");
}else{
request.setAttribute("info", "错误:此用户已经存在!<br/>");
}
}///if
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}
</span>
<span style="font-family:Times New Roman;">package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.User;
import model.UserDao;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 2L;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
String username=request.getParameter("username");
String password=request.getParameter("password");
UserDao userDao=new UserDao();
User user=userDao.login(username, password);
if(null!=user){
///将用户对象放入Session中
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("message.jsp").forward(request, response);
}else{
request.setAttribute("info", "错误:用户名或密码错误!");
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}
}</span>
<span style="font-family:Times New Roman;">package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.User;
public class UserExitServlet extends HttpServlet {
private static final long serialVersionUID = 4L;
///The specified HTTP method is not allowed for Get当写成doPost时候,不能正常获取
//资源,未重写父类方法以至于报错,方法需要对应。备忘!
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");
if(null!=user){
session.removeAttribute("user");
request.setAttribute("info", user.getUsername()+"已成功退出!");
}
System.out.println("--LOVE--");
///转发到时message.jsp页面
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}</span>
Servlet配置文件如下:
<span style="font-family:Times New Roman;"><servlet>
<servlet-name>RegServlet</servlet-name>
<servlet-class>controller.RegServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>controller.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ExitServlet</servlet-name>
<servlet-class>controller.UserExitServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/RegServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ExitServlet</servlet-name>
<url-pattern>/ExitServlet</url-pattern>
</servlet-mapping></span>
创建数据表语句如下:
<span style="font-family:Times New Roman;">CREATE TABLE login_user(
id int PRIMARY KEY AUTO_INCREMENT,
username char(25),
password char(25),
sex char(25),
tel char(25),
photo char(25),
email char(25)
)</span>
完整源程序下载地址:
源程序 密码:t69d