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:表示持久化对象。
- 消息驱动 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 发展而来,经历了多个版本的演进,从早期的 J2EE 1.2 到最新的 Jakarta EE。 1.2 架构特点 多层架构: 客户端层:用户界面,如 Web 浏览器、移动应用等。Web 层&…...

【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
HDFS新增节点和删除datanode节点
在实际的hadoop环境中,有时我们需要新增或者删除datanode节点,来达到扩容或缩容的目的,本文就来讲解如何新增和删除datanode。 新增节点和删除节点会涉及两个关键的配置项(hdfs-site.xml文件中): dfs.hos…...
数据结构-线性表-具有独立头节点的双向循环链表
完整代码: #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6013)#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h>// 一个具有独立头节点的双向循环链表, // 区别在于将头节点和数据区域…...
CSS 响应式设计之媒体查询技术
CSS 媒体查询(Media Queries)是一种根据不同设备的特性(如屏幕宽度、分辨率、方向等)来应用不同的 CSS 样式的技术。它通常用于响应式设计,帮助网页在不同设备和屏幕尺寸下良好地展示。 基本语法 media (条件) {/* 样…...

HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析
机电液一体化与先进机器人控制技术国际会议(HARCT 2025)将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果,邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…...

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

VRT: 关于视频修复的模型
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月15日14点34分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
实习冲刺Day22
算法题 路径总和 112. 路径总和 - 力扣(LeetCode) 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 何为剪枝(What is Pruning?)3.3 剪枝标准(How to prune?)3.4 剪枝频率(How often?)3.5 剪枝…...
高防服务器的费用受到哪些原因影响?
在如今的互联网社会中,越来越多的企业都开始了线上网络业务的发展,网络安全也日益受到了重视,高防服务器成为了众多企业的首要选择,不仅可以帮助企业有效抵御各种网络攻击,保证网站和应用的稳定性。 但是高防服务器与其…...

中断和异常处理,嵌入式行业的门槛?
Linux内核中,中断和异常是重要的机制,用于响应硬件事件和处理异常情况。它们直接关系到系统的稳定性和性能。本文将通过清晰的结构、逻辑图、表格,深入解析中断和异常处理的种类、流程以及它们与系统调用和用户空间的联系。 1. 中断和异常概述…...
latex中英文环境中双引号怎么输入
latex中英文环境中双引号怎么输入 1. **英文环境中的双引号**2. **中文环境中的双引号**3. **嵌套引号**4. **一致性处理**小结: 在 LaTeX 中,输入双引号的方法取决于文档的语言环境。以下是针对英文和中文环境的双引号输入方法: 1. 英文环境…...

用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)
添加层级(Adding Layers) 引言1. Training Data2. Dense Layer Class 引言 我们构建的神经网络变得越来越受人尊敬,但目前我们只有一层。当神经网络具有两层或更多隐藏层时,它们变成了“深度”网络。目前我们只有一层,…...
前端知识点---构造函数(javascript)
文章目录 前端知识点---构造函数(Javascript)1. 定义构造函数2. 使用构造函数创建对象3. 工作原理4. 构造函数与原型5. 类的语法糖6. 注意事项 前端知识点—构造函数(Javascript) 在我的文章 “对象” 里我提到了构造函数 , 前端知识点—Javascript的对象(Javascript) 因为day…...
Nginx 上安装 SSL 证书并启用 HTTPS 访问
本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书,并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书,通过 Certbot 生成并管理证书,然后配置 Nginx 实现 HTTPS 加密访问。同时,我们将解决因 SSL 证…...

谷歌Gemini发布iOS版App,live语音聊天免费用!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...

docker运行ActiveMQ-Artemis
前言 artemis跟以前的ActiveMQ不是一个产品,原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的,和原来不兼容,全称:ActiveMQ Artemis 本位仅介绍单机简单部署使用,仅用于学习和本地测试使用 官网:…...
90.选择排序(理论分析)
一.选择排序 冒泡排序每相邻的俩个元素之间都会比较交换一次,效率比较慢。这对这个问题所改进的算法叫做选择排序。 二.选择排序的实现思路 首先在一组未排序的数据中假定一个最大或者最小元素,一般是第0个元素。然后在从剩余未排序的元素中…...

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

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...