Java Web开发的核心在于理解Servlet、JSP、MVC模式以及如何高效地与数据库交互,掌握这些基础,你就能构建出结构清晰、功能完整的动态网站,下面我们将从零开始,一步步深入实践这些核心技术。

磨刀不误砍柴工:环境搭建与项目初始化
任何开发都始于环境,你需要准备:
- JDK (Java Development Kit): 选择稳定的LTS版本(如JDK 11, 17),它是运行和编译Java程序的基础,安装后务必配置好
JAVA_HOME环境变量。 - Web服务器/容器: Apache Tomcat 是学习Java Web的首选,下载对应版本(如Tomcat 9.x, 10.x),解压即可,熟悉其
bin目录下的启动(startup.bat/startup.sh)、停止(shutdown.bat/shutdown.sh)脚本,以及webapps目录(存放Web应用)。 - IDE (集成开发环境): IntelliJ IDEA Ultimate (功能强大) 或 Eclipse IDE for Enterprise Java Developers 是最佳选择,它们集成了Tomcat配置、代码提示、调试等功能,极大提升效率。
- 项目构建工具 (可选但推荐): Maven 或 Gradle,它们管理项目依赖(Jar包)、构建、打包流程,在IDE中创建Maven项目,选择
maven-archetype-webapp骨架。
- 实战第一步: 在IDE中配置好Tomcat服务器,创建一个新的Maven Web项目(例如命名为
MyFirstWebApp),确保项目结构包含:src/main/java: 存放Java源代码(Servlet等)src/main/resources: 存放配置文件(如jdbc.properties,log4j2.xml)src/main/webapp: Web应用根目录,存放WEB-INF、index.jsp等WEB-INF目录:核心目录,内含web.xml(部署描述符,Servlet 3.0+后注解配置更常用)、lib(依赖Jar包,Maven管理则通常不需要手动放)、classes(编译后的class文件,IDE自动处理)。pom.xml: Maven项目核心配置文件,声明依赖。
基石:Servlet – 处理请求与响应的核心
Servlet是Java Web应用的“控制器”,直接与HTTP请求/响应打交道。
-
核心概念:
- 生命周期:
init()->service()(根据请求方法调用doGet(),doPost()等) ->destroy(),容器(Tomcat)管理其生命周期。 HttpServletRequest: 封装客户端请求信息(参数、头、Session等)。HttpServletResponse: 封装服务器返回给客户端的响应(设置状态码、头、输出内容)。ServletConfig: 单个Servlet的配置信息。ServletContext: 整个Web应用的共享信息(应用级作用域)。
- 生命周期:
-
创建第一个Servlet:
- 创建一个Java类,继承
HttpServlet。 - 重写
doGet(HttpServletRequest req, HttpServletResponse resp)方法。 - 使用
resp.getWriter().println("Hello, Java Web!")输出响应。 - 配置方式 (二选一):
- 注解 (推荐,Servlet 3.0+): 在Servlet类上添加
@WebServlet("/hello"),指定访问URL模式。 web.xml(传统):<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.yourpackage.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
- 注解 (推荐,Servlet 3.0+): 在Servlet类上添加
- 创建一个Java类,继承
-
实战:处理表单登录
@WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); // 获取表单参数 String password = req.getParameter("password"); // 简单模拟验证 (实际应查数据库) if ("admin".equals(username) && "123456".equals(password)) { // 登录成功:设置Session、跳转页面 HttpSession session = req.getSession(); session.setAttribute("user", username); resp.sendRedirect("welcome.jsp"); // 重定向到欢迎页 } else { // 登录失败:设置错误信息、转发回登录页 req.setAttribute("errorMsg", "用户名或密码错误!"); req.getRequestDispatcher("login.jsp").forward(req, resp); // 请求转发 } } }- 关键点:
getParameter(),getSession(),setAttribute(),sendRedirect()(重定向,URL变,两次请求),getRequestDispatcher().forward()(请求转发,URL不变,一次请求)。
- 关键点:
视图层:JSP – 动态生成HTML
JSP (JavaServer Pages) 本质上是Servlet的变体,方便在HTML中嵌入Java代码片段或标签来生成动态内容,但避免在JSP中书写过多Java逻辑,应专注于视图展示。

