Java EE 技术基础知识体系梳理

1. Java EE 平台概述

1.1 发展历程

Java EE 从 J2EE 发展而来,经历了多个版本的演进,从早期的 J2EE 1.2 到最新的 Jakarta EE。

1.2 架构特点

  • 多层架构
    • 客户端层:用户界面,如 Web 浏览器、移动应用等。
    • Web 层:处理 HTTP 请求和响应,主要使用 Servlet 和 JSP。
    • 业务逻辑层:处理业务逻辑,主要使用 EJB。
    • 持久层:处理数据持久化,主要使用 JPA 和 JDBC。
  • 服务组件:各种服务和技术组件,如 Servlet、EJB、JPA、JDBC 等。
  • 企业级特性:安全性、事务管理、消息传递、资源管理等。

1.3 主要组件

  • Servlet 和 JSP
    • Servlet:Java 类,用于处理客户端请求并生成响应。
    • JSP:Java Server Pages,用于生成动态网页。
  • EJB(Enterprise JavaBeans)
    • 会话 Bean:处理业务逻辑,分为无状态( Stateless )和有状态( Stateful )。
    • 实体 Bean:表示持久化对象,基于 JPA。
    • 消息驱动 Bean:处理异步消息,基于 JMS。
  • JPA(Java Persistence API):用于对象关系映射(ORM),简化数据库操作。
  • JDBC(Java Database Connectivity):用于连接和操作数据库。
  • JMS(Java Message Service):用于消息传递,支持异步通信。
  • JTA(Java Transaction API):用于事务管理。
  • JNDI(Java Naming and Directory Interface):用于查找和访问命名和目录服务。
  • RMI(Remote Method Invocation):用于远程方法调用。

1.4 部署模型和运行环境

  • 应用服务器:如 Tomcat、WildFly、WebLogic、WebSphere 等,用于部署和运行 Java EE 应用。
  • 部署单元
    • WAR 文件:Web Application Archive,包含 Web 应用的所有资源。
    • EAR 文件:Enterprise Archive,包含整个企业应用的所有资源。

2. Java EE 核心技术

2.1 Servlet 和 JSP

2.1.1 Servlet
  • 生命周期
    • 初始化(init):Servlet 被加载时调用,用于初始化资源。
    • 服务(service):每次接收到请求时调用,处理请求并生成响应。
    • 销毁(destroy):Servlet 被卸载时调用,用于释放资源。
  • 请求处理流程
    • 接收请求:通过 HttpServletRequest 获取请求参数。
    • 处理请求:根据请求参数执行相应的业务逻辑。
    • 生成响应:通过 HttpServletResponse 返回响应结果。
  • 示例:实现一个简单的登录验证 Servlet。
java 复制代码
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if ("admin".equals(username) && "123456".equals(password)) {
            response.sendRedirect("welcome.jsp");
        } else {
            response.sendRedirect("error.jsp");
        }
    }
}
2.1.2 JSP
  • 语法
    • 表达式<%= %>,用于输出变量值。
    • 脚本<% %>,用于嵌入 Java 代码。
    • 声明<%! %>,用于声明变量和方法。
  • 指令
    • page:设置页面属性,如内容类型、编码等。
    • include:包含其他 JSP 文件。
    • taglib:引入标签库。
  • 动作元素
    • forward:转发请求到另一个资源。
    • include:包含其他资源的内容。
    • useBean:创建和使用 JavaBean。
  • 示例 :欢迎页面 welcome.jsp
jsp 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome, <%= request.getParameter("username") %>!</h1>
</body>
</html>

2.2 EJB(Enterprise JavaBeans)

  • 类型
    • 会话 Bean
      • 无状态(Stateless):不保存会话状态,每次调用都是独立的。
      • 有状态(Stateful):保存会话状态,适用于需要会话上下文的场景。
    • 实体 Bean:表示持久化对象,基于 JPA。
    • 消息驱动 Bean:处理异步消息,基于 JMS。
  • 作用
    • 会话 Bean:封装业务逻辑。
    • 实体 Bean:表示持久化对象。
    • 消息驱动 Bean:处理 JMS 消息。
  • 开发方法
    • 使用注解(@Stateless、@Stateful、@MessageDriven)。
  • 示例:一个简单的无状态会话 Bean。
java 复制代码
@Stateless
public class UserService {
    public String greet(String name) {
        return "Hello, " + name;
    }
}

2.3 JPA(Java Persistence API)

  • 实体类定义
    • 使用注解(@Entity、@Table、@Id、@GeneratedValue)。
    • @Entity:标记类为实体类。
    • @Table:指定表名。
    • @Id:标记主键字段。
    • @GeneratedValue:指定主键生成策略。
  • 关系映射
    • 一对一:使用 @OneToOne 注解。
    • 一对多:使用 @OneToMany 注解。
    • 多对一:使用 @ManyToOne 注解。
    • 多对多:使用 @ManyToMany 注解。
  • 查询语言
    • JPQL(Java Persistence Query Language):用于编写查询语句。
  • 事务管理
    • 使用 @Transactional 注解。
  • 示例
    • 实体类 User
java 复制代码
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username")
    private String username;

    @Column(name = "password")
    private String password;

    // Getters and Setters
}
  • 查询示例
java 复制代码
@PersistenceContext
private EntityManager entityManager;

public List<User> findAllUsers() {
    return entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();
}

2.4 JDBC(Java Database Connectivity)

  • 数据库连接
    • 使用 DriverManager 获取连接。
    • 示例:
java 复制代码
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, user, password);
  • SQL 执行
    • Statement:执行静态 SQL 语句。
    • PreparedStatement:预编译 SQL 语句,防止 SQL 注入。
    • CallableStatement:执行存储过程。
    • 示例:
java 复制代码
try (Connection conn = DriverManager.getConnection(url, user, password);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {

    while (rs.next()) {
        System.out.println(rs.getString("username"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}
  • 结果集处理
    • 使用 ResultSet 处理查询结果。
    • 示例:
java 复制代码
while (rs.next()) {
    String username = rs.getString("username");
    System.out.println(username);
}
相关推荐
尼克_张2 分钟前
tomcat配合geoserver安装及使用
java·tomcat
wywcool15 分钟前
JVM学习之路(5)垃圾回收
java·jvm·后端·学习
-seventy-34 分钟前
Java Web 工程全貌
java
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ39 分钟前
idea 删除本地分支后,弹窗 delete tracked brank
java·ide·intellij-idea
言慢行善40 分钟前
idea出现的问题
java·ide·intellij-idea
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
java·开发语言·jvm·vue.js·spring boot·spring cloud·开源
Ling_suu1 小时前
Spring——单元测试
java·spring·单元测试
ModelBulider1 小时前
十三、注解配置SpringMVC
java·开发语言·数据库·sql·mysql
苹果酱05672 小时前
C语言 char 字符串 - C语言零基础入门教程
java·开发语言·spring boot·mysql·中间件
csucoderlee2 小时前
eclipse mat leak suspects report和 component report的区别
java·ide·eclipse