【方向盘】Java EE几十种技术,“活着的”还剩几何(Web应用技术篇)

简介: 三十年河东,三十年河西
本文已被 https://yourbatman.cn收录; 女娲Knife-Initializr工程可公开访问啦;程序员专用网盘 https://wangpan.yourbatman.cn;技术专栏源代码大本营: https://github.com/yourbatman/tech-column-learning;公号后台回复“ 专栏列表”获取全部小而美的 原创技术专栏

你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。

Title Link
所属专栏 【方向盘】-Java EE
源代码 https://github.com/yourbatman/FXP-java-ee
程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法 https://wangpan.yourbatman.cn
Java开发软件包(Mac) https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit
女娲工程 http://152.136.106.14:8761
版本约定 [Mac OS 12.5],[IntelliJ IDEA 2022.2],[Java EE:6、7、8],[Jakarta EE:8、9、9.1]

📚前言

若你还不太清楚Java EE是什么,可先移步这里:什么是Java EE?

技术的发展日新月异,沧海桑田,一不留神的掉队,可能就是永远。就连稳得一批的Spring技术栈也受到了基于GraalVMQUARKUS等框架的挑战,好在Spring社区迅速推出了Spring Native予以回应。

作为一枚Javaer,不可能没有听过Java EE。比如至少听过这句广为流传的话“Java EE的13种核心技术”,而其实Java EE远不止13种技术。
在这里插入图片描述
通过此图你领略到了Java EE的“大而全”。从1999年出现到已有20余年,风云变幻,现在早已不是Java EE的天下,Spring技术栈已接管成为实际标准。本文就盘点盘点Java EE这几十种技术规范,依旧坚挺的还要哪些?

Tips:推荐学习指数获得3颗⭐️的可认为依旧坚挺,4颗⭐️认为知识点还比较重要,5颗⭐️认为依旧是 主流技术

✍正文

在这里插入图片描述

另外说明:下面所有API的GAV坐标均使用Jakarta EE的方式给出,原因是它的GAV命名、归类相较于旧的Java EE更加规范,对开发者而言规律性更强、理解起来更方便些。版本号方面全部采用javax.*命名空间对于的版本,若想升级到jakarta.*命名空间的话仅需大版本号 + 1即可(GAV不变),非常方便。

另外还有一个小约定:同是javax.*命名空间的话,Jakarta EE的GAV大版本号与Java EE 8的保持一致,若发现大版本号比后者大了,那么说明命名空间已是新的jakarta.*

从Java EE 8(及以后)版本推荐使用Jakarta EE的GAV,因为摒弃掉Java EE元素已是大势所趋

Java EE技术总览

以Java EE 8/Jakarta EE 8为例,主要包含这些技术:
在这里插入图片描述
划分为五大类:
在这里插入图片描述
其中,Web应用技术是现在Java最最最重要的使用场景。因此本文就聚焦在这块,来聊聊它有哪些技术,有哪些技术现今依旧坚挺。

Part1: Web应用技术

Web Application Technologies,共8个规范。
在这里插入图片描述
把该part放在首位,因为它对开发者是最重要、使用得最多的,也是开发者最熟悉的部分。这“一切”可能权由Servlet承担着...

✌1. Servlet

推荐学习指数⭐️⭐️⭐️⭐️⭐️

Servlet规范绝对是作为一枚Javaer必知必会的技术。

Java Servlet是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类

在这里插入图片描述
Servlet现今依旧是Java Web应用开发的主流技术,即使以Spring WebFlux为代表的响应式编程技术出现了且很多,但基于Servlet的Spring MVC依旧热度不减,是业务开发的首选。

API的GAV

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>4.0.4</version>
    <scope>provided</scope>
</dependency>

代表API

  • ServletContext
  • HttpServlet
  • HttpFilter
  • RequestDispatcher

Servlet由Web容器(如Tomcat)提供实现,因此只有你的工程在编译期强依赖于Servlet的API参与编译时才需导入此库(scope=provided,表示参与编译但并不会打包进去)。

✌2. JSP

推荐学习指数⭐️⭐️

虽说JSP技术早已out,但由于其浓厚的历史原因,所以我认为每一个Java Web开发人员对此门技术都应该有一定了解。不为使用,只为谈资。

JSP用全称Java Server Pages,是一种动态网页开发技术。之所以说动态是因为它使用JSP标签在HTML网页中插入Java代码,Java代码放在标签<% %>里。

JSP本质是一种Servlet(编译后均变为Servlet),主要用于实现Java web应用程序的用户界面部分。那么为何有了Servlet还需要JSP呢?与纯Servlet相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println()/writer.write()语句,可读性可维护性更高。
在这里插入图片描述

API的GAV

