01.前言

91 阅读9分钟

前言

1.Web技术发展历史

早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户

随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序

于是Sun公司推出了Servlet 技术。你可以把Servlet简单理解为运行在服务端的Java小程序,但是Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet

2.重量级Web容器与轻量级Web容器

Tomcat和Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP服务器的功能,因此Tomcat或者Jetty就是一个“HTTP服务器 + Servlet容器”,我们也叫它们Web容器

其他应用服务器比如JBoss和WebLogic,它们不仅仅有Servlet容器的功能,也包含EJB容器,是完整的Java EE应用服务器。从这个角度看,Tomcat和Jetty算是一个轻量级的应用服务器

3.为什么选择轻量级Web容器

在微服务架构日渐流行的今天,开发人员更喜欢稳定的、轻量级的应用服务器,并且应用程序用内嵌的方式来运行Servlet容器也逐渐流行起来。之所以选择轻量级,是因为在微服务架构下,我们把一个大而全的单体应用,拆分成 一个个功能单一的微服务,在这个过程中,服务的数量必然要增加,但为了减少资源的消耗,并且降低部署的成 本,我们希望运行服务的Web容器也是轻量级的,Web容器本身应该消耗较少的内存和CPU资源,并且由应用本 身来启动一个嵌入式的Web容器,而不是通过Web容器来部署和启动应用,这样可以降低应用部署的复杂度

因此轻量级的Tomcat和Jetty就是一个很好的选择,并且Tomcat它本身也是Spring Boot默认的嵌入式Servlet容器。 最新版本Tomcat和Jetty都支持Servlet4.0规范

4.Web容器对比

名称出品出价Servlet 容器JSP 容器EJB 容器JMS 容器定位
TomcatApache开源免费××普通用在中小型系统和并发访问用户不是很多的业务场景下
JettyEclipse开源免费××与 Tomcat 定位一样,不过比 Tomcat 更加轻量级,体积小,扩展灵活,适用于云原生生态下数以千或万计的 Micro 服务单元的部署
JBossRedHat开源免费×主要应用于 EJB 服务的中小型公司
WebLogicOracle不开源收费用于开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的java应用服务器。比 JBOSS 更加强大和稳定。(银行、金融、电信等领域)
WebShpereIBM不开源收费IBM 集成软件平台。其提供了可靠、灵活和健壮的集成软件。功能齐全强大,主要应用于大型企业的大型项目

5.Jakarta规范

JDBC规范

全称“Java Connectivity Database”,JDBC规范定义了Java应用程序可以对数据库进行的操作包括:连接数据库、执行SOL语句、执行存储过程等。通过这些操作我们可以向各种关系数据发送SOL语句会更容易,只需要按照JDBC API来编写一个程序即可,这样JDBC对于程序员而言是API,而对于实现与数据库连接的服务提供商而言是接口规范

JNDI规范

全称“Java naming and director interface,Java命名及目录接口”,JNDI规范提供了查找和访问各种命名和目录服务的功能,使用者可以在支持JNDI的服务器中统一管理资源,如数据库资源。JNDI避免了程序与资源之间的紧耦合,使应用更加易于配置,便于部署。例如,如果将JNDI用于数据源,那么就不用关心具体的数据库后台是什么,JDBC驱动程序是什么,JDBC URL格式是什么,访问数据库的用户名和密码是什么等一系列问题。只需要在实现这个规范的J2EE容器 中定义一个数据源,然后通过这个数据源就可以访问后台数据库

EJB规范

全称“enterprise Java beans,企业级 Java Beans”,EJB提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发,它定义一个标准自动处理,如数据持久化、事务集成、安全对策等问题,为后台业务提供了一个标准方式。EJB规范讨论了4种对象类型:无状态会话Bean、有状态会话Bean、实体Bean、消息驱动Bean。Stateless Session Bean是一类不包含状态信息的分布式对象,允许来自多个客户端的并发访问。无状态会话Bean没有资源集约性,访问的实例变量内容页不会被保存

RMI规范

全称“remote method invocation,远程方法调用”,RMI是一种远程过程调用机制,能够让某个Java虚拟机上的对象调用另一个 Java虚拟机中的对象的方法,它使得客户机上运行的程序可以调用远程服务器上的对象。我们可以面向该接口编程,而不需要了解底层如何实现调用通信的原理,例如不用关心对象如何序列化,调用协议等

XML规范

