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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917612.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对接阿里云实人认证

对接阿里云实人认证-身份二要素核验接口整理 目录 应用场景 接口文档 接口信息 请求参数 响应参数 调试 阿里云openApi平台调试 查看调用结果 查看SDK示例 下载SDK 遇到问题 本地调试 总结 应用场景 项目有一个提现的场景&#xff0c;需要用户真实的身份信息。 …

【2048】我的创作纪念日

机缘 2048天&#xff0c;不知不觉来csdn博客已经有2048天了&#xff0c;其实用csdn平台很久了&#xff0c;实际上写博客还是从2019年开始。 还记得最初成为创作者初心是什么吗&#xff1f; 最开始&#xff0c;主要是用来做笔记。平时工作中、学习中遇到的技术相关问题都会在cs…

docker运行ActiveMQ-Artemis

前言 artemis跟以前的ActiveMQ不是一个产品&#xff0c;原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的&#xff0c;和原来不兼容&#xff0c;全称&#xff1a;ActiveMQ Artemis 本位仅介绍单机简单部署使用&#xff0c;仅用于学习和本地测试使用 官网&#xff1a;…

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息&#xff0c;在MyBatis框架中&#xff0c;首先需要通过SqlSessionFactory创建SqlSession&#xff0c;然后才能使用SqlSession获取对应的Mapper接口&#xff0c;进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好&#xff0c;可正常使用。 例&#xff1a; 设备BMC地址&#xff1a;10.99.240.196 一. 给磁盘做raid 要求&#xff1a; 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

aws(学习笔记第十四课) 面向NoSQL DB的DynamoDB

aws(学习笔记第十四课) 面向NoSQL DB的DynamoDB 学习内容&#xff1a; 开发一个任务TODO管理器 1. 主键&#xff0c;分区键和排序键 DynamoDB的表定义和属性定义 表定义&#xff08;简单主键&#xff09; 表定义的命名需要系统名 _ 表名的形式&#xff0c;提前规划好前缀。…

机器学习—正则化和偏差或方差

正则化参数的选择对偏差和方差的影响 用一个四阶多项式&#xff0c;要用正则化拟合这个模型&#xff0c;这里的lambda的值是正则化参数&#xff0c;它控制着你交易的金额&#xff0c;保持参数w与训练数据拟合&#xff0c;从将lambda设置为非常大的值的示例开始&#xff0c;例如…

聚类分析 | MSADBO优化Spectral谱聚类优化算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于改进正弦算法引导的蜣螂优化算法(MSADBO)优化Spectral谱聚类&#xff0c;matlab代码&#xff0c;直接运行! 创新独家&#xff0c;先用先发&#xff0c;注释清晰&#xff0c;送MSADBO参考文献!优化参数 优化后的带…

STM32:ADC

目录 一、简介 二、结构 三、工作模式 四、使用流程 一、简介 模数转换器&#xff0c;ADC&#xff08;Analog-to-Digital Converter&#xff09;是将模拟信号转换为数字信号的电子设备。在STM32中&#xff0c;ADC用于处理来自传感器、麦克风等的模拟信号。STM32的ADC具有高…

candence : 如何利用EXCEL 绘制复杂、多管脚元件

如何利用EXCEL 绘制复杂、多管脚元件 前面的步骤直接略过 我们以STM32F407VEXX 系列 100pin 芯片为例讲解&#xff1a; 1、新建好一个空元件 2、使用阵列&#xff0c;放置管脚 点击 “ ok ” 3、选中所有管脚 右键 “edit properites” 出现如下页面 4、点击 左上角&…

vue内置指令和自定义指令

常见的指令&#xff1a; v-bind : 单向绑定解析表达式, 可简写为 :xxx v-model : 双向数据绑定 v-for : 遍历数组/对象/字符串 v-on : 绑定事件监听, 可简…

【ict基础软件赛道】真题-50%openGauss

题目取自赛前测试链接 OpenGauss安装前使用哪个工具检查环境是否符合安装哪个功能不是gs_guc工具提供的opengauss数据库逻辑复制的特点描述正确的是opengauss的全密态数据库等值查询能力描述正确的是哪个不属于ssh客户端工具opengauss三权分立说法正确的是opengauss wdr snapsh…

乐理的学习(音程)

二度&#xff0c;三度&#xff0c;六度&#xff0c;七度的大n度都是直接的音名到音名&#xff0c;如#A到#G的&#xff0c;这样为大n度 而这个基础上向内收&#xff0c;收半音为小n度&#xff0c;在小n度再收&#xff0c;为减n度 在大n度的基础上再向外扩半音&#xff0c;为增…

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念&#xff0c;其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM &#xff08;数字版权管理&#xff09;要求。Microsoft开发了此机制&#xff0c;以便您的媒体播放器可以读取例如蓝光&#xff0c;同时…

centos7 升级openssl 与升级openssh 安装卸载 telnet-server

前言&#xff1a; 服务器被安全扫描&#xff0c;扫出了漏洞需要修复&#xff0c;根据提示将openssh升级为9.8p1的版本&#xff0c;同时需要升级openssl&#xff0c;但是升级openssh可能会导致ssh连接失败&#xff0c;从而无法继续操作&#xff0c;特别是远程机房尤为危险&#…

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符&#xff08;标记&#xff09; 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 正则表达式在线测试: 正则在线测试工具 元字符 字符描述\d 匹配一个数字字符。等价于 …

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中&#xff0c;知识库管理系统&#xff08;KBMS&#xff09;已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性&#xff0c;以及如何快速搭建企业知识库。 知识库管理系统是什么&#xff1f; 知识库管理系统…

【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)

#IEEE出版|EI稳定检索#主讲嘉宾阵容强大&#xff01;多位外籍专家出席报告 2024健康大数据与智能医疗国际会议&#xff08;ICHIH 2024&#xff09;2024 International Conference on Health Big Data and Intelligent Healthcare 会议简介 2024健康大数据与智能医疗国际会议…

【软件测试】一个简单的自动化Java程序编写

文章目录 自动化自动化概念回归测试常见面试题 自动化测试金字塔 Web 自动化测试驱动 Selenium一个简单的自动化示例安装 selenium 库使⽤selenium编写代码 自动化 自动化概念 自动的代替人的行为完成操作。自动化在生活中处处可见 生活中的自动化可以减少人力的消耗&#x…

️️一篇快速上手 AJAX 异步前后端交互

AJAX 1. AJAX1.1 AJAX 简介1.2 AJAX 优缺点1.3 AJAX 前后端准备1.4 AJAX 请求基本操作1.5 AJAX 发送 POST 请求1.6 设置请求头1.7 响应 JSON 数据1.8 AJAX 请求超时与网络异常处理1.9 取消请求1.10 Fetch 发送 Ajax 请求 2. jQuery-Ajax2.1 jQuery 发送 Ajax 请求&#xff08;G…