<dependency>
    <groupId>jakarta.servlet.jsp</groupId>
    <artifactId>jakarta.servlet.jsp-api</artifactId>
    <version>2.3.6</version>
    <scope>provided</scope>
</dependency>

代表API

  • JspContext、PageContext
  • JspPage、HttpJspPage(public interface JspPage extends Servlet { ... })
  • JspTag

显然,JSP规范的具体实现亦由Web容器提供,并且99.99%的情况下开发者并不需要它的API,所以该GAV了解下即可。

✌3. EL表达式

推荐学习指数⭐️⭐️⭐️

EL因JSP而生,但又独立于JSP。虽说JSP已死,但EL作为一门独立的表达式语言,是可以单独存在的。

Expression Language表达式语言,一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据),目的是简化开发且提高可维护性,替代开发者在JSP页面上写的Java代码。

EL表达式是在JSP2.0开始新引入概念,所以有时候也叫它JSP表达式语言。它由JSP提出而出现,但并不必须依托于它而存在,而是可作为一门独立的表达式语言技术提供使用,生命周期并不与JSP对等。

著名的校验框架Hibernate Validator强依赖了EL表达式语言技术,所以这就是为何我认为它的学习指数比其“父亲”JSP要高的原因。

API的GAV

<dependency>
    <groupId>jakarta.el</groupId>
    <artifactId>jakarta.el-api</artifactId>
    <version>3.0.3</version>
    <scope>provided</scope>
</dependency>

代表API

  • ELContext
  • ELManager
  • ExpressionFactory
  • Expression、ValueExpression、MethodExpression

EL一般也由Web容器提供实现。当然喽,Web容器也将其实现拆开来了可单独使用,如嵌入式tomcat的实现模块为:org.apache.tomcat.embed:tomcat-embed-el

✌4. JSTL标准标签库

推荐学习指数⭐️

强依托于JSP的存在而存在。

JavaServer Pages Standard Tag Library,JSP标准标签库。他是一个JSP标签集合,封装了JSP应用的通用核心功能。目的同EL有点类似:简化开发且提高可维护性,替代开发者在JSP页面上写的Java代码。

和EL一起它哥俩的出现目的都是为了让开发者不要再在JSP上写Java代码啦,不同的是JSTL必须依托于JSP的存在而存在。
在这里插入图片描述

API的GAV

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>1.2.7</version>
    <scope>provided</scope>
</dependency>

代表API

  • LoopTag(public interface LoopTag extends Tag { ... })
  • SQLExecutionTag
  • LocaleSupport(fmt标签)

用过JSTL的同学可能对standard.jarjstl.jar这两个Jar印象最深,这里做下简单说明:

  • GAV只是api,一般不包含实现(符合Java EE只做规范的理念)
  • standard.jarjstl.jar属于具体实现(web容器一般自己有提供)。如还有Apache的标准实现:org.apache.taglibs:taglibs-standard-impl

✌5. WebScoket

推荐学习指数⭐️⭐️⭐️⭐️

一门2011年才出现的“新”技术,Java亦提供了实现。

WebSocket是HTML5开始提供的一种在单个TCP 连接上进行全双工通讯的协议。而这里聊的WebSocket是Java对其的支持,制定的编码规范。

WebSocket大大改进了服务器/浏览器的交互方式,作为一门新新技术,生命力还是很强的,推荐学习。
在这里插入图片描述
API的GAV

<dependency>
    <groupId>jakarta.websocket</groupId>
    <artifactId>jakarta.websocket-api</artifactId>
    <version>1.1.2</version>
    <scope>provided</scope>
</dependency>

代表API

  • @ServerEndpoint、ServerApplicationConfig、HandshakeRequest
  • @OnOpen、@OnMessage、@OnError、@OnClose

它是构建在http协议之上的全双工通信协议,相较于TCP更加方面,是和Html页面搭建长链接通讯的首选。

✌6. JSF

推荐学习指数⭐️

JavaServer Faces,一种用于构建 Web 应用程序的标准Java框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。

MVC设计模式 (Model-View-Controller)出自于它,使用Facelets声明语言构建视图,并且模型由CDI托管bean表示,控制器由JSF引擎本身负责。
在这里插入图片描述

API的GAV

<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>2.3.2</version>
</dependency>

代表API

  • Facelet、FaceletContext(public abstract class FaceletContext extends ELContext { ... })
  • FacesWrapper
  • FacesRenderer
  • @RequestMap、@ApplicationMap、@ApplicationMap、@RequestCookieMap、RequestParameterMap

总而言之,JSF算是被Struts、Spring MVC这类框架吊打。

✌7. JSON-P

推荐学习指数⭐️⭐️

