JavaEE初阶的核心组件

JavaEE 初阶的核心组件围绕「Web 请求处理、数据交互、请求过滤、状态管理」四大核心场景,以下是每个组件的落地式讲解,所有示例均为可直接运行的入门级代码。

一、Servlet:Web 请求处理的核心(核心中的核心)

1. 组件定位

Servlet 是运行在服务器(如 Tomcat)上的 Java 类,是浏览器与服务器交互的核心桥梁,负责接收前端请求、处理业务逻辑、返回响应结果。

2. 核心作用

  • 接收 HTTP 请求参数(如登录的用户名 / 密码);
  • 调用业务逻辑(如验证用户信息);
  • 生成动态响应(如返回登录成功 / 失败的结果);
  • 控制页面跳转(请求转发 / 重定向)。

3. 核心特性

  • 生命周期 :由 Tomcat 管理,分为 3 个阶段:
    • init():Servlet 被创建时执行(默认第一次请求时创建),仅执行一次;
    • service():每次请求都会执行,处理核心逻辑;
    • destroy():Servlet 被销毁时执行(如 Tomcat 关闭),仅执行一次。

4. 入门示例(注解版,主流方式)

java

运行

复制代码
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

// 配置Servlet的访问路径:http://localhost:8080/hello
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    // 处理GET请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 设置响应编码,避免中文乱码
        resp.setContentType("text/html;charset=UTF-8");
        // 获取请求参数
        String name = req.getParameter("name");
        // 生成响应
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>欢迎你," + (name == null ? "游客" : name) + "!</h1>");
    }

    // 处理POST请求(如需处理POST,重写doPost即可)
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp); // 复用GET逻辑
    }
}

5. 常用场景

  • 登录 / 注册接口、数据查询接口;
  • 处理文件上传 / 下载(初阶可先掌握基础参数处理)。

二、Filter:请求过滤 / 拦截(统一功能处理)

1. 组件定位

Filter(过滤器)是请求到达 Servlet 前的 "拦截器",可对请求 / 响应做统一处理,不直接处理业务逻辑,专注 "通用功能"。

2. 核心作用

  • 统一字符编码(解决中文乱码);
  • 登录校验(未登录用户拦截,跳转到登录页);
  • 日志记录(记录所有请求的 URL、时间);
  • 权限控制(限制某些接口的访问)。

3. 核心方法

  • doFilter():核心方法,实现过滤逻辑,需调用chain.doFilter(req, resp)让请求继续向下传递(否则请求会被拦截)。

4. 入门示例(登录校验 + 编码过滤)

java

运行

复制代码
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

// 过滤所有请求:/*
@WebFilter("/*")
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        // 1. 统一编码
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        // 2. 登录校验(排除登录页,避免死循环)
        String url = req.getRequestURI();
        if (!url.contains("/login") && req.getSession().getAttribute("user") == null) {
            // 未登录,跳转到登录页
            resp.sendRedirect("/login.html");
            return;
        }

        // 3. 放行请求(继续到Servlet/下一个Filter)
        chain.doFilter(req, resp);
    }
}

5. 常用场景

  • 全局编码处理、登录拦截、接口访问日志;
  • 敏感词过滤(如替换请求中的违规字符)。

三、Listener:监听器(监听容器 / 对象状态)

1. 组件定位

Listener(监听器)用于监听 Web 容器或对象的状态变化,当触发指定事件时自动执行逻辑,初阶重点掌握 2 个核心监听器。

2. 核心类型(初阶必学)

监听器类型 核心作用 适用场景
ServletContextListener 监听 Web 应用的启动 / 销毁 应用启动时加载配置文件、初始化数据库连接池
HttpSessionListener 监听 Session 的创建 / 销毁 统计在线用户数、记录用户登录时长

3. 入门示例(应用启动初始化)

java

运行

复制代码
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;

@WebListener
public class InitListener implements ServletContextListener {
    // 应用启动时执行
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Web应用启动了!");
        // 初始化操作:加载配置、创建连接池等
        sce.getServletContext().setAttribute("appName", "JavaEE初阶项目");
    }

    // 应用销毁时执行
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Web应用销毁了!");
        // 释放资源:关闭连接池、保存日志等
    }
}

4. 常用场景

  • 应用启动初始化资源、关闭时释放资源;
  • 统计在线用户数、监控 Session 状态。

四、JSP:动态页面(初阶可选,了解即可)

1. 组件定位

JSP(Java Server Pages)是 "嵌入 Java 代码的 HTML 页面",本质是 Servlet(Tomcat 会把 JSP 编译成 Servlet),用于快速生成动态页面

2. 核心作用

  • 结合 Java 代码和 HTML,生成动态页面(如用户列表页);
  • 替代 "用 Servlet 拼接 HTML 字符串" 的繁琐操作。

3. 核心语法(初阶重点)

  • <%= 变量/表达式 %>:输出内容到页面;
  • <% Java代码 %>:执行 Java 逻辑;
  • ${变量}:EL 表达式(简化取值,替代 Java 代码)。

4. 入门示例(用户信息展示)

