java - 为什么有些 Java EE API 是在 Java SE 中实现的?
问题描述
我最近注意到一些 API 应该是 Java EE 的一部分,但似乎是在 Java SE 中实现的。例如,有 JAX-WS,它是一个 Java EE API,但可以完全在 Java SE 项目中使用。
有什么我做错了吗?有一些来自 Java EE 的 API 开箱即用地在 Java SE 中实现?我在哪里可以找到有关 JSE 中可用的 JEE API 的信息?
解决方案
Java SE API 基本上是 Java 标准库。Java Platform Docs上有一个很好的图表
这里是“基础库”的列表:https ://docs.oracle.com/javase/8/docs/technotes/guides/index.html#langutil
其中包括java.lang
,数学,集合,反射,并发,日志,首选项,io,net ....(请注意,其中许多甚至没有被 Java 社区广泛使用,例如日志 - 其中 slf4j-api 是 de-factor标准)。
然后,还有“集成库”,包括诸如 JDBC(数据库访问)和 JNDI(诸如 LDAP)之类的东西,以及“用户界面库”(以前是 Swing 和 JavaFX,但现在它只回到了 Swing)。
Java EE API包括许多其他东西,如您提到的电子邮件和 JAX-RS,它们扩展了 Java 库,理论上应该在 SE API 之上交互和工作,提供适合企业开发的综合整体。
它们不是由 JavaSE 运行时实现的!
但是,每个 JavaEE API 都可以由独立的组织(或任何有足够空闲时间花在工作上的人)独立实现,并且可以在大多数 Java SE 应用程序中单独使用。这就是为什么有很多实现 Servlet API 的 Servlet 容器(Tomcat、Jetty、GlassFish 和许多其他容器)可用的原因,而其他的不多!
值得注意的是,最近,JavaEE 已正式成为JakartaEE项目。这里有一个可搜索的项目列表。
我还想提一下,OSGi 联盟在OSGi世界中与 JavaEE 并行开发了另一组 API,专注于动态 Java 应用程序的模块化。
最后,作为一个竞争框架,Spring在 Java 世界中相当占主导地位(实际上对 JavaEE 本身的开发产生了很大影响),即使在今天,像Spring Boot这样对初学者友好的项目可能比 JavaEE 本身更受欢迎!
我自己,我喜欢只使用 Java SE、一些 EE API,如 Servlet 和 JDBC (编辑:jdbc 在标准库中!),以及社区驱动的项目(例如Micronaut和Vert.x)很酷的东西,根本不基于任何标准!
总之,Java 世界很大,种类繁多!JavaEE 只是其中的一小部分。
推荐阅读
- java - 用户输入时的地址验证
- java - WebDriver 等到网站完全加载
- android - 如何在自定义标题视图中将焦点移到 Android TV 上?nextFocusRight 不起作用
- java - 预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $
- java - Java中ListenableFuture的默认执行器是什么?
- javascript - 如何通过匹配所有值而不是一个值来过滤对象数组
- javascript - 将列表子项传递给父项
- asp.net-mvc - 如何在asp.net核心的一个解决方案中定义的2个项目中定义(控制器/方法)的路由?
- javascript - 在 localStorage 中存储用户 API 密钥的最佳实践
- android - 如何在下面的 android webview api 19 中使用 chrome DevTools?