全称“extensible markup language,可扩展标注语言”,XML定义了一种与平台无关的通用数据交换格式。通过XML能实现跨平台的通信,XML是平台无关的数据表示(现在都用JSON来代替)

Java Mail规范

Java Mail提供了电子邮件的开发接口,可以方便地执行一些常用的邮件传输。Java Mail包中用于处理电子邮件的核心类包括Session、Message、Address、Authenticator、Transport、Store、 Folder等。例如,Session定义了一个基本的邮件会话,它需要从Properties中读取邮件服务器、用户名和密码等信息

Java Servlet规范

Servlet是服务端的Java应用程序,可以生成动态的页面,在客户端Session中保存客户的数据。它定义了动态生成HTML、XML或其他格式文档的Web网页的技术标准

Java ILD/CORBA规范

全称“Java Interface definition language/common object request broker architecture,Java接口定义语言/公共对象请求代理体系结构”,CORBA是一个分布式的面向对象应用架构规范,定义了分布式对象如何实现互操作。CORBA对象的接口使用IDL定义,在IDL中定义了对象的类型,对象的方法和引用参数以及对象方法可能返回的异常结果,这样,在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起

JAF规范

全称“JavaBeans activation framework,JavaBeans 激活框架”,JAF是一个专用的数据处理框架,用于封装数据,并作为应用程序访问和操作数据的接口。JAF主要作用在于让Java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。应用程序通过JAF提供的接口可以完成:访问数据源中的数据、获取数据源的数据类型、获知可对数据进行的操作。用户执行操作时,自动创建该操作的软件部件的实例对象。Java Mail利用JAF处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者从Java对象转换为MIME字节流。不过,大多数应用都不需要直接使用JAF

JMS规范

全称“Java message service,Java 消息服务”,JMS是Java平台上有关面向消息中间件的技术规范。JMS对象模型包含6个要素:连接工厂,JMS连接、JMS会话、JMS目的、JMS生产者和消费者、JMS消息类型(点对点、发布/订阅)。ActiveMQ用于实现该规范

JSP规范

全称“Java Server pages,Java服务器页面”,JSP页面由HTML代码和嵌入其中的Java代码组成。它将网页逻辑与网页设计显示分离,支持可重用的基于组件的设计,使Java开发变得快速、容易。JSP是一种动态页面技术,主要目的是将表示逻辑从Servlet中分离出来

JTA规范

全称“Java transaction API,Java 事务处理接口”,在Java EE应用中,事务是一个不可或缺的组件模型,它保证了用户操作的ACID(即原子性、一致性、隔离性、持久性)属性。对于那些跨数据源(例如多个数据库,或者数据库与JMS)的大型应用,则必须使用全局事务JTA。应用系统可以由JTA定义的标准API访问各种事务监控,JTA为Java EE平台提供了分布式事务服务,它隔离了事务与底层的资源,实现了透明的事务管理方式

JTS规范

全称“Java transaction service,Java 事务服务”,JTS是一个组件事务监视器。JTS是CORBA OTS事务监控的基本实现。JTS规定了事务管理器的实现方式。JTS事务管理为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务

总结

以上13项便是J2EE(也称为Jakarta EE)的13项规范标准,它们都是接口定义,Java程序员只需要面向这些接口编程就可以,将对应厂商实现的类库加载即可,不需要单独学习不同厂商的类库使用,这便给Java程序员提供了面向接口编程的好处:高度解和定制化,就如同我们直接使用JDBC的接口编程,不需要在自己的代码中体现对MySOL、Oracle等数据库的连接、查询、关闭等细节性的代码,出现的都是JDBC的规范,只需要在代码中创建不同的厂商的数据源即可

6.Servlet规范详解

省略

7.使用idea新建一个Servlet项目

版本

  • idea:2021
  • jdk:8
  • Tomcat:9
  • Servlet:4.0

新建流程

a9b0caef1caa1ce2bde5bad98866d38b.png 488c3a17082d58cb2d09073b0f788cd2.png f7fe736436023d3690c0004444f6855d.png 2d901fec9198454535dfd406f2460d19.png 828692f1dcbc65f09fdf07d697bb4c33.png b21fabbb0c2b0211e56be8eecaecd808.png bfb92bde9de597b5167d705fa16584a1.png 3b8e5ee048d29ef125c3e2ea08aefa84.png 4524789207412847f97f21888c8e7b18.png 80b87fe843edd760ba6085eaf7cf22f9.png eaf8fd104bf6ce38002226ba92e47afb.png 672d0d88e6e605800df29ca5c156914a.png