注册还是沿用上一期的表和数据库 先看看文件布局 先看看JavaBean的设计User.java
package model; /** * 用户实体类 */ public class User { private int id; // 标识 private String username;// 用户名 private String password;// 密码 private String sex; // 性别 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; } }接下来看看数据库的操作DataBaseUtil:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 数据库连接工具类 */ public class DataBaseUtil { /** * 获取数据库连接 * @return Connection对象 */ public static Connection getConnection(){ Connection conn = null; try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 数据库连接url String url = "jdbc:mysql://localhost:3306/MyBlog"; // 获取数据库连接 conn = DriverManager.getConnection(url, "root", ""); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭数据库连接 * @param conn Connection对象 */ public static void closeConnection(Connection conn){ // 判断conn是否为空 if(conn != null){ try { conn.close(); // 关闭数据库连接 } catch (SQLException e) { e.printStackTrace(); } } } }登陆的UserDao.java
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import model.User; /** * 用户数据库操作类 */ public class UserDao { /** * 用户登录 * @param username 用户名 * @param password 密码 * @return 用户对象 */ public User login(String username, String password){ User user = null; // 获取数据库连接Connection对象 Connection conn = DataBaseUtil.getConnection(); // 根据用户名及密码查询用户信息 String sql = "select * from tb_user where username = ? and password = ?"; try { // 获取PreparedStatement对象 PreparedStatement ps = conn.prepareStatement(sql); // 对SQL语句的占位符参数进行动态赋值 ps.setString(1, username); ps.setString(2, password); // 执行查询获取结果集 ResultSet rs = ps.executeQuery(); // 判断结果集是否有效 if(rs.next()){ // 实例化一个用户对象 user = new User(); // 对用户对象属性赋值 user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setSex(rs.getString("sex")); } // 释放此 ResultSet 对象的数据库和 JDBC 资源 rs.close(); // 释放此 PreparedStatement 对象的数据库和 JDBC 资源 ps.close(); } catch (Exception e) { e.printStackTrace(); }finally{ // 关闭数据库连接 DataBaseUtil.closeConnection(conn); } return user; } /** * 判断用户名在数据库中是否存在 * @param username 用户名 * @return 布尔值 */ public boolean userIsExist(String username){ // 获取数据库连接Connection对象 Connection conn = DataBaseUtil.getConnection(); // 根据指定用户名查询用户信息 String sql = "select * from tb_user where username = ?"; try { // 获取PreparedStatement对象 PreparedStatement ps = conn.prepareStatement(sql); // 对用户对象属性赋值 ps.setString(1, username); // 执行查询获取结果集 ResultSet rs = ps.executeQuery(); // 判断结果集是否有效 if(!rs.next()){ // 如果无效则证明此用户名可用 return true; } // 释放此 ResultSet 对象的数据库和 JDBC 资源 rs.close(); // 释放此 PreparedStatement 对象的数据库和 JDBC 资源 ps.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ // 关闭数据库连接 DataBaseUtil.closeConnection(conn); } return false; } }LoginServlet.java
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; /** * 用户登录Servlet类 */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = -3009431503363456775L; @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户名 String username = request.getParameter("username"); // 获取密码 String password = request.getParameter("password"); // 实例化UserDao对象 UserDao userDao = new UserDao(); // 根据用户密码查询用户 User user = userDao.login(username, password); // 判断user是否为空 if(user != null){ // 将用户对象放入session中 request.getSession().setAttribute("user", user); // 转发到result.jsp页面 request.getRequestDispatcher("message.jsp").forward(request, response); }else{ // 登录失败 request.setAttribute("info", "错误:用户名或密码错误!"); request.getRequestDispatcher("message.jsp").forward(request, response); } } }UserExitServlet.java
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; /** * 用户退出Servlet */ public class UserExitServlet extends HttpServlet { private static final long serialVersionUID = 1599366365079846238L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取session HttpSession session = request.getSession(); // 获取用户对象 User user = (User)session.getAttribute("user"); // 判断用户是否有效 if(user != null){ // 将用户对象逐出session session.removeAttribute("user"); // 设置提示信息 request.setAttribute("info", user.getUsername() + " 已成功退出!"); } // 转发到message.jsp页面 request.getRequestDispatcher("message.jsp").forward(request, response); } }最后就是我们的jsp页面: login.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>用户登录</title> <link rel="stylesheet" type="text/css" href="images/styles.css"> <script type="text/javascript"> function login(form){ if(form.username.value == ""){ alert("用户不能为空!"); return false; } if(form.password.value == ""){ alert("密码不能为空!"); return false; } } </script> </head> <body> <div align="center"> <div class="div1"> <div class="top">用户注册</div> <div class="bottom"> <div class="div2"> <ul> <li><a href="login.jsp">用户登录</a></li> <li><a href="message.jsp">当前用户</a></li> <li><a href="UserExitServlet">用户退出</a></li> </ul> </div> <div class="div3"> <form action="LoginServlet" method="post" onSubmit="return login(this);"> <table align="center" width="300" border="0" class="tb1"> <tr> <td align="right">用户名:</td> <td> <input type="text" name="username"> </td> </tr> <tr> <td align="right">密 码:</td> <td> <input type="password" name="password"> </td> </tr> <tr> <td colspan="2" align="center" height="50"> <input type="submit" value="登 录"> <input type="reset" value="重 置"> </td> </tr> </table> </form> </div> </div> </div> </div> </body> </html>message.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@ page import="model.User" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>提示信息</title> <link rel="stylesheet" type="text/css" href="images/styles.css"> </head> <body> <div align="center"> <div class="div1"> <div class="top">提示信息</div> <div class="bottom"> <div class="div2"> <ul> <li><a href="login.jsp">用户登录</a></li> <li><a href="message.jsp">当前用户</a></li> <li><a href="UserExitServlet">用户退出</a></li> </ul> </div> <div class="div3"> <% // 获取提示信息 String info = (String)request.getAttribute("info"); // 如果提示信息不为空,则输出提示信息 if(info != null){ out.println(info); } // 获取登录的用户信息 User user = (User)session.getAttribute("user"); // 判断用户是否登录 if(user != null){ %> <table align="center" width="350" border="1" height="200" bordercolor="#E8F4CC"> <tr> <td align="center" colspan="2"> <span style="font-weight: bold;font-size: 18px;"><%=user.getUsername() %></span> 登录成功! </td> </tr> <tr> <td align="right">性 别:</td> <td><%=user.getSex()%></td> </tr> </table> <% }else{ out.println("<br>对不起,您还没有登录!"); } %> </div> </div> </div> </div> </body> </html>看看登陆情况: 用户退出后再点击当前用户: