首先,看一下用户注册架构设计
M层:Users类,IUsersDao类,UsersDao类,DaoFactory类,DBFactory类
V层:register.jsp admin.jsp
C层:UserManagAction类
降低控制器与业务逻辑的耦合性,从而优化了代码结构
数据表users的设计
Users类
public class Users {
private String username; //用户名
private String password; //密码
private String sex; //性别
private String prof; //职业
private String addr; //地址
private String tel; //电话
private String pcode; //邮编
public Users() { super(); }
public Users(String username, String password) {
this.username = username;
this.password = password;
}
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 getProf() {
return prof;
}
public void setProf(String prof) {
this.prof = prof;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getPcode() {
return pcode;
}
public void setPcode(String pcode) {
this.pcode = pcode;
}
public Users(String username, String password, String sex, String prof,String addr, String tel, String pcode) {
this.username = username;
this.password = password;
this.sex = sex;
this.prof = prof;
this.addr = addr;
this.tel = tel;
this.pcode = pcode;
}
}
DaoFactory类
import beans.Users;
public class DaoFactory{
public static DaoFactory INSTANCE;
static {
INSTANCE = new DaoFactory();
}
public DaoFactory() { super(); }
//用户登录
public Users login(String username, String password) {
return new UsersDao().getUser(username, password);
}
//按照姓名查询
public boolean findUserByName(String username) {
return new UsersDao().getUserByName(username);
}
//用户注册
public int regUser(Users user) {
return new UsersDao().addUser(user);
}
}
IUsersDao类
import beans.Users;
public interface IUsersDao {
public boolean getUserByName(String username);
public int addUser(Users user);
}
UsersDao类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import beans.Users;
import utils.DBFactory;
public class UsersDao implements IUsersDao {
public boolean getUserByName(String username) {
boolean existed = false;
Connection conn = null;
try {
conn = DBFactory.INSTANCE.getConnection();
PreparedStatement ps = conn.prepareStatement("select username from users where username=?");
ps.setString(1, username);
ResultSet rs = ps.executeQuery();
if (rs.next())
existed = true;
ps.close();
} catch (SQLException e) { e.printStackTrace(); }
finally { DBFactory.INSTANCE.closeConn(conn); }
return existed;
}
public int addUser(Users user) {
int tag = -1;//默认注册失败标志
Connection conn = null;
try {
if (getUserByName(user.getUsername()))
tag = 2;// 用户已经存在
else {
conn = DBFactory.INSTANCE.getConnection();
String sql = "insert into users(username,password,sex,prof,addr,tel,pcode) values(?,?,?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.setString(3, user.getSex());
ps.setString(4, user.getProf());
ps.setString(5, user.getAddr());
ps.setString(6, user.getTel());
ps.setString(7, user.getPcode());
//ps.executeUpdate();
tag = ps.executeUpdate();
//tag=1;
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally { DBFactory.INSTANCE.closeConn(conn); }
return tag;
}
public Users getUser(String username, String password) {
Connection conn = null;
Users user = null;
try {
conn = DBFactory.INSTANCE.getConnection();
PreparedStatement ps = conn.prepareStatement("select username,password from users where username=? and password=?");
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if (rs.next())
user = new Users(rs.getString(1), rs.getString(2));
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBFactory.INSTANCE.closeConn(conn);
}
return user;
}
public void start() {
// TODO Auto-generated method stub
}}
UserManagerAction类(控制层)
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import beans.Users;
import daos.DaoFactory;
@WebServlet("/userdo")
public class UserManagerAction extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String desURL = "index.jsp";// 默认转发到主页
//Users user=CommonUtils.toBean(request.getParameterMap(), Users.class);
Users user = new Users();
user.setUsername(request.getParameter("username"));
user.setPassword(request.getParameter("password"));
user.setSex(request.getParameter("sex"));
user.setProf(request.getParameter("prof"));
user.setAddr(request.getParameter("addr"));
user.setTel(request.getParameter("tel"));
user.setPcode(request.getParameter("pcode"));
String doit = request.getParameter("do");
if (doit != null) {
if (doit.equals("ureg")) {
int state = DaoFactory.INSTANCE.regUser(user);
request.setAttribute("tag", state);
desURL = "register.jsp";
} else if (doit.equals("uin")) {
if (DaoFactory.INSTANCE.login(user.getUsername(),user.getPassword()) != null)
desURL = "index.jsp";
else
desURL = "login.jsp";
}
}
RequestDispatcher rd = request.getRequestDispatcher(desURL);
rd.forward(request, response);
}
}
DBFactory类(连接数据库)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBFactory2 {
private final String driver = "org.postgresql.Driver";
private final String url = "jdbc:postgresql://localhost:5432/jspdb?useUnicode=true&characterEncoding=UTF-8";
private final String user = "postgres";
private final String password = "182085";
public static DBFactory2 INSTANCE;
static {
INSTANCE = new DBFactory2();
}
private DBFactory2() { super(); }
public Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) { e.printStackTrace(); }
return conn;
}
public void closeConn(Connection conn) {
try {
if (conn != null) { conn.close(); }
} catch (SQLException e) { e.printStackTrace(); }
}
}
register.jsp
<style>
label {float:left;}
input[required]+label:after {
content:'*';
color:red;
margin-right:5px;
}
</style>
</head>
<body>
<form name="register" method="post" action="userdo?do=ureg">
<input type="text" name="username" required="required" οnkeyup="this.value=this.value.replace(/^ +| +$/g,'')">
<label for="field">用户名:</label><br>
<input type="password" name="password" required="required" οnkeyup="this.value=this.value.replace(/^ +| +$/g,'')">
<label for="field">密码 :</label><br>
性别 <input type="radio" name="sex" value="男" />男
<input type="radio" name="sex" value="女" />女<br>
职业<input type="text" name="prof"><br>
地址<input type="text" name="addr"><br>
电话<input type="text" name="tel"><br>
邮编<input type="text" name="pcode"><br>
<input type="submit" value="注册">
<input type="reset" value="重置">
</form>
<c:if test="${tag!=null}">
<c:choose>
<c:when test="${tag==2}">
<font style="color: #FF0000">待注册用户<b>【${param.username}】</b>已经存在!</font>
</c:when>
<c:when test="${tag==1}">
<font style="color: #FF0000">【${param.username}】注册成功!</font>
</c:when>
<c:when test="${tag==-1||user==0}">
<font style="color: #FF0000">注册失败!</font>
</c:when>
</c:choose>
</c:if>
</body>
</html>
login.jsp
<body>
<form name="register" method="post" action="userdo?do=uin">
用户名<input type="text" name="username" required="required" οnkeyup="this.value=this.value.replace(/^ +| +$/g,'')"><br>
密码<input type="password" name="password" required="required">
<input type="submit" value="登陆">
<input type="button" value="注册" οnclick="window.location.href='register.jsp'">
</form>
<c:if test="${!empty param.username}">
<font style="color: #FF0000">【${param.username}】用户名或密码错误!</font>
</c:if>
</body>
indes.jsp
<body>
欢迎来到主页
</body>