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

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 {@Overrideprotected 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);
}

相关文章:

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

1. Java EE 平台概述 1.1 发展历程 Java EE 从 J2EE 发展而来&#xff0c;经历了多个版本的演进&#xff0c;从早期的 J2EE 1.2 到最新的 Jakarta EE。 1.2 架构特点 多层架构&#xff1a; 客户端层&#xff1a;用户界面&#xff0c;如 Web 浏览器、移动应用等。Web 层&…...

【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

HDFS新增节点和删除datanode节点

在实际的hadoop环境中&#xff0c;有时我们需要新增或者删除datanode节点&#xff0c;来达到扩容或缩容的目的&#xff0c;本文就来讲解如何新增和删除datanode。 新增节点和删除节点会涉及两个关键的配置项&#xff08;hdfs-site.xml文件中&#xff09;&#xff1a; dfs.hos…...

数据结构-线性表-具有独立头节点的双向循环链表

完整代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6013)#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h>// 一个具有独立头节点的双向循环链表&#xff0c; // 区别在于将头节点和数据区域…...

CSS 响应式设计之媒体查询技术

CSS 媒体查询&#xff08;Media Queries&#xff09;是一种根据不同设备的特性&#xff08;如屏幕宽度、分辨率、方向等&#xff09;来应用不同的 CSS 样式的技术。它通常用于响应式设计&#xff0c;帮助网页在不同设备和屏幕尺寸下良好地展示。 基本语法 media (条件) {/* 样…...

HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析

机电液一体化与先进机器人控制技术国际会议&#xff08;HARCT 2025&#xff09;将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果&#xff0c;邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…...

云计算研究实训室建设方案

一、引言 随着云计算技术的迅速发展和广泛应用&#xff0c;职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室&#xff0c;为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台&#xff0c;以促进云计算技术…...

VRT: 关于视频修复的模型

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月15日14点34分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...

实习冲刺Day22

算法题 路径总和 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool hasPathSum(TreeNode* root, int targetSum) {if(!root)return 0;//节点为空返回0int sumroot->val;//记录当前节点的值int ntargetSum-sum;//距离目标值还差多少if…...

datawhale2411组队学习之模型压缩技术1:模型剪枝

文章目录 一、环境配置二、模型压缩2.1 模型压缩简介2.2 模型压缩评价指标 三、 模型剪枝3.1 模型剪枝简介3.2 何为剪枝&#xff08;What is Pruning?&#xff09;3.3 剪枝标准&#xff08;How to prune?&#xff09;3.4 剪枝频率&#xff08;How often?&#xff09;3.5 剪枝…...

高防服务器的费用受到哪些原因影响?

在如今的互联网社会中&#xff0c;越来越多的企业都开始了线上网络业务的发展&#xff0c;网络安全也日益受到了重视&#xff0c;高防服务器成为了众多企业的首要选择&#xff0c;不仅可以帮助企业有效抵御各种网络攻击&#xff0c;保证网站和应用的稳定性。 但是高防服务器与其…...

中断和异常处理,嵌入式行业的门槛?

Linux内核中&#xff0c;中断和异常是重要的机制&#xff0c;用于响应硬件事件和处理异常情况。它们直接关系到系统的稳定性和性能。本文将通过清晰的结构、逻辑图、表格&#xff0c;深入解析中断和异常处理的种类、流程以及它们与系统调用和用户空间的联系。 1. 中断和异常概述…...

latex中英文环境中双引号怎么输入

latex中英文环境中双引号怎么输入 1. **英文环境中的双引号**2. **中文环境中的双引号**3. **嵌套引号**4. **一致性处理**小结&#xff1a; 在 LaTeX 中&#xff0c;输入双引号的方法取决于文档的语言环境。以下是针对英文和中文环境的双引号输入方法&#xff1a; 1. 英文环境…...

用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)

添加层级&#xff08;Adding Layers&#xff09; 引言1. Training Data2. Dense Layer Class 引言 我们构建的神经网络变得越来越受人尊敬&#xff0c;但目前我们只有一层。当神经网络具有两层或更多隐藏层时&#xff0c;它们变成了“深度”网络。目前我们只有一层&#xff0c…...

前端知识点---构造函数(javascript)

文章目录 前端知识点---构造函数(Javascript)1. 定义构造函数2. 使用构造函数创建对象3. 工作原理4. 构造函数与原型5. 类的语法糖6. 注意事项 前端知识点—构造函数(Javascript) 在我的文章 “对象” 里我提到了构造函数 , 前端知识点—Javascript的对象(Javascript) 因为day…...

Nginx 上安装 SSL 证书并启用 HTTPS 访问

本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书&#xff0c;并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书&#xff0c;通过 Certbot 生成并管理证书&#xff0c;然后配置 Nginx 实现 HTTPS 加密访问。同时&#xff0c;我们将解决因 SSL 证…...

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

docker运行ActiveMQ-Artemis

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

90.选择排序(理论分析)

一.选择排序 冒泡排序每相邻的俩个元素之间都会比较交换一次&#xff0c;效率比较慢。这对这个问题所改进的算法叫做选择排序。 二&#xff0e;选择排序的实现思路 首先在一组未排序的数据中假定一个最大或者最小元素&#xff0c;一般是第0个元素。然后在从剩余未排序的元素中…...

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...