前言:什么是Java Web开发?
Java Web开发就是使用Java语言来构建运行在Web服务器(如Tomcat)上,并通过浏览器访问的应用程序,它通常涉及前端(用户看到的界面)和后端(处理业务逻辑和数据)两大部分。

本篇将聚焦于后端开发,这是Java Web的核心。
第一部分:环境搭建与基础入门
在写任何代码之前,必须先准备好我们的“兵器库”。
核心三件套
- JDK (Java Development Kit): Java语言的开发工具包,这是运行Java程序的基础。
- 实战: 安装JDK (推荐版本如 JDK 8 / 11 / 17),并配置好环境变量
JAVA_HOME和PATH,学会使用java -version和javac -version命令验证安装。
- 实战: 安装JDK (推荐版本如 JDK 8 / 11 / 17),并配置好环境变量
- IDE (Integrated Development Environment): 集成开发环境,写代码的神器。
- 实战: 安装 IntelliJ IDEA (社区版免费即可),熟悉其基本操作:新建项目、创建类、运行程序、调试代码。
- Web服务器: 用于部署和运行我们编写的Java Web应用。
- 实战: 安装 Apache Tomcat,学会如何将项目打包成
.war文件并部署到Tomcat中,然后通过浏览器访问。
- 实战: 安装 Apache Tomcat,学会如何将项目打包成
你的第一个Web应用:Servlet
Servlet是Java Web的基石,所有框架(如Spring)的底层原理都与之相关。
- 概念: Servlet是运行在服务器端的Java小程序,用于接收和响应来自客户端的HTTP请求。
- 实战:
- 在IDEA中创建一个
Java Enterprise项目,并勾选Web Application模板,这会自动帮你配置好web.xml(部署描述符) 和项目结构。 - 创建一个自定义类,继承
HttpServlet。 - 重写
doGet或doPost方法,在方法中获取request(请求) 和response(响应) 对象。 - 使用
response.getWriter().println("Hello, Servlet World!");向浏览器输出一段文本。 - 在
web.xml中配置该Servlet的访问路径 (<servlet-mapping>)。 - 启动Tomcat,在浏览器中访问配置的路径,看到 "Hello, Servlet World!"。
- 在IDEA中创建一个
目标: 理解Web服务器如何根据URL找到并执行我们编写的Java代码,以及如何向浏览器返回数据。

