下面的流程是按「底层→上层」的顺序设计的,每一步都必须验证通过,再往下走,这样能精准定位问题,不会再像之前那样反复踩坑。
🔴 前置准备:彻底清理环境(避免旧配置干扰)
先确认你的项目依赖列表(共 3 个)
1、Maven相关管理依赖
2. Servlet 接口依赖
pom.xml文件中写法
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
作用:写 Java Web 项目必须的 Servlet 接口 (处理请求、响应),Tomcat 自带,所以标记 provided。
2. Lombok 工具依赖
pom.xml文件中写法
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
作用:简化 Java 代码,自动生成 getter/setter/ 构造器等,不用手写。
这一步必须做,否则之前的错误配置会一直影响你。
-
关闭所有 IDE、命令行窗口,彻底退出 IDEA
-
执行命令,杀死所有 Java 进程(防止端口被占用): cmd----------taskkill /f /im java.exe
cmd---------- taskkill /f /im javaw.exe
taskkill /f /im java.exe
taskkill /f /im javaw.exe
- 清理 Tomcat 旧部署:
- 打开
D:\tomcat\webapps,删除里面所有文件夹和 war 包(只保留ROOT和manager) - 打开
C:\Users\你的用户名\AppData\Local\JetBrains\IntelliJIdea2025.3\tomcat,删除里面所有文件夹(IDEA 的 Tomcat 缓存)
- 打开
第一步:确认基础环境正常(先保证服务器本身能跑)
1. 验证 Tomcat 安装
总结
-
打开
D:\tomcat\conf\server.xml,确认 HTTP 端口是8089(和你之前的配置一致)
关键配置确认
文件中这一行明确定义了 Web 访问端口:
xml
<Connector port="8089" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" />补充说明(避免混淆)
-
8189 :是 Tomcat 关闭端口 (仅用于本地关闭服务,不用于网页访问)
xml
<Server port="8189" shutdown="SHUTDOWN"> -
8443:是 HTTPS 加密端口(默认注释未启用)
-
8009:是 AJP 端口(默认注释未启用)
-
网页访问地址 :
http://localhost:8089
核心业务端口 :8089 (正确)
要判断核心业务端口是否正确,必须双击**startup.bat双击 D:\tomcat\bin\startup.bat****,启动 Tomcat**

变成这样一直不能关闭!!!!关闭http://localhost:8089就无法访问!!!!
- 打开浏览器,访问
http://localhost:8089-
✅ 看到 Tomcat 默认页面,说明服务器正常

-
❌ 看不到,说明 Tomcat 安装 / 端口有问题,先解决这个再往下走
-
- 双击
D:\tomcat\bin\shutdown.bat,关闭 Tomcat,测试完了,就可以关闭,因为后面你呀开启idea在里面运行了。外面是不能再开着shutdown.bat的,别忘了。
2. 验证 JDK 配置
-
打开 IDEA → 文件 → 项目结构 → 项目
- 项目 SDK:选择你安装的 JDK 17
- 语言级别:设置为
17 - 带密封类的新特性

-
点击「应用」→「确定」

第二步:验证项目结构(最核心的一步,错了全白搭)
按下面的标准结构检查你的项目,每一个文件夹、文件的位置都必须完全一致:
plaintext
你的项目根目录/
├── pom.xml ✅ 必须有
└── src/
└── main/
├── java/ ✅ 放所有Java代码(包括Servlet)
│ └── dey7/
│ └── ScoreServlet.java
├── resources/ ✅ 空的也没关系
└── webapp/ ✅ 必须直接在main下,名字必须是webapp
├── index.jsp ✅ 必须直接放在这里,不能嵌套
├── register.html ✅ 同理
└── WEB-INF/ ✅ 必须在webapp下,名字全大写
└── web.xml ✅ 必须在这里,名字全小写
❌ 必须删除的东西:
webapp下的web文件夹(如果还有)WEB-INF里的classes、lib文件夹(这些是构建生成的,不能手动放)- 任何在
WEB-INF里的 JSP/HTML 文件(浏览器直接访问不到)
第三步:配置 IDEA Web 项目识别(告诉 IDEA 这是个 Web 项目)
打开 IDEA → 文件 → 项目结构 → Facets
### **点击「+」→ 选择「Web」→ 选中你的项目**

### **确认「Web 资源目录」指向****src/main/webapp**

### **确认「部署描述符」指向****src/main/webapp/WEB-INF/web.xml**

- 点击「应用」
- 切换到 工件 → 点击「+」→ 选择「Web 应用程序:展开式」→ 选择「来自模块」→ 你的项目
-
勾选「包含在项目构建中」

-
点击右边的「可用元素」里的项目,右键 → 「置于 Output Root」

或者


-
确认左边输出根目录下,能直接看到
index.jsp

-
点击「应用」→「确定」
-
第四步:配置 Tomcat 运行(让 IDEA 能把项目部署到 Tomcat)
- 打开 IDEA → 左上角→ 运行→ 「编辑配置」→ 点击「+」→ 选择「Tomcat 服务器 → 本地」

