一文吃透 JavaWeb 全栈开发:从核心原理到阿里云部署(附实战项目)
JavaWeb 是基于 Java 技术构建 Web 应用的核心体系,也是后端开发的入门必修课。本文将从 JavaWeb 核心组件、开发流程、实战项目到阿里云部署进行全方位讲解,帮助开发者从零基础掌握 JavaWeb 开发全流程。
一、JavaWeb 核心知识体系
- JavaWeb 基础架构
JavaWeb 应用基于「请求 - 响应」模型,核心架构分层如下:
plaintext
客户端(浏览器/APP)→ HTTP协议 → Web服务器(Tomcat)→ Servlet容器 → 业务层 → 数据层 → 数据库
核心组件关系:
Web 服务器:负责接收 HTTP 请求(如 Tomcat、Jetty、JBoss);
Servlet 容器:管理 Servlet、Filter、Listener 等核心组件;
后端代码:处理业务逻辑、数据交互;
数据库:存储应用数据(如 MySQL、Oracle)。 - 核心组件详解
(1)Servlet(服务器端小程序)
Servlet 是 JavaWeb 的核心,用于处理客户端请求并返回响应,是连接 Web 服务器和 Java 代码的桥梁。
核心生命周期:init()(初始化)→ service()(处理请求)→ destroy()(销毁);
核心方法:doGet()(处理 GET 请求)、doPost()(处理 POST 请求);
实战示例:自定义 Servlet
java
运行
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.io.PrintWriter;
// 注解方式配置Servlet路径
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("
out.println("");
out.println("");
out.println("
Hello JavaWeb!
");out.println("");
out.println("");
}
}
(2)Filter(过滤器)
用于拦截请求 / 响应,实现统一处理(如编码过滤、登录校验、权限控制)。实战示例:编码过滤器
java
运行
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 拦截所有请求
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 设置请求编码
request.setCharacterEncoding("UTF-8");
// 设置响应编码
response.setContentType("text/html;charset=UTF-8");
// 放行请求
chain.doFilter(request, response);
}
}
(3)Listener(监听器)
监听 Web 应用的生命周期、会话状态等事件(如 ServletContextListener、HttpSessionListener)。实战示例:应用启动监听器
java
运行
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class AppStartListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 应用启动时执行(如初始化配置、加载缓存)
System.out.println("JavaWeb应用启动成功!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 应用销毁时执行(如释放资源)
System.out.println("JavaWeb应用销毁!");
}
}
(4)JSP(Java Server Pages)
JSP 是嵌入 Java 代码的 HTML 页面,本质是 Servlet 的简化版,核心语法:
脚本片段:<% Java代码 %>;
表达式:<%= 变量/表达式 %>;
指令:<%@ page contentType="text/html;charset=UTF-8" %>;
实战示例:JSP 展示数据
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
用户信息
<%
// 模拟从后台获取数据
String username = "JavaWeb开发者";
int age = 25;
%>
姓名:<%= username %>
年龄:<%= age %>
(5)EL 表达式与 JSTL 标签库
EL 表达式:简化 JSP 中数据获取,语法 ${变量名};
JSTL 标签库:替代 JSP 中的 Java 代码,实现逻辑控制(如循环、分支);
实战示例:JSTL 循环展示列表
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core" %>
商品列表
- ${product.name} - 价格:${product.price}元
- MVC 设计模式
JavaWeb 主流开发模式,解耦代码逻辑:
Model(模型):处理业务逻辑、数据交互(如 Service、DAO);
View(视图):展示数据(如 JSP、HTML);
Controller(控制器):接收请求、分发逻辑(如 Servlet);
MVC 实战流程:
客户端发送请求到 Controller(Servlet);
Controller 调用 Model(Service)处理业务;
Model 调用 DAO 层操作数据库;
处理结果返回 Controller,再转发到 View 展示。 - 数据库交互(JDBC/MyBatis)
(1)JDBC 基础(原生数据库操作)
java
运行
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JdbcDemo {
public static void main(String[] args) {
// 数据库连接信息
String url = "jdbc:mysql://localhost:3306/javaweb_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String username = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
// 预编译SQL
String sql = "SELECT * FROM user WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
// 执行查询
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("用户名:" + rs.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
(2)MyBatis(简化 JDBC 操作)
核心:通过 XML / 注解配置 SQL,替代原生 JDBC 的硬编码;
配置文件(mybatis-config.xml):
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
二、JavaWeb 项目开发流程(实战)
以「用户管理系统」为例,完整开发流程:
- 环境准备
JDK 8+、Tomcat 9+、MySQL 8+、IDEA/Eclipse;
配置 Tomcat:IDEA 中添加 Tomcat 服务器,关联项目。 - 项目结构(Maven)
plaintext
javaweb-demo
├── src/main/java
│ ├── com/example/controller // 控制器(Servlet)
│ ├── com/example/service // 业务层
│ ├── com/example/dao // 数据访问层
│ ├── com/example/pojo // 实体类
│ ├── com/example/filter // 过滤器
│ └── com/example/listener // 监听器
├── src/main/resources // 配置文件(MyBatis等)
├── src/main/webapp // 前端页面(JSP/HTML/CSS/JS)
│ ├── WEB-INF
│ │ ├── web.xml // Web应用配置
│ │ └── jsp // JSP页面
│ ├── css // 样式文件
│ └── js // 脚本文件
└── pom.xml // Maven依赖配置 - 核心依赖(pom.xml)
xml
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet.jsp
jsp-api
2.2
provided
javax.servlet
jstl
1.2
mysql
mysql-connector-java
8.0.33
org.mybatis
mybatis
3.5.13
- 功能实现(核心步骤)
编写实体类(User.java);
编写 DAO 层(UserDao.java),基于 MyBatis 实现 CRUD;
编写 Service 层(UserService.java),封装业务逻辑;
编写 Servlet(UserServlet.java),处理请求 / 响应;
编写 JSP 页面,展示用户列表 / 新增 / 编辑页面;
配置 Filter,统一处理编码和登录校验。
三、JavaWeb 项目部署到阿里云 - 阿里云环境准备
(1)购买 ECS 服务器
规格:入门推荐 2 核 4G,操作系统选择 CentOS 7/8;
开放端口:8080(Tomcat)、3306(MySQL)、22(SSH)。
(2)安装基础环境
bash
运行1. 安装JDK
yum install -y java-1.8.0-openjdk-devel
java -version # 验证安装
2. 安装Tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78.tar.gz
tar -zxvf apache-tomcat-9.0.78.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.78 /usr/local/tomcat9
3. 启动Tomcat
/usr/local/tomcat9/bin/startup.sh
验证:访问 http://服务器公网IP:8080
4. 安装MySQL
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation # 初始化密码
- 项目打包与上传
(1)本地打包(Maven)
bash
运行打包为WAR包(Tomcat识别的格式)
mvn clean package -DskipTests生成的WAR包在target目录下(如javaweb-demo.war)
(2)上传 WAR 包到阿里云
bash
运行使用scp上传
scp target/javaweb-demo.war root@服务器公网IP:/usr/local/tomcat9/webapps/ - 部署运行
bash
运行1. 重启Tomcat(自动解压WAR包)
/usr/local/tomcat9/bin/shutdown.sh
/usr/local/tomcat9/bin/startup.sh
2. 查看日志(排查问题)
tail -f /usr/local/tomcat9/logs/catalina.out
3. 访问项目
地址:http://服务器公网IP:8080/javaweb-demo
- 优化配置(生产环境)
(1)Tomcat 端口修改(改为 80)
编辑/usr/local/tomcat9/conf/server.xml:
xml
<Connector port="80" protocol="HTTP/1.1"
(2)设置 Tomcat 开机自启connectionTimeout="20000" redirectPort="8443" />
bash
运行创建服务文件
vi /usr/lib/systemd/system/tomcat9.service写入内容
[Unit]
Description=Apache Tomcat 9
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
生效配置
systemctl daemon-reload
systemctl enable tomcat9
systemctl start tomcat9
四、JavaWeb 高频面试与优化要点
- 核心面试题
Servlet 的生命周期?init () 方法只会执行一次的原因?
Filter 的执行顺序如何控制?
JSP 的 9 大内置对象(request、response、session、application 等)的作用?
转发(forward)和重定向(redirect)的区别?
转发:服务器内部跳转,地址栏不变,共享 request 数据;
重定向:客户端跳转,地址栏变化,不共享 request 数据。
Session 和 Cookie 的区别?
Session:服务器端存储,安全,占用服务器资源;
Cookie:客户端存储,不安全,可设置过期时间。 - 性能优化建议
数据库:使用连接池(如 Druid),避免频繁创建 / 关闭连接;
页面:静态资源(CSS/JS/ 图片)CDN 加速,JSP 页面缓存;
Tomcat:调整线程池参数(最大线程数、连接超时时间);
代码:减少 Servlet 中的业务逻辑,解耦到 Service 层;避免 JSP 中嵌入大量 Java 代码。
五、总结
JavaWeb 是后端开发的基础,核心掌握 Servlet、Filter、JSP、MVC 模式四大核心,结合数据库交互(JDBC/MyBatis)可完成大部分 Web 应用开发。本文从核心原理到实战项目,再到阿里云部署,覆盖了 JavaWeb 开发全流程。建议初学者从简单项目(如用户管理系统)入手,逐步掌握分层开发思想,同时关注主流框架(如 SpringMVC)的学习,为进阶企业级开发打下基础。
扩展学习资源
官方文档:Servlet 规范、Tomcat 文档;
实战书籍:《Head First Servlet & JSP》《Java Web 开发实战经典》;
阿里云文档:ECS 部署 JavaWeb 应用。