第二部分:核心技术与HTTP协议
深入理解Web应用是如何与浏览器“对话”的。
HTTP协议详解
Web应用的基础是HTTP协议,必须掌握。
- 核心概念:
- 请求/响应模型: 客户端发请求,服务器给响应。
- 请求方法:
GET(获取数据),POST(提交数据),PUT(更新),DELETE(删除)。 - 请求头/响应头: 如
Content-Type(内容类型),Cookie(用户信息)。 - 请求体/响应体: 实际传输的数据,如HTML、JSON、表单数据。
- 实战: 使用浏览器开发者工具 (F12) 的 "Network" 面板,观察访问一个网站时浏览器发送的HTTP请求和服务器返回的HTTP响应,重点关注请求头、状态码(如200, 404, 500)和响应体。
Servlet API进阶
HttpServletRequest: 代表客户端的请求。- 实战: 获取请求参数 (
request.getParameter("username"))、获取请求头 (request.getHeader("User-Agent"))、获取请求方法 (request.getMethod())、请求转发 (request.getRequestDispatcher("...").forward(...))。
- 实战: 获取请求参数 (
HttpServletResponse: 代表服务器的响应。- 实战: 设置响应状态码 (
response.setStatus(404))、设置响应头 (response.setContentType("application/json; charset=UTF-8"))、向响应体中写入数据 (response.getWriter().write(...))、重定向 (response.sendRedirect("..."))。
- 实战: 设置响应状态码 (
Cookie和Session:- 概念: Cookie是保存在客户端的数据,Session是保存在服务器端的数据,两者结合用来记录用户状态(如登录状态)。
- 实战:
- Cookie: 创建一个Cookie对象,通过
response.addCookie()发送给浏览器,下次请求时,通过request.getCookies()读取。 - Session: 通过
request.getSession()获取Session对象,可以像Map一样存取数据 (session.setAttribute("user", userObject)),服务器会自动管理Session的生命周期。
- Cookie: 创建一个Cookie对象,通过
目标: 能够处理用户表单提交、理解浏览器和服务器之间的状态保持机制。
第三部分:Web框架的基石:JSP & EL
直接用Servlet输出HTML非常繁琐,我们需要更高效的视图技术。

JSP (JavaServer Pages)
- 概念: 一种在HTML中嵌入Java代码的技术,用于简化页面开发。
- 语法:
- 脚本片段:
<% ... %>(写Java代码) - 表达式:
<%= ... %>(输出一个变量的值) - 指令:
<%@ page ... %>,<%@ include ... %>,<%@ taglib ... %>
- 脚本片段:
- 实战: 创建一个
login.jsp页面,包含一个用户名和密码的表单,表单的action指向一个Servlet,在Servlet中获取参数,然后使用request.getRequestDispatcher("welcome.jsp").forward(request, response)转发到welcome.jsp,在welcome.jsp中使用<%= request.getParameter("username") %>显示欢迎信息。
EL (Expression Language)
- 概念: 一种更简洁、更推荐的表达式语言,用于替代JSP中的复杂脚本片段,简化数据访问。
- 语法:
- 实战: 将上面的
<%= request.getParameter("username") %>改为${param.username},EL可以更方便地访问作用域对象 (pageScope,requestScope,sessionScope,applicationScope) 的属性,如${sessionScope.user.name}。
JSTL (JSP Standard Tag Library)
- 概念: 一套标准的JSP标签库,用于消除JSP页面中的Java代码,使页面更纯粹。
- 核心标签库:
c:if: 条件判断。c:forEach: 循环遍历集合。
- 实战: 在JSP页面中使用
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>引入核心标签库,然后用<c:if test="${empty sessionScope.user}">判断用户是否登录,或者用<c:forEach items="${list}" var="item">遍历一个从Servlet传过来的List。
目标: 掌握前后端数据交互的基本模式,并学会使用EL和JSTL让JSP页面更清晰、更易于维护。
第四部分:数据库交互:JDBC
Web应用的核心是数据,几乎所有应用都需要和数据库打交道。
JDBC (Java Database Connectivity)
- 概念: Java官方提供的用于连接和操作数据库的API。
- 核心步骤:
- 加载驱动:
Class.forName("com.mysql.cj.jdbc.Driver"); - 获取连接:
DriverManager.getConnection(url, username, password); - 创建Statement:
connection.createStatement(); - 执行SQL:
statement.executeQuery("SELECT * FROM users");(查询) 或statement.executeUpdate("INSERT INTO ...");(增删改) - 处理结果集: 遍历
ResultSet对象,取出数据。 - 关闭资源:
resultSet.close(); statement.close(); connection.close();(非常重要!)
- 加载驱动:
- 实战:
- 安装MySQL数据库,并创建一个测试数据库和表(如
user表)。 - 下载MySQL的JDBC驱动,并添加到项目的
WEB-INF/lib目录下。 - 编写一个
DBUtil工具类,封装获取连接和关闭资源的逻辑。 - 在Servlet中,调用
DBUtil获取连接,执行SQL查询,然后将结果存入request作用域,最后转发到JSP页面,用JSTL展示。
- 安装MySQL数据库,并创建一个测试数据库和表(如
目标: 能够在Java代码中完成对数据库的增删改查操作。
第五部分:经典框架整合:Servlet + JSP + JDBC
我们将前面所有的知识点串联起来,构建一个完整的、经典的三层架构Web应用。
三层架构
- 表现层: 负责接收用户请求,显示数据,由 Servlet 和 JSP 组成。
- Servlet作为控制器,处理请求和响应。
- JSP作为视图,负责展示数据。
- 业务逻辑层: 处理核心业务逻辑,由我们自己编写的JavaBean(POJO)和Service类组成。
用户登录、注册、下单等逻辑。
- 数据访问层: 负责与数据库交互,由 DAO (Data Access Object) 类组成。
UserDAO负责用户的增删改查。
实战项目:用户管理系统
这是一个非常适合入门的经典项目。
- 数据库设计:
user表 (id, username, password, email)。 - 数据访问层:
- 创建
User实体类。 - 创建
UserDAO接口,定义addUser,findUserById,findAllUsers等方法。 - 创建
UserDAOImpl实现类,使用JDBC完成这些方法的具体实现。
- 创建
- 业务逻辑层:
- 创建
UserService类,调用UserDAO的方法,并添加一些业务逻辑,如密码加密、校验等。
- 创建
- 表现层:
index.jsp: 显示所有用户列表,并提供一个“添加用户”的链接。AddUserServlet: 接收添加用户的表单数据,调用UserService添加用户,然后重定向到列表页面。ListUserServlet: 调用UserService获取所有用户列表,存入request作用域,并转发到user_list.jsp。user_list.jsp: 使用JSTL的<c:forEach>循环展示用户列表。
目标: 理解并实践经典的MVC(Model-View-Controller)思想和三层架构,这是后续学习Spring框架的基础。
第六部分:工具与最佳实践
一个专业的开发者离不开好的工具和习惯。
- 构建工具: Maven 或 Gradle。
- 实战: 使用Maven管理项目依赖(如JDBC驱动、Servlet/JSP API等),自动打包,管理项目生命周期,告别手动管理
jar包的噩梦。
- 实战: 使用Maven管理项目依赖(如JDBC驱动、Servlet/JSP API等),自动打包,管理项目生命周期,告别手动管理
- 前端技术: HTML, CSS, JavaScript。
- 实战: 不需要成为前端专家,但必须能写出结构清晰的HTML页面,会用CSS做简单的美化,能用JavaScript实现表单验证等基本交互。
- 调试技巧: 学会使用IDEA的断点调试功能,可以单步执行代码,查看变量值,是排查Bug的利器。
总结与进阶
恭喜你!如果你能完成以上所有内容,你已经掌握了Java Web开发的“经典基础”,具备了独立开发中小型Web应用的能力。
下一步,你应该学习什么?
- 框架化: 学习 Spring Framework,Spring将大大简化你的开发,通过IoC(控制反转)和AOP(面向切面编程)等思想,让你从繁琐的配置和对象创建中解放出来。
- 持久层框架: 学习 MyBatis 或 Spring Data JPA,它们是JDBC的封装,能让你用更优雅的方式操作数据库,告别手写SQL的痛苦。
- Web MVC框架: 学习 Spring MVC,它是Spring的一部分,是Servlet的现代化替代品,是目前Java Web开发的事实标准。
- 项目实战: 尝试做一个功能更完整的项目,如博客系统、论坛、电商网站,将所学知识融会贯通。
这份“经典基础”是你未来学习更高级、更现代技术(如Spring Boot, Spring Cloud, Docker, Kubernetes)的坚实基石,祝你学习愉快!