jsp

复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户信息</title>
</head>
<body>
    <h1>用户信息页</h1>
    <%-- EL表达式取值(从请求/会话中获取) --%>
    <p>用户名:${userName}</p>
    <p>年龄:${age}</p>
    
    <%-- Java代码块(初阶了解即可,现在主流前后端分离,少用) --%>
    <%
        String msg = "欢迎访问";
        out.print("<p>" + msg + "</p>");
    %>
</body>
</html>

5. 注意事项

现在主流是 "前后端分离",JSP 已很少使用,初阶只需了解基本语法,重点还是 Servlet+SpringMVC。

五、Cookie & Session:状态管理(用户身份保持)

1. 组件定位

HTTP 协议是 "无状态" 的,Cookie(客户端存储)和 Session(服务器存储)是解决 "用户状态保持" 的核心(如登录后记住用户)。

2. 核心区别

特性 Cookie Session
存储位置 客户端浏览器 服务器内存 / 数据库
安全性 低(可被篡改) 高(仅存服务器)
存储大小 有限(约 4KB) 无限制(受服务器内存影响)
有效期 可设置长期(如 7 天) 默认 30 分钟(可配置)

3. 入门示例(登录后保存用户状态)

java

运行

复制代码
// 1. 登录Servlet中设置Session
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        // 模拟登录校验
        if ("admin".equals(username) && "123456".equals(password)) {
            // 保存用户信息到Session(服务器端)
            req.getSession().setAttribute("user", username);
            // 设置Cookie(可选,记住用户名)
            Cookie cookie = new Cookie("username", username);
            cookie.setMaxAge(7 * 24 * 60 * 60); // 有效期7天
            resp.addCookie(cookie);
            resp.sendRedirect("/index.jsp"); // 跳转到首页
        } else {
            resp.sendRedirect("/login.html?error=1"); // 登录失败,返回登录页
        }
    }
}

4. 常用场景

  • 登录状态保持、记住用户名;
  • 购物车数据临时存储(初阶用 Session 即可)。

六、JDBC + 连接池:数据库交互(数据层核心)

1. 组件定位

JDBC 是 Java 操作数据库的标准接口,连接池(如 Druid)是优化数据库连接的工具(避免频繁创建 / 销毁连接),是数据交互的核心。

2. 核心作用

  • 连接数据库,执行增删改查(CRUD);
  • 连接池复用连接,提升性能。

3. 入门示例(Druid 连接池 + JDBC 查询)

java

运行

复制代码
import com.alibaba.druid.pool.DruidDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class JdbcDemo {
    // 初始化连接池(实际项目中可配置在配置文件)
    private static DruidDataSource dataSource = new DruidDataSource();
    static {
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setInitialSize(5); // 初始连接数
        dataSource.setMaxActive(20); // 最大连接数
    }

    // 查询用户信息
    public static void queryUser(String username) {
        try (Connection conn = dataSource.getConnection();
             PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE username = ?")) {
            // 设置参数(防SQL注入)
            ps.setString(1, username);
            // 执行查询
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("用户名:" + rs.getString("username") + ",年龄:" + rs.getInt("age"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        queryUser("admin");
    }
}

4. 常用场景

  • 所有数据库操作(注册时插入用户、登录时查询用户、修改用户信息等);
  • 初阶掌握基础 CRUD 即可,后续可学 MyBatis 简化 JDBC 操作。

总结

关键点回顾
  1. JavaEE 初阶核心组件中,Servlet 是请求处理核心,Filter 做统一过滤,Listener 监听状态,Cookie/Session 管理用户状态,JDBC + 连接池操作数据库;
  2. 各组件分工明确:Servlet 处理业务,Filter 处理通用功能,Listener 处理容器事件,Cookie/Session 解决状态保持,JDBC 解决数据交互;
  3. 初阶学习重点是 "Servlet+Filter+JDBC",掌握这三个就能搭建基础 Web 项目,JSP 可仅做了解(主流前后端分离已少用)。
相关推荐
华如锦2 小时前
MongoDB作为小型 AI智能化系统的数据库
java·前端·人工智能·算法
q***44152 小时前
C++跨平台开发挑战的技术文章大纲编译器与工具链差异
java·后端
stillaliveQEJ3 小时前
【javaEE】Spring AOP(一)
java·spring·java-ee
麦兜*3 小时前
SpringBoot进阶:深入理解SpringBoot自动配置原理与源码解析
java·spring boot·spring·spring cloud
慕白Lee3 小时前
项目JDK17+SpringBoot3.0升级
java·ide·intellij-idea
之歆10 小时前
Spring AI入门到实战到原理源码-MCP
java·人工智能·spring
yangminlei10 小时前
Spring Boot3集成LiteFlow!轻松实现业务流程编排
java·spring boot·后端
qq_3181215910 小时前
互联网大厂Java面试故事:从Spring Boot到微服务架构的技术挑战与解答
java·spring boot·redis·spring cloud·微服务·面试·内容社区
J_liaty10 小时前
Spring Boot整合Nacos:从入门到精通
java·spring boot·后端·nacos