当前位置: 首页 > article >正文

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。
@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
<%@ 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。
@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
@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
}
  • 查询示例
@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 获取连接。
    • 示例:
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:执行存储过程。
    • 示例:
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 处理查询结果。
    • 示例:
while (rs.next()) {
    String username = rs.getString("username");
    System.out.println(username);
}

http://www.kler.cn/a/394120.html

相关文章:

  • SQL 实战:联合查询与子查询 – 数据比对与关联查询优化
  • 【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程
  • LUA基础语法
  • docker项目部署流程(Vue+Spingboot)
  • 游戏陪玩系统:国际版JAVA游戏陪玩系统源码陪练APP源码H5源码电竞系统源码支持Android+IOS+H5
  • 测试坏块屏蔽文件是是覆盖还是附加
  • 数据分析丨世界杯冠军猜想:EA 体育游戏模拟能成功预测吗?
  • i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)
  • JavaScript中统计每个字符出现的个数(使用reduce方法)
  • unity单例模式的不同声明(待完善
  • 【C语言】从3x5矩阵计算前三行平均值并扩展到4x5矩阵
  • 为什么hbase在大数据领域渐渐消失
  • 速盾:cdn 支持 php 吗?
  • 如何保障医院内部的隔离网安全跨网文件交换?
  • PyTorch深度学习与企业级项目实战-预训练语言模型GPT
  • 探索AutoDL与CodeWithGPU:深度学习之旅的新起点
  • 【python】机器学习调参与自动化:使用Hyperopt优化你的模型
  • Microsoft Fabric - 尝试一下Real time event stream
  • 标贝科技:AI基础数据服务,人工智能行业发展的底层支撑
  • 【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用
  • React中 修改 html字符串 中某些元素的属性
  • ArkUI---常用组件---按钮 (Button)
  • 机器学习【激活函数】
  • 【LeetCode】【算法】64. 最小路径和
  • 【C++】类和对象-上
  • 【RabbitMQ】09-取消超时订单