- 服务器标签页配置 :
- 应用程序服务器:选择你的
D:\tomcat

- HTTP 端口:
8089(和 tomcat文件中bin文件中server.xml 一致) - JRE:选择你安装的 JDK 17
- 取消勾选「启动前更新资源」
- 应用程序服务器:选择你的
- 部署标签页配置(最关键) :
- 点击「+」→ 选择「工件」→ 选中
wslant:war exploded 
- 应用程序上下文:改为
/wslant(必须和你访问的地址一致)(手动输入下)

- 点击「+」→ 选择「工件」→ 选中
- 执行前标签页配置 :
- 点击「+」→ 选择「构建工件」→ 选中
wslant:war exploded

- 点击「+」→ 选择「构建工件」→ 选中
- 点击「应用」→「确定」
第五步:验证核心文件配置(Servlet 和 web.xml)
1. 验证 Servlet 类
打开 ScoreServlet.java,确认:
-
类上有
@WebServlet("/ScoreServlet")注解 -
类继承
HttpServlet -
有
doGet/doPost方法package dey7; 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 java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 成绩处理Servlet * 作用:接收前端提交的班级人数和成绩数据,进行处理后转发到页面展示 */ // 配置Servlet访问路径,必须加这个注解,否则Tomcat找不到该Servlet @WebServlet("/ScoreServlet") public class ScoreServlet extends HttpServlet { /** * 处理POST类型的请求 * 前端表单提交方式为post时,会执行这个方法 */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 设置请求编码为UTF-8,解决前端传递中文乱码问题 request.setCharacterEncoding("UTF-8"); // 2. 获取前端传递的班级人数字段 n int n = Integer.parseInt(request.getParameter("n")); // 3. 创建集合,用于存储所有学生的成绩 List<Double> scores = new ArrayList<>(); // 4. 循环获取每一位学生的成绩,并添加到集合中 for (int i = 0; i < n; i++) { // 根据参数名 score0、score1、score2... 获取对应成绩字符串 String scoreStr = request.getParameter("score" + i); // 将字符串类型的成绩转换为double类型 double score = Double.parseDouble(scoreStr); // 把成绩存入集合 scores.add(score); } // 5. 将成绩集合存入request域对象,供index.jsp页面获取和展示 request.setAttribute("scores", scores); // 6. 请求转发到index.jsp页面,展示最终结果 request.getRequestDispatcher("/index.jsp").forward(request, response); } /** * 处理GET类型的请求 * 为了统一处理逻辑,直接调用doPost方法 */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // GET请求直接复用POST的处理逻辑 doPost(request, response); } }
✅ 这份代码现在完全满足你所有要求
- 类上有
@WebServlet("/ScoreServlet")注解 ✅ - 类继承
HttpServlet✅ - 有
doGet和doPost方法 ✅ - 每一步都加了详细中文注释 ✅
- 代码可直接运行,不会报错 ✅
2. 验证 web.xml(如果不用注解)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 欢迎页配置:访问项目自动打开 index.jsp -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第六步:构建项目(确保文件编译打包正确)
-
打开 IDEA 右侧的「Maven」面板
-
执行
clean→compile→package(按顺序执行)
-
打开项目的
target/wslant-1.0-SNAPSHOT文件夹,验证:- ✅ 根目录下有
index.jsp、register.html - ✅ 有
WEB-INF文件夹,里面有web.xml - ✅
WEB-INF/classes里有dey7/ScoreServlet.class文件
❌ 没有多余的文件夹(比如
web、WEB-INF/classes手动放的文件)
**都没问题,那么可以开始运行你的Tomcat本地服务器了。**启动你的项目



- ✅ 根目录下有
如果你报错,一下是最容易出现问题的,步骤。
启动 Tomcat 并验证(按顺序验证,哪步错了停在哪)
-
点击 IDEA 右上角的 Tomcat 启动按钮,启动服务器
-
看控制台日志,只要看到
服务器启动完成且无报错,就是启动成功 -
按以下顺序验证,每一步都必须成功,再往下走 :
表格
验证步骤 访问地址 预期结果 失败排查方向 1. 验证 Tomcat 本身 http://localhost:8089看到 Tomcat 默认页面 端口占用、Tomcat 配置 2. 验证项目部署 http://localhost:8089/wslant/index.jsp看到你的 JSP 页面 项目结构、工件配置、上下文路径 3. 验证 Servlet http://localhost:8089/wslant/ScoreServlet看到 Servlet OK!Servlet 注解、web.xml 配置、编译问题
🔴 关键失败排查清单(按优先级)
ERR_CONNECTION_REFUSED:Tomcat 没启动,或端口被占用 → 执行taskkill /f /im java.exe,换端口重试404 Not Found:- 先检查上下文路径是否为
/wslant - 再检查
target文件夹里有没有生成wslant-1.0-SNAPSHOT目录 - 最后检查
index.jsp是否在webapp根目录
- 先检查上下文路径是否为
ClassNotFound:Servlet 没编译成功 → 执行clean compile,检查target/classes里有没有.class文件部署源无效:工件配置错了 → 确认部署的是wslant:war exploded,不是war