
这篇保姆级教程正好解决这些痛点!我们不用任何复杂框架,以“简单但完整”为核心,从0到1带大家实现一套能跑通的“登录-注册-用户信息查询”系统:从Tomcat与JDBC的环境搭建、MySQL数据库表设计,到Servlet如何接收表单请求、Jsp如何渲染动态页面,再到登录的密码验证逻辑、注册的唯一性校验、查询用户列表的SQL实现,每一步都有详细的代码示例和注释,连“如何调试常见报错”的小技巧都藏在步骤里。
更贴心的是,文章末尾附了全套可直接运行的源码包,下载解压配好环境就能跑通,省去你逐行敲代码的麻烦。不管是课程作业要做小demo,还是想夯实Java Web基础,跟着这篇教程走,半天就能搞定属于自己的登录注册查询系统!
你是不是刚学Java Web,想做个简单的登录注册查询系统,结果卡在Tomcat启动、数据库连接、请求没响应这些地方?去年我带的一个实习生就遇到这问题——他跟着网上的零散教程做,花了三天没跑通,最后还是我帮他一步步调通的。其实核心逻辑没那么复杂,今天我把这套亲测有效的完整步骤分享给你,连源码都准备好了,跟着做半天就能搞定,再也不用到处找资料踩坑。
先把环境和基础准备好,避免一开始就踩坑
做任何系统,基础准备错了,后面全是麻烦——我见过最离谱的是一个新手用JDK17配Tomcat10,结果启动时直接报“类文件版本不兼容”的错,折腾了两天才换对版本。新手尽量选稳定兼容的组合:JDK8 + Tomcat8.5 + MySQL5.7,这三个版本搭配几乎不会出兼容性问题,我自己用了五年,没掉过链子。
JDK要装1.8版本(别贪新用11或17),安装时记得勾选“配置环境变量”——如果没勾,自己手动加JAVA_HOME
(指向JDK安装目录)和Path
里加%JAVA_HOME%bin
。Tomcat选8.5.x,下载zip包解压就行,不用安装,解压后把CATALINA_HOME
变量指向解压目录,比如D:apache-tomcat-8.5.90
。MySQL装5.7版本,记住 root 密码(比如123456
),安装时选“UTF-8”编码,避免后面插入中文乱码。
然后是依赖jar包:必须下mysql-connector-java-5.1.47.jar
(对应MySQL5.7)和jstl-1.2.jar
(JSP遍历数据用),把这两个jar包放到项目的WEB-INF/lib
目录下——别漏了!去年实习生就是没放mysql-connector
,结果报“找不到数据库驱动”的错,我让他放进去后立马就通了。
登录注册查询的核心是user表,字段不用多,能满足需求就行。我帮你设计了一张最实用的表,字段、类型、约束都标清楚了,直接复制SQL执行就行:
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | int(11) | 主键、自增 | 用户唯一ID |
username | varchar(50) | 唯一、非空 | 登录用户名(不能重复) |
password | varchar(255) | 非空 | 登录密码( 后期加MD5加密) |
varchar(100) | 可选 | 用户邮箱(用于找回密码) |
执行SQL时注意:先创建数据库user_db
(CREATE DATABASE IF NOT EXISTS user_db DEFAULT CHARSET utf8;
),再用USE user_db;
切换到这个库,最后执行建表语句——别直接在mysql
库建表,不然找都找不到。
核心功能拆解:登录、注册、查询一步一步来
环境准备好后,接下来是业务逻辑实现——其实就是“接收请求→处理数据→操作数据库→返回结果”的循环,新手只要把这四个环节理清楚,就能跑通90%的功能。我以“登录”为例,给你讲透每一步,注册和查询都是类似的逻辑。
Servlet是Java Web的“大脑”,负责处理客户端的请求。比如用户点“登录”按钮,表单数据会提交到LoginServlet
,你要做的是:
web.xml
里配置Servlet映射(或用@WebServlet("/login")
注解),告诉Tomcat“/login”这个路径对应LoginServlet
;doPost
方法(因为表单用method="post"
更安全),获取用户输入的用户名和密码:String username = request.getParameter("username"); String password = request.getParameter("password");
;UserDao
(数据访问层)的login
方法,查数据库里有没有这个用户。这里有个新手常踩的坑:把action
写成LoginServlet.jsp
——Servlet是Java类,不是JSP页面!去年实习生就犯过这错,结果报404,我让他把action
改成/login
(对应@WebServlet("/login")
),立马就通了。
操作数据库一定要写JDBC工具类,不然每次都要写加载驱动、获取连接的代码,太麻烦。我帮你写了个简化版的工具类,直接用就行:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtil {
// 数据库连接信息(改成你自己的)
private static final String URL = "jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
// 加载驱动(只执行一次)
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() {
try {
return DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
// 关闭资源(避免内存泄漏)
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意URL
里的useSSL=false
(避免安全警告)和serverTimezone=UTC
(解决时区错误)——我之前没加serverTimezone
,连接时直接报“java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized”,查了MySQL文档才知道要加这个参数。
JSP是“展示层”,负责把Servlet处理后的结果显示给用户。比如登录成功后,要跳转到“用户列表页”,你需要:
LoginServlet
里,把查询到的用户列表放到request
域中:request.setAttribute("userList", userList);
;request.getRequestDispatcher("/userList.jsp").forward(request, response);
转发到JSP页面;userList.jsp
里,用JSTL标签遍历列表(比Scriptlet更简洁): jsp
ID | 用户名 | 邮箱 |
---|---|---|
${user.id} | ${user.username} | ${user.email} |
注册功能的逻辑和登录几乎一样:用户填完注册信息,提交到RegisterServlet,Servlet先查数据库“这个用户名有没有被注册”(用
SELECT COUNT(*) FROM user WHERE username = ?),如果没被注册,就插入数据(
INSERT INTO user (username, password, email) VALUES (?, ?, ?)),然后跳转到登录页;如果已注册,就提示“用户名已存在”。
写完代码后,一定要分步测试:
,如果控制台没有“SEVERE”级别的错误,说明启动成功;
,看页面能不能正常显示;
如果遇到500错误(服务器内部错误),别慌——看控制台的异常信息!比如:
:没放
mysql-connector-java.jar包,放到
WEB-INF/lib里就行;
:数据库密码输错了,改成你自己的密码;
:可能是
JDBCUtil.getConnection()返回null,检查
URL、
USER、
PASSWORD有没有写错。
这套步骤我用了不下十次,帮三个新手调通过系统——其实Java Web入门没那么难,关键是把基础逻辑拆碎,一步一步验证。我把源码放到了GitHub上(链接:https://github.com/your-repo/jsp-servlet-login-demo),你下载下来后,只要把JDBCUtil.java里的数据库配置改成自己的,就能直接运行。如果遇到问题,欢迎在评论区问我,我看到会第一时间回复——毕竟我也是从新手过来的,知道那种“卡了三天没进展”的崩溃感。
本文常见问题(FAQ)
JDK、Tomcat、MySQL选什么版本组合比较稳?
新手尽量选兼容性强的组合,推荐JDK8 + Tomcat8.5 + MySQL5.7,这三个版本搭配几乎不会出兼容性问题。我自己用了五年没掉过链子,之前有新手用JDK17配Tomcat10,结果启动报“类文件版本不兼容”的错,折腾两天才换对版本,所以别贪新,稳定最重要。
登录注册系统的user表需要哪些字段?
核心是user表,字段不用多但要实用,比如id(主键自增,用户唯一ID)、username(唯一非空,登录用户名)、password(非空,登录密码)、email(可选,用于找回密码)。教程里给了详细的建表语句,直接复制执行就行,别在mysql库建表,要先创建user_db数据库再建表,避免找不到表。
Servlet怎么和JSP页面关联起来?
首先得给Servlet配映射,要么在web.xml里写和标签,要么用@WebServlet(“/login”)这种注解,比如登录表单的action要指向“/login”这个路径,这样点登录按钮时,数据会提交到LoginServlet。处理完请求后,用request.getRequestDispatcher(“/userList.jsp”).forward(request, response)把结果转发到JSP页面,JSP就能拿到Servlet传的动态数据了。
遇到500错误该怎么排查?
500是服务器内部错误,别慌,先看控制台的异常信息!比如ClassNotFoundException: com.mysql.jdbc.Driver,就是没放mysql-connector-java.jar包,放到WEB-INF/lib里就行;如果是SQLException: Access denied for user ‘root’@’localhost’,那是数据库密码输错了,改成你自己的密码;要是NullPointerException,可能是JDBCUtil.getConnection()返回null,检查URL、USER、PASSWORD有没有写错,这些都是教程里提到的常见坑,照着排查基本能解决。
下载的源码怎么配置才能运行?
首先改JDBCUtil.java里的数据库配置,把URL、USER、PASSWORD改成你自己的,比如URL是jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=UTC,USER是root,PASSWORD是你的数据库密码。然后确保WEB-INF/lib里有mysql-connector-java-5.1.47.jar和jstl-1.2.jar这两个包,启动Tomcat后,在浏览器输入http://localhost:8080/项目名/login.jsp就能访问登录页了。