WEB应用服务器TOMCAT

   日期:2024-12-25    作者:02qb3 移动:http://oml01z.riyuangf.com/mobile/quote/13690.html

目前主流的 Web 服务后端架构包括 单体架构,SOA 架构,微服务架构三种

单体服务是整个应用程序作为一个单一单元运行的架构,SOA是一种通过服务实现松散耦合的架构,而 微服务架构是一种通过小型自治服务实现灵活、可维护的架构。选择适当的架构取决于项目的规模、复 杂性和需求

单体架构

单体架构又称单体服务(Monolithic Architecture

单体服务是一种软件架构风格,其中整个应用程序被构建为一个单一的、紧密耦合的单元。在单体架构 中,所有的功能模块和组件通常都在同一个代码库中,并以同一个进程运行。这种模式适用于小型和中 型项目,因为开发和维护相对简单。然而,随着应用程序的规模和复杂性的增加,单体应用可能变得难 以扩展和维护

SOA 架构

SOA 架构(Service-Oriented Architecture

SOA是一种面向服务的软件架构风格,其主要思想是将一个应用程序划分为一系列相互独立的、松散耦 合的服务。这些服务是独立开发、部署和升级的,通过定义明确的服务接口进行通信。SOA强调服务的 可重用性,服务可以通过网络调用进行交互,提高了系统的灵活性和可维护性。SOA并不规定特定的实 现细节,因此可以采用多种技术来实现服务之间的通信

微服务架构

微服务架构(Microservices Architecture

微服务架构是一种构建应用程序的方法,其中应用程序被拆分为一组小型、自治的服务。每个服务都有 自己的数据存储,可以使用不同的技术栈,并通过轻量级的通信机制(例如HTTP/REST或消息队列)相 互通信。微服务架构强调独立开发、部署和运行每个服务,以及容错和弹性。这种架构使得团队可以使 用不同的技术栈和语言,更容易实现持续集成和持续交付

微服务的特点

  • 应用被分解为小型、自治的服务

  • 每个服务都有自己的数据库,可以使用不同的技术栈

  • 服务之间通过API进行通信,通常是通过HTTP/REST或消息队列

  • 强调独立部署、自动化和容错

微服务的优点

  • 高度灵活性,可以独立开发、部署和扩展每个微服务

  • 可以采用多语言和技术栈

  • 提供更好的可伸缩性和容错性

微服务的缺点

  • 部署和管理微服务系统可能会更加复杂

  • 服务之间的通信可能引入一些挑战,如一致性和事务管理

常见的微服务框架

Dubbo

  • 阿里开源贡献给了ASF,目前已经是Apache的顶级项目

  • 一款高性能的Java RPC服务框架,微服务生态体系中的一个重要组件

  • 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信

  • 内部协调使用Zookeeper,实现服务注册、服务发现和服务治理

Spring cloud

  • 一个完整的微服务解决方案,相当于Dubbo的超集

  • 微服务框架,将单体应用拆分为粒度更小的单一功能服务

  • 基于HTTP协议的REST(Representational State Transfer 表述性状态转移)风格实现模块间通信

Java 组成

Java 包含以下内容

  • 语言、语法规范。关键字,如: if、for、class等

  • 源代码

  • source code 依赖库,标准库(基础)、第三方库(针对某些应用)。底层代码太难使用且开发效率低,封装成现成的库

  • JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上

Java 跨平台的实现

跨平台的不是JAVA程序,而是JAVA 程序的运行环境 JVM

Java 动态网页技术

servlet

Servlet(Serverlet)是Java编程语言的一种服务器端程序,主要用于扩展Web服务器的功能。Servlet运 行在Web服务器中,接收并响应来自客户端(通常是Web浏览器)的请求

如果要用 Serviet 构建 Web 应用,则需要将 Html 标签嵌套在 Java 的逻辑代码中,而 Html 代码又要频 繁迭代,相应的,需要重新编译,这种开发模式非常不方便

JSP

JSP(Java Server Pages)是一种用于创建动态Web页面的Java技术。与Servlet一样,JSP也是在服务器 端执行的,但其主要目标是简化Web页面的开发,允许开发者在HTML页面中嵌入Java代码

以下是一些关键的JSP特性和与Servlet的区别

  • 页面描述语言: JSP使用一种称为JSP标记的页面描述语言,允许开发者在HTML页面中嵌入Java代 码片段。这些标记以<% %>为界,使得在页面中嵌入动态内容变得更加容易

  • 易读性:JSP的语法更接近HTML,因此对于前端开发者来说更易读易写。开发者可以在HTML页面 中嵌入Java代码,而无需像Servlet那样在Java代码中嵌套HTML字符串

  • 简化开发:JSP旨在简化动态Web页面的开发,使得将Java代码嵌入HTML更加直观,相对于 Servlet,JSP提供了更高层次的抽象

  • 隔离逻辑和展示:Servlet通常在Java代码中生成HTML,而JSP允许在HTML中插入Java代码。这有 助于更好地隔离逻辑和展示层

  • 自定义标签库:JSP允许开发者定义和使用自定义标签库,以便将特定的逻辑模块化,提高代码的 可重用性

  • 独立性:Servlet是一个独立的Java类,而JSP页面实际上在首次访问时被Servlet容器翻译成Java代 码并编译成Servlet。因此,从本质上说,Servlet和JSP最终都是以Servlet的形式在服务器上执行

虽然Servlet和JSP在某些方面有区别,但它们通常会一起使用。Servlet用于处理业务逻辑,而JSP用于呈 现用户界面。在实际的Web应用中,Servlet和JSP经常一起协同工作,以达到更好的代码组织和可维护性

MVC

如果过度使用jsp技术,jsp中既写有大量的java代码,也有html,甚至还有javascript等,造成难以维 护,难以实现前后端分工协作,后来java 的web开发借鉴了MVC(Model View Controller )开发模式

MVC(Model-View-Controller)是一种设计模式,用于组织和管理软件应用程序的结构。它将应用程序 分为三个主要组件,分别是模型(Model)、视图(View)和控制器(Controller

MVC的主要目标是分离应用程序的关注点,使得每个组件可以独立地变化而不影响其他组件。这种分离 有助于提高代码的可维护性、可扩展性和复用性。常见的应用场景包括Web开发框架、图形用户界面 (GUI)应用程序等

  • 模型(Model:模型表示应用程序的数据和业务逻辑。它负责处理数据的存储、检索和更新,同 时包含应用程序的业务规则。模型通常不包含有关用户界面或展示方式的信息,而是专注于处理数据

  • 视图(View:视图负责用户界面的呈现和展示。它接收来自模型的数据,并将其以用户友好的方 式显示。视图不负责处理数据,而只关注展示和用户交互

  • 控制器(Controller:控制器充当模型和视图之间的协调者。它接收用户的输入(通常来自用户 界面,然后根据输入更新模型和/或视图。控制器负责处理用户请求、更新模型的状态以及选择 适当的视图进行展示

REST

REST是一种基于网络的软件架构风格,代表"Representational State Transfer"(表现层状态转移)。 它是由Roy Fielding在他的博士论文中提出的,并成为构建分布式系统和网络应用程序的一种设计原则

  • REST提倡使用统一的接口对系统进行分层,以提高系统的可见性、简化架构,并支持系统的演化。 REST的统一接口包括资源标识、资源操作(通过标准HTTP方法如GET、POST、PUT、DELETE 等)和资源表现层的自描述性

  • REST通常使用HTTP协议作为通信协议,因此RESTful服务可以通过标准的HTTP方法和状态码来进 行通信,使其更易于理解和实现。RESTful架构已成为构建现代Web服务和API的一种常见选择

为了使数据展现过程更加直接,并且提供更好的用户体验,对MVC模式进行改进。首先从浏览器发送 AJAX( Asynchronous JavaScript and XML 异步的 JavaScript 和 XML)请求,然后服务端接受该请求 并返回JSON数据返回给浏览器,最后在浏览器中进行界面渲染

如果将浏览器这一端视为前端,而服务器那一端视为后端的话,可以将以上改进后的MVC模式简化为以 下前后端分离模式

REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以, 以JSON格式编写的REST风格的API具有简单、易读、易用的特点

编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极 大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。前端拿到数据只负责展 示和渲染,不对数据做任何处理。后端处理数据并以JSON格式传输出去,定义这样一套统一的接口,在 web,ios,android三端都可以用相同的接口,通过客户端访问API,就可以完成通过浏览器页面提供的 功能,而后端代码基本无需改动

JDK

JDK 和 JRE

JRE(Java Runtime Environment)和 JDK(Java Development Kit)是Java平台中两个不同但相关的组 件,它们之间有以下关系

  • JDK包含JRE: JDK是Java开发工具包,它是Java开发的完整包。JDK包括了JRE,以及用于Java开发 的一系列工具和库,如编译器(javac)、调试器(jdb)、文档生成器(javadoc)等。因此,可 以说JRE是JDK的一个子集

  • JRE用于运行Java程序: JRE是Java运行时环境,提供了在计算机上运行Java应用程序所需的所有组 件。它包括Java虚拟机(JVM)、Java类库、Java命令行工具和其他支持文件。当用户仅需要运行 Java程序时,安装JRE就足够了

  • JDK用于开发和运行Java程序: JDK不仅包含了JRE,还包含了用于开发Java应用程序的工具和库。 开发人员使用JDK中的工具编写、编译和调试Java代码。JDK是面向Java开发人员的完整工具包,而 JRE主要面向终端用户,用于执行Java应用程序

总体而言,JDK是适用于Java开发的完整套件,包含JRE和其他开发工具,而JRE则是仅包含运行时环境的 一部分。如果你只是希望运行Java程序,安装JRE就足够了。如果你要进行Java应用程序的开发,那么你 需要安装JDK

JVM 的各种版本

Java虚拟机(JVM)有多个实现版本,由不同的公司或组织提供。

其中HotSpot是官方的Oracle实现,而其他实现通常由不同的组织或公司提供,以满足不同场景和需求 的要求。每个JVM实现可能有其独特的特性和优化,开发人员可以根据应用程序的要求选择合适的JVM

以下是一些常见的JVM版本

HotSpot JVM (Oracle)

HotSpot是由Oracle提供的官方JVM实现,是当前最广泛使用的Java虚拟机。它包含了即时编译器(JIT) 和垃圾回收器,被设计用于提供高性能的Java运行环境

OpenJ9 (Eclipse Adoptium)

OpenJ9是Eclipse Adoptium项目(之前称为AdoptOpenJDK)提供的一种JVM实现。它致力于提供高性 能、低内存占用的Java运行时环境,并支持多种平台

GraalVM (Oracle)

GraalVM是由Oracle提供的一种创新性的JVM实现。它包括即时编译器(Graal)和支持多语言运行的能 力。GraalVM不仅可以运行Java程序,还可以运行其他编程语言的程序,如JavaScript、Python等

Zing JVM (Azul Systems)

Zing JVM是由Azul Systems提供的专注于大内存和高吞吐量的JVM。它采用了C4垃圾回收器,专为处理 大堆内存场景而设计

IBM J9 JVM (IBM)

IBM J9是IBM提供的JVM实现,广泛用于IBM的Java产品中。它以优化的垃圾回收和运行时性能而闻名

Oracle JDK 版本

需要去官网下载包进行安装

 
Open JDK

OpenJDK(Open Java Development Kit)是一个由自由和开放源代码社区维护的、基于Java平台的开 发工具包。它是由Sun Microsystems(现在是Oracle Corporation)在2006年向开源社区发布Java源代 码后诞生的,其包含了Java编程语言的所有核心类库、Java虚拟机(JVM)和其他工具,使开发者能够构 建和运行Java应用程序

OpenJDK对于Java开发者和社区提供了一个免费、开源的Java平台实现,推动了Java生态系统的发展和 创新。在许多Linux发行版和其他开源项目中,OpenJDK已成为默认的Java实现

Tomcat 介绍

Tomcat(全称为Apache Tomcat)是一个开源的、轻量级的应用服务器,由 Apache 软件基金会开发 和维护,它实现了 Java Servlet、Java Server Pages(JSP)和 Java Expression Language(EL)等 Java EE 规范,并提供了一个运行这些 Web 应用程序的环境,在使用Tomcat 时,将 Java Web 应用程序(包 括Servlet、JSP等文件)部署到 Tomcat 服务器中,然后通过 HTTP 协议访问这些应用程序,Tomcat提 供了一个简单而强大的方式来托管和运行Java Web应用程序

Tomcat 具有以下一些特点

  • Servlet容器:Tomcat是一个Servlet容器,负责处理和执行Java Servlet。Servlet是一种用Java编写 的服务器端程序,用于处理Web请求和生成动态Web内容

  • JSP支持:Tomcat还支持JavaServer Pages(JSP,一种将Java代码嵌入HTML中的技术,用于创 建动态Web页面

  • 轻量级:Tomcat被设计为轻量级的应用服务器,易于安装和配置。它专注于提供基本的Servlet和 JSP支持,而不像一些其他应用服务器那样包含大量的附加功能

  • 开源:Tomcat是开源软件,可以免费使用,并且其源代码是开放的,允许用户根据需要进行修改 和定制

  • 连接器支持:Tomcat支持多种连接器,可以与不同的Web服务器进行集成。最常见的是与Apache HTTP服务器一起使用的AJP(Apache JServ Protocol)连接器

  • 管理工具:Tomcat提供了Web-based管理工具,允许管理员轻松地配置和监控Tomcat服务器。这 包括一个Web界面,可以用来管理Web应用程序、虚拟主机、连接器等

  • 安全性:Tomcat内置了一些安全特性,包括对SSL/TLS的支持,以及一些安全的配置选项,帮助保 护Web应用程序免受攻击

  • 跨平台性:Tomcat是跨平台的,可以在不同的操作系统上运行,包括Windows、Linux、和 macOS等

Tomcat 安装

 

Tomcat 组成

 

tomcat 和 catalina 的关系

Tomcat 的核心分为三个部份

  • Web 容器:用作处理静态页面

  • JSP 容器:把 jsp 翻译成一般的 servlet

  • catalina:是一个 servlet 容器,用于处理 servlet

Tomcat的servlet容器在4.X版本中被craig McClanahan ( Apache struts 项目的创始人,也是 Tomcat 的 Catalina 的架构帅 ) 重新设计为catalina,即 catalina 就是 servlet 容器

Catalina 这个名字来源于美国加利福尼亚州圣卡塔利娜岛(Santa Catalina Island,是一个风景优美 的度假胜地,servlet 运行模块的最早开发者 craig Mcclanahan 因为喜欢 catalina 岛,故以 catalina 命 名他所开这个模块,另外在开发的早期阶段,Tomcat 是被搭建在一个叫 Avalon 的服务器框架上,而 Avalon 则是 catalina 岛上的一个小镇的名字。

Tomcat 组件

每一个组件都有一个 Java 类来实现,在配置文件中通常用 className 来指定

组件说明

组件说明Server服务器,Tomcat 运行的进程实例,一个Server中可以有多个service,但通常就一 个Service服务,用来组织Engine和Connector的对应关系,一个service中只有一个EngineConnector连接器,负责客户端的HTTP、HTTPS、A JP等协议连接,一个Connector只属于某 一个EngineEngine引擎,用来响应并处理用户请求。一个Engine上可以绑定多个ConnectorHost虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分Context应用的上下文,配置特定url路径映射和目录的映射关系:url => directory

组件分类

类别说明顶级组件Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要 产生冲突服务类组件Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包 含一个Engine连接器组件Connector,有HTTP(默认端口8080/tcp,HTTPS(默认端口8443/tcp, A JP(默认端口8009/tcp)协议的连接器,A JP(Apache Jserv protocol)是一种基于 TCP的二进制通讯协议容器类Engine、Host(虚拟主机,Context(上下文件,解决路径映射)都是容器类组 件,可以嵌入其它组件, 内部配置如何运行应用程序内嵌类可以内嵌到其他组件内,valve,logger,realm,loader,manager等。以logger举 例,在不同容器组 件内分别定义集群类组件listener、cluster

常用配置项

 

/usr/local/tomcat/conf/web.xml

/usr/local/tomcat/conf/web.xml 文件是 Apache Tomcat 中用于配置Web应用程序的部署描述符 (Deployment Descriptor)文件,采用 XML 格式。在这个文件中,可以配置许多与 Web 应用程序相 关的设置。以下是一些常见的配置项及其含义

 

/usr/local/tomcat/conf/server.xml

/usr/local/tomcat/conf/server.xml 文件是 Apache Tomcat 中的主要配置文件之一,用于配置 Tomcat 服务器的全局设置、连接器(Connectors)、虚拟主机(Virtual Hosts)等。以下是一些 server.xml 文件中可能包含的主要配置项及其含义的简要解释

 
 

日志配置

 

应用部署

Tomcat 部署应用有三种方式

以文件或war 包直接部署

将应用文件夹或 war 包文件直接复制到 tomcat 的 webapps 目录下,这样 tomcat 启动的时候会将 webapps 目录下的文件夹或 war 文件的内容当成应用部署。这种方式最简单且无须书写任何配置文件

编辑 /usr/local/tomcat/conf/server.xml 配置文件,添加 Context 标签

在 tomcat 的 server.xml 配置文件中的 Host 节点下增加 Context 子节点,配置域名,文件路径等

在 /usr/local/tomcat/conf/[Engine]/[Host]/ 目录下创建独立配置

在该目录下新建 xml 文件,文件名为应用名,然后在配置文件中添加 Context子节点,配置域名,文件 路径等

默认项目配置

 
 

默认端口和默认主页

 

可远程停止服务的端口

 
 

部署独立域名的WEB服务

 

以 war 格式压缩包部署

 

部署 Jpress 开源项目

 

以 jar 包部署 halo 开源项目

 

默认应用管理


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号