Java API for JSON Processing,专门用于处理JSON数据的API被纳入JavaEE规范体系。用于使用生成和解析JSON数据中描述的对象模型或流模型来解析,转换和查询JSON数据。看看它的API:

  • Json:所有JSON对象的工厂类(如创建JsonParser、JsonGenerator),提供大量静态方法
  • JsonParser:从流或对象模型中读取JSON数据的基于事件的解析器,如getInt()、getLong()
  • JsonGenerator:一次将JSON数据写入流中一个元素,如write(xxx)、writeNull()

看过我写的Jackson专栏的同学能发现,这和Jackson简直一毛一样,甚至API很大一部分相同或相似。这便就是Java EE提供的用于处理Json的底层API。

API的GAV

<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>1.1.6</version>
</dependency>

代表API

  • JsonReader、JsonWriter、JsonReaderFactory、JsonWriterFactory
  • JsonValue、JsonString、JsonNumber、JsonArray

他是Java EE抽象出来处理JSON的底层 API,对标Jackson-core

✌8. JSON-B

推荐学习指数⭐️⭐️

Java EE 7提供了JSON-P让Java具有了处理Json的能力,但是这么底层的API谁会用?就像Jackson一样如果没有提供ObjectMapper这种自动绑定能力的API的话估计也很少人会用。直到Java EE 8官方貌似才恍然大悟意识到了这一点。

Java API for JSON Binding,实现JSON数据与Java对象之间的绑定。常见的Java primitive types和String类都能够自动绑定,很明显它底层走的JSON-P。

给几个JSON-B的注解你瞧瞧:

  • @JsonbDateFormat
  • @JsonbNumberFormat
  • @JsonbProperty
  • @JsonbVisibility

这套路面熟吧(阅读过我Jackson专栏的同学会觉得很面熟)。

API的GAV

<dependency>
    <groupId>jakarta.json.bind</groupId>
    <artifactId>jakarta.json.bind-api</artifactId>
    <version>1.0.2</version>
</dependency>

代表API

  • Jsonb、JsonbBuilder
  • JsonbSerializer、JsonbDeserializer
  • JsonbProvider

Java EE新增的JSON技术,只能说起晚了也赶晚了。想要“夺回市场”基本没戏。

✍总结

Web应用技术作为Java EE最最最重要的部分,共包含8项具体技术,其中:

  • 1个仍为主流:Servlet
  • 1个还比较重要:WebScoket
  • 1个还在坚挺:EL表达式
  • 其它的5个存在感已非常之弱,连学习的必要性也没有了。相信随着时间的推移,被遗忘就是它们的归宿

本文介绍完了最为重要的Web技术的情况,下文继续为你介绍“非Web相关的技术”情况,那才真叫一个一片狼藉,“哀鸿遍野”。

推荐阅读

在这里插入图片描述

我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签

  • 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
  • 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
  • ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
  • 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
  • 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
  • 🙅🏻‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
  • 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》

在这里插入图片描述

序号 专栏名称 简介
01 【方向盘】-程序人生 程序人生,人生程序
02 【方向盘】-资讯/新特性 IDEA、JDK、Spring技术栈......新特性
03 【方向盘】-IntelliJ IDEA 熟练使用IDEA就相当拥有物理外挂,助你高效编码
04 【方向盘】-Bean Validation 熟练掌握数据校验,减少90%的垃圾代码
05 【方向盘】-日期时间 帮你解决JDK Date、JSR 310日期/其实 的一切问题
06 【方向盘】-Spring类型转换 Spring类型转换-框架设计的基石
07 【方向盘】-Spring static static关键字在Spring里的应用
08 【方向盘】-Cors跨域 关于跨域请求问题,本专栏足矣
09 【方向盘】-Jackson Almost Maybe是最好的Jackson专栏
10 【方向盘】-Spring配置类 专讲@Configuration配置类,你懂的
11 【方向盘】-Spring技术栈 暂无所属小分类的,Spring技术栈大分类
12 【方向盘】-JDK 暂无所属小分类的,JDK技术栈大分类
13 【方向盘】-Servlet Servlet规范、Web相关内容专题
14 【方向盘】-Java EE 从Java EE到Jakarta EE,30年弹指一挥间
15 【方向盘】-工具/提效 开发工具、软件工具,目标是提效
16 【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术
17 【方向盘】-基本功 每个Javaer,都需要有扎实的基本功
... ... ...
99 源代码库 大多数专栏均配有源代码,都在这里
目录
相关文章
|
13天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
16天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
40 4
|
16天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
31 1
|
18天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
36 1
|
21天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
35 3
|
21天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
12 2
|
21天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
22 1
|
21天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
33 1
|
15天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
34 0
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
108 3

热门文章

最新文章

下一篇
无影云桌面