-
基本语法:
<% ... %>: 脚本片段 (嵌入Java代码,慎用)<%= ... %>: 表达式 (输出Java表达式结果)<%! ... %>: 声明 (定义成员变量或方法,极少用)<%@ page ... %>: 页面指令 (设置页面属性,如contentType,import)<%@ include ... %>: 包含指令 (静态包含其他文件内容)<jsp:include ... />: 标准动作 (动态包含其他页面输出)
-
EL (Expression Language) 表达式: 简化JSP中访问作用域数据的语法。
${expression},如${user.name},${requestScope.errorMsg},优先使用EL替代<%= %>。 -
JSTL (JSP Standard Tag Library): 强烈推荐使用!提供一组标准标签库(
core,fmt,sql,xml,functions),取代JSP中的脚本片段,使页面更清晰、更易维护。- 核心用法:
- 引入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - 常用标签:
<c:out value="${value}">: 输出,自动转义防XSS。<c:set var="varName" value="${value}" scope="page|request|session|application">: 设置变量。<c:if test="${condition}">...</c:if>: 条件判断。<c:forEach items="${collection}" var="item" varStatus="status">...</c:forEach>: 遍历集合。<c:choose><c:when test="...">...</c:when><c:otherwise>...</c:otherwise></c:choose>: 多分支选择。
- 引入标签库:
- 核心用法:
-
实战:显示登录结果 (welcome.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>欢迎页</title> </head> <body> <h1>欢迎您, <c:out value="${sessionScope.user}"/>!</h1> <p>登录成功!</p> <a href="logout">退出登录</a> <%-- 假设有LogoutServlet处理logout请求 --%> </body> </html>
架构核心:MVC模式 – 职责分离
MVC (Model-View-Controller) 是Java Web开发的标准架构模式,将应用分为三层:
- Model (模型): 代表数据和业务逻辑,负责数据的存取、验证、处理核心业务规则,通常是POJO (Plain Old Java Object) 类、Service层、DAO层。
- View (视图): 负责数据的展示,通常是JSP(使用EL+JSTL)、HTML模板、Thymeleaf等。只负责展示,不处理业务逻辑。
- Controller (控制器): 负责接收用户请求、调用Model处理业务、选择并返回合适的View,通常是Servlet或Spring MVC中的
@Controller。
-
MVC在基础篇中的映射:
- Controller: Servlet (
LoginServlet) - Model: 业务逻辑(如验证逻辑)、数据对象(如
User类)、数据库访问代码(下一步介绍)。 - View: JSP (
login.jsp,welcome.jsp)
- Controller: Servlet (
-
MVC的优势: 代码结构清晰、职责分明、易于维护、可复用性高、便于团队协作。
数据持久化:JDBC与连接池 – 连接数据库

动态网站离不开数据库,Java通过JDBC (Java Database Connectivity) API访问数据库。
-
基础JDBC操作流程:
- 加载数据库驱动 (
Class.forName("com.mysql.cj.jdbc.Driver")– JDBC 4.0+ 通常可自动加载)。 - 建立连接 (
DriverManager.getConnection(url, username, password))。注意:频繁创建销毁连接开销巨大! - 创建
Statement或PreparedStatement对象(强烈推荐使用PreparedStatement防SQL注入)。 - 执行SQL语句 (
executeQuery()/executeUpdate())。 - 处理结果集 (
ResultSet)。 - 务必关闭资源! (
ResultSet,Statement,Connection) 在finally块或使用try-with-resources语句。
- 加载数据库驱动 (
-
连接池 (Connection Pool) – 性能关键!: 预先创建并管理一批数据库连接,应用需要时从池中获取,用完后归还池中复用。极大提升性能,是生产环境必备。
- 常用实现: Apache Commons DBCP2, HikariCP (性能极佳), C3P0, Tomcat JDBC Pool。
- 配置要点 (以DBCP2为例,通常在
context.xml或独立配置文件):<Resource name="jdbc/YourDB" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/yourdb?useSSL=false&serverTimezone=UTC" username="root" password="yourpassword" initialSize="5" <!-- 初始连接数 --> maxTotal="20" <!-- 最大活动连接数 --> maxIdle="10" <!-- 最大空闲连接数 --> minIdle="5" <!-- 最小空闲连接数 --> maxWaitMillis="10000" <!-- 获取连接最大等待时间(毫秒) --> validationQuery="SELECT 1" /> <!-- 验证连接有效的SQL --> - 在Servlet中获取连接池数据源:
// 通过 JNDI 查找 Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/YourDB"); // 从数据源获取连接 try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement("SELECT FROM users WHERE id=?")) { pstmt.setInt(1, userId); try (ResultSet rs = pstmt.executeQuery()) { // 处理结果集 } } // try-with-resources 自动关闭 conn, pstmt, rs
持续精进:从基础迈向框架
掌握了Servlet、JSP、MVC、JDBC/连接池,你已经具备了构建基础Java Web应用的能力,这是坚实的第一步!现代企业级开发中,为了应对更复杂的业务、提升开发效率、增强可维护性和可测试性,框架是必经之路:
- Spring Framework: 核心容器(IoC/DI)、AOP、事务管理等,是整个生态的基石。
- Spring MVC: 更强大、更灵活的MVC框架,替代原生Servlet作为Controller。
- MyBatis / Hibernate: ORM框架,简化JDBC操作,将数据库表映射为Java对象。
- Spring Boot: “约定优于配置”,极简配置,快速搭建生产级应用,整合Spring生态。
动手实践是掌握这些基础的关键! 尝试构建一个简单的用户管理系统(CRUD:增删改查),涵盖本章所有知识点:表单提交(Servlet处理)、数据验证(Model)、数据库操作(JDBC+连接池)、结果展示(JSP+JSTL),严格遵循MVC分层,遇到问题,善用搜索引擎、官方文档和调试工具。
你在学习Java Web基础的过程中,遇到的最大挑战是什么?是Servlet的生命周期理解,JDBC的繁琐操作,还是MVC的职责划分?或者已经成功构建了你的第一个小应用?欢迎在评论区分享你的经验或困惑!
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/7998.html