当前位置: 首页 > 科技观察

JavaEE技术有几十种,有多少是“活着”的(Web应用技术)

时间:2023-03-13 17:09:55 科技观察

前言大家好,我是方同学(你的蝙蝠侠)如果你不清楚什么是JavaEE,可以先移步这里:什么是JavaEE?科技的发展日新月异。如果你不注意,你可能永远落后。即使是稳定的Spring技术栈也受到了基于GraalVM的QUARKUS等框架的挑战。幸运的是,Spring社区很快推出了SpringNative来响应。作为Javaer,不可能没有听说过JavaEE。比如,至少我听说过广为流传的说法“JavaEE的13项核心技术”,但实际上JavaEE远不止13项技术。通过这张图,你可以领略到JavaEE的“大而全”。自1999年出现至今已有20多年,风云变幻。现在不再是JavaEE的世界,Spring技术栈已经接管并成为实际的标准。本文将盘点JavaEE的几十种技术规范,哪些还比较强?Tips:如果推荐学习指数达到3??,可以认为还是很强的。4??觉得知识点还是比较重要,5??我认为它仍然是主流技术。专栏BATutopia-JavaEE相关下载项目源码:https://github.com/yourbatman/BATutopia-java-ee[NuwaKnife-InitializrProject]访问地址:http://152.136。106.14:8761Java开发软件包(Mac):https://wangpan.yourbatman.cn/s/rEH0提取码:javakit程序员专用网盘上线,开放注册送1G超小容量,助你实践减法:https://wangpan.yourbatman.cn版本协议JavaEE:6,7,8JakartaEE:8,9,9.1另外:以下所有API的GAV坐标都是在JakartaEE中给出的,因为它的GAV命名和分类比旧的JavaEE更标准化,并且更规则且更易于开发人员理解。在版本号方面,使用了javax.*命名空间的所有版本。如果要升级到jakarta.*命名空间,只需要增加版本号+1(GAV不变),非常方便。另外还有一个小约定:如果javax.*命名空间相同,则JakartaEE的GAV主版本号与JavaEE8一致,如果发现主版本号比后者大,这意味着命名空间是新的jakarta.*。建议从JavaEE8(及以后)版本开始使用JakartaEE的GAV,因为放弃JavaEE元素是大势所趋。正文JavaEE技术概述以JavaEE8/JakartaEE8为例,主要包括以下这些技术:分为五类:其中,Web应用技术是Java现在最重要的使用场景。所以,本文就着重于此,谈谈它有哪些技术,哪些技术在今天仍然很强。Part1:WebApplicationTechnologies,共8个规范。这部分放在前面,因为它是开发者最重要、用得最多的部分,也是开发者最熟悉的部分。这种“所有”的可能性都由Servlet来承担……1.Servlet推荐学习索引5Servlet规范绝对是Javaer必须要知道和知道的技术。JavaServlet是运行在Web服务器或应用程序服务器上的程序。它充当来自Web浏览器或其他HTTP客户端的请求与HTTP服务器上的数据库或应用程序之间的中间层。JavaServlet是运行在Web服务器上的Java类,带有支持JavaServlet规范的解释器。Servlet仍然是JavaWeb应用程序开发的主流技术。尽管以SpringWebFlux为代表的响应式编程技术众多,但基于Servlet的SpringMVC仍然很受欢迎,是业务开发的首选。APIGAV:jakarta.servletjakarta.servlet-api4.0.4provided代表API:ServletContextHttpServletHttpFilterRequestDispatcherServlet由web容器(如Tomcat)实现,所以在编译时当你的项目强依赖ServletAPI参与编译时只需要引入这个库即可(scope=provided,表示它参与编译但不参与不打包)。2.JSP推荐学习索引2JSP技术虽然早就出来了,但是由于其强大的历史原因,我想每个JavaWeb开发者都应该对这项技术有一定的了解。不用于使用,仅用于交谈。JSP全称JavaServerPages,是一种动态网页开发技术。之所以叫动态是因为它使用JSP标签在HTML网页中插入Java代码,Java代码放在<%%>标签中。JSP本质上是一个Servlet(都是编译后成为Servlet),主要用于实现JavaWeb应用程序的用户界面部分。那么有了Servlet为什么还需要JSP呢?与纯Servlet相比:JSP可以轻松编写或修改HTML页面,而不必面对大量的println()/writer.write()语句,可读性和可维护性更高。APIGAV:jakarta.servletjakarta.servlet-api4.0.4provided代表API:JspContext、PageContextJspPage、HttpJspPage(publicinterfaceJspPageextendsServlet{...})JspTag显然,JSP规范的具体实现也是由Web容器提供的,开发者99.99%都不需要它的API案例,因此可以理解GAV。3、EL表达式推荐学习索引3EL因JSP而诞生,但又独立于JSP。JSP虽然死了,但是EL作为一种独立的表达语言,可以单独存在。ExpressionLanguage,一种在JSP页面上获取数据的简单方式(只获取数据,不设置数据),旨在简化开发,提高可维护性,替代开发人员在JSP页面上编写的Java代码。EL表达式是JSP2.0引入的新概念,所以有时也称为JSP表达式语言。它是由JSP提出来的,但并不一定要依赖它而存在,而是可以作为一种独立的表达语言技术,其生命周期不等同于JSP。著名的验证框架HibernateValidator强烈依赖于EL表达式语言技术,所以这也是为什么我认为它的学习指数高于它的“父亲”JSP的原因。APIGAV:jakarta.eljakarta.el-api3.0.3provided代表API:ELContextELManagerExpressionFactoryExpression、ValueExpression、MethodExpressionEL一般也是由Web容器实现的。当然web容器也拆解了它的实现,可以单独使用。例如嵌入式tomcat的实现模块为:org.apache.tomcat.embed:tomcat-embed-el4。JSTL标准标签库推荐学习索引1强力支持由于JSP的存在而存在。JavaServerPagesStandardTagLibrary,JSP标准标签库。他是JSP标签的集合,封装了JSP应用程序常用的核心功能。目的有点类似于EL:简化开发,提高可维护性,替代开发人员在JSP页面上编写的Java代码。连同EL,两兄弟出现的目的就是让开发者不再在JSP上写Java代码。不同的是JSTL必须依赖JSP的存在。APIGAV:jakarta.servlet.jsp.jstljakarta.servlet.jsp.jstl-api1.2.7提供代表API:LoopTag(publicinterfaceLoopTagextendsTag{...})S??QLExecutionTagLocaleSupport(fmttag)用过JSTL的同学可能对standard.jar和jstl.jar的印象最深,这里简单说明一下:GAV只是一个api,一般不包含实现(符合JavaEE只做规范的理念)。standard.jar和jstl.jar属于具体实现(web容器一般会自己提供)。比如还有Apache的标准实现:org.apache.taglibs:taglibs-standard-impl5。WebScoket推荐学习索引4是2011年才出现的“新”技术,Java也提供了实现。WebSocket是HTML5提供的一种协议,用于在单个TCP连接上进行全双工通信。我们这里说的WebSocket就是Java对它的支持以及制定的编码标准。WebSocket大大改进了服务器/浏览器的交互方式。作为一项新技术,它的生命力还是很强大的。推荐学习。APIGAV:jakarta.websocketjakarta.websocket-api1.1.2provided代表API:@ServerEndpoint,ServerApplicationConfig,HandshakeRequest@OnOpen,@OnMessage,@OnError,@OnClose是建立在http协议之上的全双工通信协议。与TCP相比,它更方便,是建立长链接与Html页面通讯的首选。6、JSF推荐学习索引1JavaServerFaces,一个用于构建Web应用程序的标准Java框架。它通过提供以组件为中心的方法来开发JavaWeb用户界面来简化开发。MVC设计模式(Model-View-Controller)由此而来,使用Facelets声明式语言构建视图,模型由CDI托管bean表示,控制器由JSF引擎自己负责。API的GAV:jakarta.facesjakarta.faces-api2.3.2代表API:Facelet,FaceletContext(publicabstractclassFaceletContextextendsELContext{...})FacesWrapperFacesRenderer@RequestMap,@ApplicationMap,@ApplicationMap,@RequestCookieMap,RequestParameterMap总而言之,JSF算是打败了Struts、SpringMVC等框架。7.JSON-P推荐学习索引2JavaAPIforJSONProcessing,JavaEE规范体系中包含了一个专门处理JSON数据的API。使用生成和解析JSON数据中描述的对象模型或流模型来解析、转换和查询JSON数据。看一下它的API:Json:一个所有JSON对象的工厂类(比如创建JsonParser,JsonGenerator),提供了大量的静态方法JsonParser:一个基于事件的解析器,从流或对象模型中读取JSON数据,比如getInt(),getLong()JsonGenerator:将JSON数据一次写入流中的一个元素,比如write(xxx),writeNull()看过我的Jackson专栏的同学可以发现这跟Jackson,甚至有很大一部分API相同或相似。这是JavaEE提供的处理Json的底层API。API的GAV:jakarta.jsonjakarta.json-api1.1.6代表API:JsonReader,JsonWriter,JsonReaderFactory、JsonWriterFactoryJsonValue、JsonString、JsonNumber、JsonArray是JavaEE抽象出的处理JSON的底层API,对标Jackson-core。8.JSON-B推荐学习索引2JavaEE7提供了JSON-P让Java有了处理Json的能力,但是谁会用这么底层的API?就像Jackson,如果没有像ObjectMapper这样提供自动绑定能力的API,估计很少有人会用到。直到JavaEE8官方似乎突然意识到了这一点。JavaAPIforJSONBinding,实现JSON数据与Java对象的绑定。可以自动绑定常见的Java原始类型和String类,很明显是用到了底层的JSON-P。看看几个JSON-B注解:@JsonbDateFormat@JsonbNumberFormat@JsonbProperty@JsonbVisibility这套路很眼熟(看过我的Jackson专栏的同学会觉得很眼熟)。API的GAV:jakarta.json.bindjakarta.json.bind-api1.0.2代表API:Jsonb,JsonbBuilderJsonbSerializer,JsonbDeserializerJsonbProviderJavaEE的新JSON技术只能说来得晚了。想要“夺回市场”基本没有用。总结Web应用技术,作为JavaEE最重要的组成部分,一共包含了8项具体技术,其中:1仍然是主流:Servlet1仍然是比较重要的:WebScoket1仍然是强大的:EL表达式其他5的意义存在感很弱,没必要研究。我相信随着时间的流逝,被遗忘是他们的归宿。这篇文章介绍了最重要的Web技术,下面继续给大家介绍“非Web相关技术”。