MrYe讲解Web服务器端技术
发表于 2019-06-20 19:53
在过去的半个世纪里,计算机软件的作用发生了很大的变化。硬件性能的巨大提高,计算机体系结构的巨大变化,存储容量的急剧增加,以及输入和输出方法的广泛多样化,使得基于计算机的系统更加先进和复杂。Web应用程序是计算机软件的一个子集,在此期间也在迅速发展。从企业早期的黄页,到各种移动应用和云服务,都离不开Web技术的不断迭代升级。从体系结构级别来看,大多数早期应用程序都是C/S结构。C/S结构体系主要分为两层。客户机实现用户显示和部分逻辑,服务器实现数据存储和部分逻辑。当面向对象的外观出现时,应用程序开始转向三层结构,即表示层显示用户界面,域层实现业务逻辑,数据层访问数据。这种分层允许不同级别的开发人员关注各自部分的技术,并通过服务接口相互调用。随着20世纪90年代Web的出现,应用程序结构开始从C/S结构向B/S结构转变。Web应用程序的兴起也带来了Web技术的巨大发展。Web技术的发展也遵循分层的思想。分层实现了层与层之间的解耦和重用,层与层之间的结构越来越清晰,实现了标准化。下面我们将分析Web开发阶段的一些主要Web技术。
在Web的早期阶段,静态HTML信息是通过浏览器从浏览器请求的。它最初用于科学家之间共享和传递信息,后来被用于促进企业信息。此时,静态服务器直接存储在web服务器上,浏览器通过HTTP协议请求服务器,服务器直接将静态页面返回给浏览器。
随着技术的发展,CGI (Common Gateway Interface,通用网关接口)的出现,使得动态信息能够在Web上显示出来。CGI定义了Web服务器与程序之间通信的接口标准,使Web服务器可以通过CGI接口执行程序,完成对动态请求的处理,最后拼接成HTML代码返回给Web服务器。这种模式,简单的应用程序也可以应付,在面对比较复杂的应用程序时,可读性和维护性是一个比较大的问题,而CGI程序面临较大的并发性,性能并不好。
1994年,PHP语言诞生了。PHP可以将程序嵌入HTML代码中以执行。它不仅能更好地组织web应用程序的内容,而且比外部程序执行得更有效。后来,Apache组成立了,Apache这个Web服务器领域的老手发布了。由于其安全性和跨平台性,成为当时Web服务器的最佳选择。PHP与Apache的结合以其开源、低成本、开发周期短等特点成为构建动态网站的首选。直到今天,相当多的web应用程序仍然使用它们的组合——LAMP (Linux + Apache + Mysql + PHP)。
作为web服务器,Apache为运行PHP应用程序提供了两种模式,一种是mod_php模式,另一种是mod_fastcgi模式。mod_php模式主要通过Apache PHP模块解析PHP程序。执行PHP之后,整个HTML页面就完成了。mod_fastcgi模式实际上是CGI模式,但是CGI已经被FastCGI所取代。当CGI处理一个请求时,它将启动一个CGI进程,CGI进程将在执行后退出CGI进程。资源利用率不高,效率低。FastCGI不需要每次都重新启动。它将在请求到达之前启动,然后通过响应逻辑管理这些CGI进程。在执行请求之后,它不会退出CGI进程,这样会快很多。
另一方面,Java的第一个版本于1996年发布。作为一种面向对象的编程语言,Java语言可能更符合这个时代的业务场景,并逐渐成为应用最广泛的开发语言。实际上,从本质上讲,编程语言是一种工具,每种工具都有自己的使用场景和使用方法。作为一名Java程序员,Java语言的特点总结如下:
面向对象:开发应用程序就像使用编程语言描述“应用程序”所在的业务场景。面向对象和面向流程是描述这些场景的方式。当然,我们不能涵盖“应用程序”所在的所有场景。面向流程的流程是直接构造您在编程语言中考虑的业务场景的操作流程。面向对象,首先抽象业务场景中涉及的各种元素(对象),然后通过组合每个对象的动作来模拟业务。场景。显然,面向过程的开发将更快、更直接,面向对象的开发将更清晰、更健壮。从软件工程的角度来看,面向对象的开发周期可能更长,但是代码重用更好,应用程序可伸缩性更好,更适合构建周期更长、结构更复杂的系统。
JDK (java开发工具包):JDK是用于java语言的开发工具包。它不仅提供了Java开发环境、编译环境,而且还提供了一个丰富的类库。使Java开发更容易、更方便。
JVM (Java虚拟机):JVM是Java语言的运行时环境,就像应用程序进程在计算机系统上运行一样。JVM是针对计算机的应用程序,可以有不同的系统实现,这使得Java平台独立,编译一次,然后到处运行。
JVM有自己的内存结构,包括一组字节码指令集、一组寄存器和用于存储的堆栈结构。当Java程序运行时,它通过JVM管理Java的运行时内存。JVM提供了许多配置参数,这些参数根据特定Java应用程序的特性进行动态调优。
多线程:Java提供了丰富的多线程工具和模型,使Java应用程序能够在多线程环境中处理开发。
面对企业应用程序的快速发展,Sun发布了J2EE(后来改名为JavaEE,现在叫做Jakarta EE), J2EE是一套企业级的应用程序标准,包括一系列用于构建应用程序的核心组件,如JDBC、JSP、Servlet、EJB等。在这些标准化组件的支持下,大规模应用程序的开发得到了极大的支持,JavaEE继续发展,成为企业级应用程序的解决方案。
下面让我们从J2EE角度出发,重新梳理一下这些核心技术:
Servlet是Java平台的CGI技术,Servlet接口定义了初始化、执行、销毁方法,Java程序通过实现Servlet接口,可以处理对应路径的请求,我们看到Servlet的service方法接收的是ServletRequest和ServletResponse,这两个参数就是Servlet的请求和响应对象。每当有一个HTTP请求到来,Web服务器(也叫容器)会为每个请求启动一个线程,将请求数据、响应数据封装成上面的两个对象去调用相应的Servlet的service方法,Servlet执行完成后,Web服务器再将ServletResponse解析之后,封装成HTTP的响应返回回去。
相比于CGI程序,Servlet应用程序使用Java虚拟机管理的Java线程来执行逻辑,比CGI创建进程的方式节省时间和资源。Servlet应用本身不能直接运行,需要部署在Web服务器中,如Tomcat。Tomcat可以实现HTTP协议与Servlet应用程序的通信;Tomcat维护着线程池,并会为每个请求分配一个线程;Tomcat控制着Servlet的生命周期,包括实例、初始化、调用和销毁等。
与Apache相比,Apache是一个可以处理静态资源的web服务器。Tomcat还能够处理web服务器上的静态资源,但是它的优势在于运行servlet应用程序。许多web体系结构现在都部署Apache(正在被Nginx取代)来处理静态资源,而动态请求则由Apache转发到Tomcat进行处理。
JSP实际上本质上是Servlet技术,因为PHP可以实现在HTML代码中编码,从而使构建页面的逻辑更加清晰,所以Java Servlet也实现了这一点,允许Java代码嵌入HTML,并生成JSP。Jsp实际运行,并由Servlet容器编译成Servlet代码。
JavaBean是用于数据封装的组件。在开发JSP应用程序时,使用JavaBean技术将业务逻辑与显示逻辑分离,使用数据、处理逻辑、数据库访问对象或其他逻辑代码将Bean对象嵌入JSP页面。打开,简化Jsp页面逻辑,增强Jsp开发的可读性,实现功能重用。定义javabean的类通常遵循某种格式。它们需要无参数构造、财产私有化,并为财产提供getter和setter方法。JavaBean技术是一个面向对象的应用程序。
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。可以为多种关系型数据库提供统一访问。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行。
XML(可扩展标记语言)是一种类似于HTML的可扩展标记语言。它的标记是定制的。它的目的是传输和存储数据。HTML用于描述web文件。描述标记语言,HTML设计的核心是数据的显示。
RMI(远程方法调用)是一个用于实现远程过程调用的应用程序编程接口。它允许Java程序调用网络中另一台计算机上的Java对象。效果就像呼叫机器一样。同样的方式。使用Java对象的序列化,对象数据被转换成字节流以便在网络中传输。当远程调用协议调用远程方法时,字节流通过反序列化转换为对象数据,然后调用该方法。
SPI(服务提供者接口)是一种对服务接口和服务实现进行分类的机制,以实现去耦合,并大大提高程序的可扩展性。引入服务提供者是引入SPI接口的实现,并通过本地服务注册发现来获取细节。实现类,从而完成真正的服务调用关系。
JNDI (Java命名和目录接口)是一个标准的Java命名系统接口。JNDI通过实现不同的访问提供者接口JNDI服务提供接口(SPI)来提供统一的客户机API。JNDI API被映射到特定的命名服务和目录系统,以便Java应用程序可以与这些命名服务和目录服务进行交互。
JMS (Java消息服务)是Java平台中用于消息中间件的API。它类似于JDBC和各种关系数据库之间的关系。它通过JMS为异步通信生成、发送和接收消息。
JTA (Java Transaction API)允许应用程序执行分布式事务处理,支持多台计算机访问和更新网络资源。JTA和JTS (Java事务服务)为J2EE平台提供分布式事务服务。分布式事务由事务管理器和多个网络资源组成。与JDBC事务相比,JDBC事务只支持一个数据库连接;JTA事务可以包括多个资源、JDBC连接、JMS、EJB和其他资源。
JPA (Java Persistence API)用于描述Java对象和关系表之间的映射,并将运行时实体对象持久化到数据库中。JPA不是一个框架,它是一个用于Java应用程序以统一的方式访问持久性层的API,并且是一个ORM规范。我们使用的Hibernate和MyBatis框架是JPA规范的实现。
EJB (Enterprise JavaBean)是构建企业级服务器应用程序组件的标准。设计目标和核心应用程序是部署能够简化企业应用程序开发的分布式应用程序。EJB规范为实现业务逻辑、集成数据持久性、分布式事务处理、基于jms的事件驱动、基于jndi的名称和空间管理、基于rmi的远程调用和应用服务器的企业应用程序开发人员提供了一套完整的标准解决方案。并行软件组件部署以及如何将EJB部署到EJB容器中。
自J2EE诞生以来,EJB一直被认为是J2EE的核心,但今天,越来越多的人开始意识到EJB开发了太多的规范,但它限制了其应用程序构建的灵活性。在J2EE失败的场景中,我们发现这些应用程序不需要过于复杂的设计,历史经验告诉我们,最成功的标准都是从实践中开发出来的。
在整个J2EE的开发过程中,J2EE在许多方面都取得了巨大的成功。它成功地从标准中制定标准,大大提高了企业软件的开放性。后来,各种“轻量级”容器的出现也是由于J2EE规范的指导原则。J2EE是企业应用程序的一组标准,但是现在这些开源的轻量级解决方案可以更好地组织当今的企业应用程序,因为往往我们不需要整个J2EE。
评论 (0人参与)
最新评论