今天来写一个简易版的用户登录和注册功能
先写一个DBUtil工具类
public class DBUtil {
//加载数据库驱动
static {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//连接数据库
public static Connection getConn() {
Connection conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;databaseName=school",
"sa", "1");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭资源
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (conn != null)
conn.close();
if (rs != null)
rs.close();
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//增删改的公共部分,提取成一个方法,方便调用
public static int update(String sql,Object[] objs){
int count = 0;
Connection conn = getConn();
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < objs.length; i++) {
ps.setObject(i+1, objs[i]);
}
count = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close(conn, ps, null);
}
return count;
}
//查询的代码提取成一个方法,方便调用
public static ArrayList<Users> getSelect(){
ArrayList<Users> list = new ArrayList<Users>();
Connection conn = DBUtil.getConn();
String sql = "SELECT * FROM users";
PreparedStatement ps = null;
ResultSet rs = null;
Users users = null;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
users = new Users();
users.setId(rs.getInt("id"));
users.setUserName(rs.getString("userName"));
users.setPwd(rs.getString("pwd"));
users.setSex(rs.getString("sex"));
users.setAge(rs.getInt("age"));
list.add(users);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.close(conn, ps, rs);
}
return list;
}
}
注册
注册相当于就是新增一个用户
在WebRoot目录下创建一个.jsp文件
// 注册页面
<form action="reg" method="post">
账号:<input type="text" name="userName"/><br />
密码:<input type="password" name="pwd"/><br />
年龄:<input type="text" name="age"/><br />
性别:<input type="text" name="sex"/><br />
<input type="submit" value="点击注册" />
</form>
在src目录下创建Servlet文件如图所示
在dopost方法里写入
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
//获取数据
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
Integer age =Integer.parseInt(request.getParameter("age"));
String sex = request.getParameter("sex");
//设置一个sql语句和一个Object类型的数组
String sql = "INSERT INTO users VALUES(?,?,?,?)";
Object[] objs = { userName, pwd, age, sex };
//调用DBUtil类里的update方法并返回值
int count = DBUtil.update(sql, objs);
if (count > 0) {
//如果count>0,调用DBUtil类的getSelect()方法并返回一个ArrayList数组
ArrayList<Users> list = DBUtil.getSelect();
//把list存入,方便不同页面间传值
request.setAttribute("list", list);
//使用转发,如果注册成功,跳转到查询所有用户信息页面
request.getRequestDispatcher("refer.jsp").forward(request, response);
} else {
//使用重定向,如果注册失败,跳转到注册页面,重新注册
response.sendRedirect("reg.jsp");
}
在创建一个refer.jsp用于查询所有用户信息
<table>
<thead>
<tr>
<th>
编号
</th>
<th>
用户名
</th>
<th>
密码
</th>
<th>
性别
</th>
<th>
年龄
</th>
</tr>
</thead>
<tbody>
<%
ArrayList<Users> list = (ArrayList<Users>) request.getAttribute("list");
for (Users users : list) {
%>
<tr>
<td><%=users.getId() %></td>
<td><%=users.getUserName() %></td>
<td><%=users.getPwd() %></td>
<td><%=users.getSex() %></td>
<td><%=users.getAge() %></td>
</tr>
<%
}
%>
</tbody>
</table>
登录
登录,就是在数据库里查询和输入的账号,密码一致的用户信息
先建一个login.jsp
<form action="login" method="post">
账号:
<input type="text" name="userName" />
<br />
密码:
<input type="password" name="pwd" /><br />
<input type="submit" value="登录" />
<a href="reg.jsp">注册</a>
</form>
在创建一个LoginServlet.java的Servlet类
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
//获取数据
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
//调用方法
Users users = SelectTest.select(userName, pwd);
if (users != null) {
HttpSession session = request.getSession();
session.setAttribute("users", users);
response.sendRedirect("main.jsp");
}else{
response.sendRedirect("main.jsp");
}