说实话,每次看到有新人说“现在都2023年了,谁还学JavaWeb,直接上Spring Boot不香吗”,我就特别想拉着他聊聊。JavaWeb确实不是一个新词,但整个Java后端生态的根,全在这一层里。Spring Boot再牛,底层跑的还是Servlet规范;MyBatis再方便,底层还是JDBC那一套逻辑。你如果说自己要做Java开发,却连Servlet生命周期都说不清楚,面试官心里基本已经给你打了折扣。
这篇东西不是教科书,是我从“HelloWorld都调不通”到能独立把一个带MySQL的项目发布到服务器上的整个经验复盘。适合正在学JavaWeb的大学生、准备毕业设计的人,以及刚入职但发现自己JavaWeb基础薄弱的初级程序员。我把从IDEA建项目、写CRUD、连数据库,到用Apache+Tomcat在Windows Server上发布的全过程拆开讲。里面的坑,都是我拿熬夜头发换来的。
1. JavaWeb到底在学什么:为什么一个老技术仍然值得死磕
1.1 拆解JavaWeb的核心技术栈
JavaWeb的定义,网上说了很多,但落到实际开发上,其实就是一套“用Java处理浏览器请求并做出响应”的方案。它包含的技术点,大致可以分成三类。
第一类是基础协议与容器。你得理解HTTP请求长什么样,请求头和请求体里都有什么。然后要知道Tomcat这样的Servlet容器是怎么把浏览器请求映射到你的Java类上的。Servlet是JavaWeb的地基,Filter、Listener都是基于它扩展出来的。你后面写Spring MVC的时候,会发现DispatcherServlet本质上就是一个Servlet,只是它做了很多封装。
第二类是数据的存取。JavaWeb的标准数据源是JDBC,直接通过JDBC操作数据库非常啰嗦,所以后来的MyBatis、Hibernate都是对它的封装。但你必须明白Connection、Statement、ResultSet这些是怎么用的,才能理解为什么MyBatis要帮你关闭连接,连接池又解决了什么问题。
第三类是前端与后端的交互。JavaWeb时代最经典的方案是JSP+Servlet,后端在JSP里写Java代码,动态渲染HTML。现在虽然前后端分离开发更多了,但很多老系统的维护还是离不开JSP。而且只要你理解了JSP的九大内置对象,后面学Thymeleaf、FreeMarker这些模板引擎,无非就是换个标签语法的事。
1.2 从“能跑hello world”到“能写完整项目”的思维转变
我看过太多人卡在第一步:能照着教程跑通一个Servlet,但让他自己写一个包含数据库的登录注册功能,顿时就懵了。问题出在哪?就是没建立起Web开发的分层思维。
初学者学JavaWeb最容易陷入的误区,是把所有代码都堆在Servlet里:接收参数、做校验、查数据库、拼HTML,全在一个doGet里完成。这种写法在只有一个页面的时候没问题,但一旦功能多了,代码就会变成一团乱麻,改一处要牵连好几个地方。
我自己的体会是,当你能把一个完整的小项目拆成“浏览器 → Servlet → Service → DAO → 数据库”这样几条链时,你才算真正入了门。这条链上,每个环节的职责是单一的:Servlet负责接收请求和参数,Service负责业务逻辑,DAO负责和数据库打交道。这样拆完之后,你会发现,所谓JavaWeb项目,其实就是一个约定好规则的流水线,每个工位的活都是固定的,出了问题也容易定位。
到了这一步,再去学Spring Boot,你会恍然大悟:原来Spring Boot只是把这条流水线上的工位用自动化方式管理起来了,本质还是那套东西。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 2023版IDEA创建JavaWeb项目的完整实操
2.1 项目结构的选择:Maven还是传统方式
现在创建JavaWeb项目,强烈建议直接选Maven,别再用传统方式。为什么?因为你的项目最终逃不过要引入各种jar包。传统Web项目是手动把jar包扔进WEB-INF/lib目录,靠IDE把它们加到构建路径上。刚开始还行,jar包一多,版本冲突、漏包问题能让人疯掉。Maven通过pom.xml管理依赖,声明式引入,自动下载,还能解决传递依赖,省心太多。另外,以后你做Spring Boot项目,本质上也是Maven或Gradle工程,提前熟悉Maven结构,后面衔接非常顺。
不过我见过不少教程还在教传统方式建项目,特别是一些教材,导致很多人以为Tomcat都要靠IDEA插件来配。其实用Maven后,整个项目的生命周期变得更清晰:源文件放在src/main/java,资源放在src/main/resources,webapp放在src/main/webapp。这个结构在IDEA里几乎是标准的,也是之后用命令行打包war的基础。
2.2 手把手:2023版IDEA创建JavaWeb工程
我用的是IntelliJ IDEA 2023.2版本,官方正版社区版就支持Maven和Tomcat,不需要破解。记得先装好JDK 8或者11,Tomcat 8.5或者9。
打开IDEA后,新建项目,选择Maven。注意,不要勾选“从原型创建”,直接生成一个空的Maven项目就行。如果你选择了maven-archetype-webapp,会得到一个非常旧的目录结构,而且web.xml版本很低,容易踩坑。空项目生成后,右键main目录,新建一个Directory,命名为webapp。然后在webapp下新建WEB-INF目录和web.xml文件。如果IDEA没有自动识别webapp目录,你需要通过“File → Project Structure → Facets”把webapp设为Web资源目录。这个步骤容易忽略,不设置的话,启动时找不到Web根目录。
接着修改pom.xml,添加javax.servlet-api依赖,作用域设为provided。这一步很关键。因为Tomcat内置了Servlet API,如果作用域不设为provided,打包出来的war会把Servlet相关类也打进去,部署到Tomcat时反而可能冲突。依赖坐标如下:
xml复制<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
然后写一个最简单的Servlet,比如LoginServlet,继承javax.servlet.http.HttpServlet,重写doGet和doPost,加上@WebServlet("/login")注解。注意@WebServlet这个注解需要Servlet 3.0以上,Tomcat 8.5和9都支持。
java复制@Web
