JavaWeb

简介: 1

一文吃透 JavaWeb 全栈开发:从核心原理到阿里云部署(附实战项目)
JavaWeb 是基于 Java 技术构建 Web 应用的核心体系,也是后端开发的入门必修课。本文将从 JavaWeb 核心组件、开发流程、实战项目到阿里云部署进行全方位讲解,帮助开发者从零基础掌握 JavaWeb 开发全流程。
一、JavaWeb 核心知识体系

  1. JavaWeb 基础架构
    JavaWeb 应用基于「请求 - 响应」模型,核心架构分层如下:
    plaintext
    客户端(浏览器/APP)→ HTTP协议 → Web服务器(Tomcat)→ Servlet容器 → 业务层 → 数据层 → 数据库
    核心组件关系:
    Web 服务器:负责接收 HTTP 请求(如 Tomcat、Jetty、JBoss);
    Servlet 容器:管理 Servlet、Filter、Listener 等核心组件;
    后端代码:处理业务逻辑、数据交互;
    数据库:存储应用数据(如 MySQL、Oracle)。
  2. 核心组件详解
    (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}元




  1. MVC 设计模式
    JavaWeb 主流开发模式,解耦代码逻辑:
    Model(模型):处理业务逻辑、数据交互(如 Service、DAO);
    View(视图):展示数据(如 JSP、HTML);
    Controller(控制器):接收请求、分发逻辑(如 Servlet);
    MVC 实战流程:
    客户端发送请求到 Controller(Servlet);
    Controller 调用 Model(Service)处理业务;
    Model 调用 DAO 层操作数据库;
    处理结果返回 Controller,再转发到 View 展示。
  2. 数据库交互(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 项目开发流程(实战)
以「用户管理系统」为例,完整开发流程:

  1. 环境准备
    JDK 8+、Tomcat 9+、MySQL 8+、IDEA/Eclipse;
    配置 Tomcat:IDEA 中添加 Tomcat 服务器,关联项目。
  2. 项目结构(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依赖配置
  3. 核心依赖(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

  4. 功能实现(核心步骤)
    编写实体类(User.java);
    编写 DAO 层(UserDao.java),基于 MyBatis 实现 CRUD;
    编写 Service 层(UserService.java),封装业务逻辑;
    编写 Servlet(UserServlet.java),处理请求 / 响应;
    编写 JSP 页面,展示用户列表 / 新增 / 编辑页面;
    配置 Filter,统一处理编码和登录校验。
    三、JavaWeb 项目部署到阿里云
  5. 阿里云环境准备
    (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. 项目打包与上传
    (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/
  2. 部署运行
    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. 优化配置(生产环境)
    (1)Tomcat 端口修改(改为 80)
    编辑/usr/local/tomcat9/conf/server.xml:
    xml
    <Connector port="80" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
    
    (2)设置 Tomcat 开机自启
    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 高频面试与优化要点

  1. 核心面试题
    Servlet 的生命周期?init () 方法只会执行一次的原因?
    Filter 的执行顺序如何控制?
    JSP 的 9 大内置对象(request、response、session、application 等)的作用?
    转发(forward)和重定向(redirect)的区别?
    转发:服务器内部跳转,地址栏不变,共享 request 数据;
    重定向:客户端跳转,地址栏变化,不共享 request 数据。
    Session 和 Cookie 的区别?
    Session:服务器端存储,安全,占用服务器资源;
    Cookie:客户端存储,不安全,可设置过期时间。
  2. 性能优化建议
    数据库:使用连接池(如 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 应用。
相关文章
|
5月前
|
前端开发 Java 关系型数据库
JavaWeb 全栈开发
本文系统讲解JavaWeb全栈开发,涵盖Servlet、Filter、JSP、MVC模式、MyBatis等核心技术,结合用户管理实战项目,并详解阿里云ECS部署流程,助你从零掌握JavaWeb开发全流程,夯实后端基础,迈向企业级开发。
|
9月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
556 1
|
8月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1822 0
|
5月前
|
JSON 安全 JavaScript
HTTPS 原理
HTTPS是HTTP与SSL/TLS的结合,通过数字证书验证身份,利用非对称加密安全交换会话密钥,再以对称加密高效传输数据。它确保了通信的机密性、完整性和服务器真实性,在互联网上构建安全加密通道。
|
8月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
4597 58
|
10月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
589 0
|
前端开发 JavaScript API
HarmonyOS:ArkTS 显式动画 animateTo 自学指南
本文深入解析了 ArkTS 中的 `animateTo` 全局显式动画接口,帮助开发者掌握其使用方法。文章从接口概述、参数详解到使用注意事项,结合实际示例代码,全面展示了如何通过配置 `AnimateParam` 对象实现流畅的动画效果。内容涵盖属性动画、布局变化及组件转场等场景,并强调不同版本的支持特性。适合初学者系统学习,也供进阶开发者参考优化动画体验。希望本文能助你快速上手 `animateTo`!
687 7
|
应用服务中间件
idea 调试报错 Illegal access: this web application instance has been stopped already.
idea 调试报错 Illegal access: this web application instance has been stopped already.
715 0
|
机器学习/深度学习 资源调度 PyTorch
【从零开始学习深度学习】15. Pytorch实战Kaggle比赛:房价预测案例【含数据集与源码】
【从零开始学习深度学习】15. Pytorch实战Kaggle比赛:房价预测案例【含数据集与源码】
|
存储 缓存 Linux
在Linux中,内存怎么看?磁盘状态怎么看?
在Linux中,内存怎么看?磁盘状态怎么看?