
技术栈与工具准备
JDK 1.8+、Tomcat 8.5+、MySQL 5.7+
开发工具推荐IntelliJ IDEA或Eclipse with WTP插件
需导入jar包:mysql-connector-java (驱动)、javax.servlet-api (Servlet支持)
数据库设计
创建用户表user,包含基础字段:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(32) NOT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
实体类实现
创建User类映射数据库字段:
public class User {
private int id;
private String username;
private String password;
private String email;
// 生成getter/setter方法
// 建议重写toString()方法
}
DAO层开发
实现数据库操作类UserDAO:
public class UserDAO {
public boolean register(User user) {
String sql = "INSERT INTO user(username,password,email) VALUES(?,?,?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, user.getUsername());
ps.setString(2, MD5Util.encode(user.getPassword()));
ps.setString(3, user.getEmail());
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public User login(String username, String password) {
String sql = "SELECT * FROM user WHERE username=? AND password=?";
// 实现查询逻辑
}
}
工具类封装
数据库连接工具DBUtil:
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/db_name?useSSL=false";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
密码加密工具MD5Util:
public class MD5Util {
public static String encode(String str) {
return DigestUtils.md5Hex(str);
}
}
Servlet实现
注册处理RegisterServlet:
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
boolean isSuccess = new UserDAO().register(user);
if(isSuccess) {
response.sendRedirect("login.jsp");
} else {
request.setAttribute("msg", "注册失败");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
}
}
登录处理LoginServlet:
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new UserDAO().login(username, MD5Util.encode(password));
if(user != null) {
request.getSession().setAttribute("user", user);
response.sendRedirect("welcome.jsp");
} else {
request.setAttribute("msg", "用户名或密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
JSP页面开发
登录页面login.jsp核心表单:
<form action="login" method="post">
<input type="text" name="username" placeholder="用户名" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">登录</button>
</form>
${msg}
注册页面register.jsp类似实现,表单action指向/register
过滤器配置
实现登录验证过滤器AuthFilter:
@WebFilter("/*")
public class AuthFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String uri = request.getRequestURI();
if(uri.contains("login") || uri.contains("register")
|| uri.contains(".css") || uri.contains(".js")) {
chain.doFilter(req, resp);
return;
}
if(request.getSession().getAttribute("user") == null) {
request.getRequestDispatcher("login.jsp").forward(req, resp);
return;
}
chain.doFilter(req, resp);
}
}
项目部署
- 将编译后的项目放入Tomcat的webapps目录
- 启动MySQL服务并确保数据库连接配置正确
- 启动Tomcat服务器
- 通过
http://localhost:8080/项目名/login.jsp访问
功能扩展建议
- 增加验证码功能
- 实现密码找回模块
- 添加记住密码功能(Cookie实现)
- 使用Ajax实现异步验证
- 引入Bootstrap优化前端界面
1150

被折叠的 条评论
为什么被折叠?



