一、Tomcat先容
1.1、Tomcat是什么
Tomcat(全称Apache Tomcat)是一个开源的Web应用服务器,专门用于运行Java编写的网站和Web应用步伐。它是由Apache Software Foundation开发和维护的,能够实现Java Servlet、JavaServer Pages (JSP) 等Java技术规范,是开发和摆设Java Web应用的常用选择。
Tomcat之所以被广泛使用,重要是由于它兼具轻量级和功能强盛的特点。作为Servlet容器,Tomcat负责管理Servlet的生命周期,从初始化到销毁,同时支持多线程处理惩罚多个并发请求,确保高效处理惩罚HTTP请求。另外,Tomcat还支持JSP技术,允许开发者在HTML页面中嵌入Java代码,动态生成网页内容。
Tomcat的历史可以追溯到1999年,当时由Sun Microsystems捐赠给Apache软件基金会,成为Jakarta项目的一部分,并渐渐发展成为今天的独立项目。这一历史配景使得Tomcat不仅在技术上具有深厚的积累,同时也拥有强盛的社区支持。对于开发者来说,无论是初学者照旧专业开发人员,Tomcat都提供了一个稳定且易于上手的平台,便于构建和扩展各种类型的Web应用。
1.2、Tomcat的工作原理
Tomcat的工作原理重要涉及其核心组件:连接器(Connector)和容器(Container),以及它们如何协同工作来处理惩罚HTTP请求。
首先,连接器(Connector)是Tomcat中负责接收HTTP请求的第一个组件。它监听特定端口(如8080),当HTTP请求到达时,Connector接收并解析这些请求,然后转换成Tomcat的Request对象。这一过程涉及到网络I/O和字节流处理惩罚,确保原始HTTP请求被精确转换为Tomcat内部可处理惩罚的格式。
接下来,处理惩罚后的Request对象传递给容器(Container)。Tomcat的容器系统接纳层次结构,包括Engine、Host、Context和Wrapper四个层级。Request对象首先传递到Engine,然后到Host,接着到Context,末了到Wrapper。每个层级可以包含多个子容器,形成一种父子关系。这种设计使得Tomcat能够高效管理多个应用和请求。
在Container内部,Request对象继承通过一系列管道(Pipeline)和阀(Valve)进行处理惩罚。这些组件负责实行各种通用功能,比如安全查抄、会话管理以及请求过滤。这个处理惩罚过程为后续目标Servlet的准备提供了必要条件。
具体到Servlet的调用,当Request对象到达对应的Wrapper时,Wrapper确定由哪一个Servlet来处理惩罚该请求。一旦找到目标Servlet,就会调用它的service方法,该方法根据请求的HTTP方法(如GET或POST)来决定具体调用doGet或doPost等。Servlet然后生成相应,通过同样的管道回传给Connector,最终以HTTP相应的形式返回给客户端。
Tomcat的工作流程非常注重各组件之间的协同和数据传递。从网络请求的接收和转换,到请求在容器中的层层传递与处理惩罚,每一步都是为了确保差别Web应用和Servlet能够高效、安全地运行。明白这些流程对于优化和摆设Java Web应用至关重要。
1.3、Tomcat实用的场景
- Web应用服务器:Tomcat是一个功能强盛的Web应用服务器,可以用于摆设和运行各种Java Web应用步伐。它支持Servlet、JSP、WebSocket等技术,并提供了丰富的扩展点和API,方便开发者进行定制和集成。
- 轻量级应用服务器:相较于其他重量级的Java EE应用服务器(如WildFly、GlassFish),Tomcat更加轻量级,占用资源较少,启动速度快,得当在小型到中型项目中使用。
- 开发和测试环境:由于Tomcat易于安装和设置,而且提供了丰富的文档和社区支持,它经常被用作开发和测试环境中的默认Web服务器。开发人员可以在本地机器上快速搭建和测试Web应用步伐。
- 微服务架构:随着微服务架构的流行,Tomcat也可以作为轻量级的容器来摆设和管理单个微服务。它可以与Spring Boot等框架结合使用,提供快速的开发和摆设体验。
- 云原生应用:固然Tomcat本身不是专为云原生应用设计的,但它可以通过Kubernetes等容器编排工具轻松地摆设到云平台上。这使得Tomcat成为构建云原生应用的一个可行选择。
只管Tomcat具有广泛的应用场景,但对于大型项目或必要更高级功能的企业级应用,大概必要选择更强盛的应用服务器,如WildFly、WebLogic或WebSphere等。这些服务器提供了更多的特性和性能优化,以满意企业级应用的需求。
1.4、Tomcat与Nginx、Apache比较
1.4.1、上风
- Apache:Apache是一个通用的Web服务器,支持多种编程语言,如PHP、Python、Perl等。它能够处理惩罚动态内容,而且可以通过扩展脚本和模块来支持动态页面。Apache的稳定性好,对PHP的支持相对简单,得当静态HTML和图片等资源。
- Nginx:Nginx是一个高性能的HTTP服务器和反向代理服务器,重要用于静态资源的请求分发和负载均衡。它接纳异步非阻塞的事件驱动模子,可以更好地处理惩罚大量并发请求。Nginx轻量级,占用内存少,抗并发能力强,提供负载均衡功能。
- Tomcat:Tomcat是专为Java应用步伐开发的Web应用服务器,能够处理惩罚Servlet和JSP等Java Web应用。它是开发和调试JSP步伐的首选,实用于中小型系统和并发访问用户较少的场所。
1.4.2、劣势
- Apache:设置相对复杂,自身不支持动态页面,必要额外的插件或模块来支持Java等语言。在高并发环境下,由于线程切换的开销,性能大概会降落。
- Nginx:固然Nginx在静态文件处理惩罚和并发能力上表现出色,但它不如Apache那样支持众多模块和动态页面处理惩罚。与Apache相比,Nginx的rewrite功能较弱,必要配合其他后端使用。
- Tomcat:重要用作Java Web应用服务器,对静态内容的相应速度不及Apache和Nginx。在高负载环境下,性能大概会降落。
1.4.3、定位功能
- Apache:Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器,支持多种模块,性能稳定。Apache本身得当静态HTML、图片等资源,但可以通过扩展脚本、模块等支持动态页面。
- Nginx:Nginx是轻量级的高性能HTTP和反向代理服务器。它以其出色的性能和高并发处理惩罚能力而著名,重要用于处理惩罚静态资源和负载均衡。
- Tomcat:Tomcat是Java Servlet容器,专门用于运行Java Web应用步伐。它可以处理惩罚HTTP请求并将其传递给Java应用步伐进行处理惩罚。
1.5、Tomcat 的重要组件
- Server:
- Server 是最顶层的组件,代表一个Tomcat实例。在JVM中只有一个Server实例。
- Server 可以有一个或多个Service组件。
- 它包含一些根本属性如地址和端口,以及一个关闭命令字符串。
- Server 在启动和关闭时会记录日志,这些日志文件通常位于CATALINA_HOME/logs目次下。
- 它还可以包含一些Listener,这些监听器可以在Tomcat启动和关闭时实行特定任务。
- Service:
- Service 是Connector和Container的组合。
- 一个Tomcat实例可以有多个Service,它们通过差别的端口来区分。
- Service 内包含一个或多个Connector和一个Engine。
- 每个Service可以独立设置,互不干扰。
- 在Service中还可以设置一个共享的线程池Executor,以提高Connector间的资源利用效率。
- Connector:
- Connector 负责接收和处理惩罚来自客户端的请求。
- 支持差别的网络协议(如HTTP、AJP)。
- 可以设置为阻塞或非阻塞模式。
- 负责将请求解析后分发给对应的Container进行处理惩罚。
- Connector 的设置直接影响到Tomcat的性能和安全性。
- Container:
- Container 是处理惩罚请求的逻辑单位,包括Engine、Host、Context和Wrapper四个层级。
- Engine 对应一个Service,负责管理Host。
- Host 对应一个假造主机,可以包含多个Web应用Context。
- Context 对应一个Web应用,包含具体的Servlet和JSP等资源。
- Wrapper 是最小的单位,每个Wrapper封装一个Servlet实例。
1.6、Tomcat 的重要设置文件
- server.xml:
- 主设置文件,定义了Tomcat的根本结构,包括Service、Connector、Engine、Realm、Valve和Hosts的设置信息。
- 可以设置Service的线程池、Connector的协议和端口、Engine下的Host和Context等。
- server.xml的修改必要重启Tomcat才能生效。
- web.xml:
- 遵循Servlet规范的尺度设置文件,用于设置Servlet、Filter、Listener等Web应用步伐的组件。
- 可以为所有的Web应用步伐提供默认设置,包括MIME映射、Servlet初始化参数等。
- web.xml允许步伐员为特定的Web应用进行定制化设置。
- context.xml:
- 提供所有Host的默认设置信息。
- 可以在差别的层级(Server、Host、Web app)进行设置。
- context.xml的修改可以动态加载,无需重启Tomcat。
- tomcat-users.xml:
- 定义Realm认证时用到的相关脚色、用户和暗码等信息。
- 控制对Tomcat的Manager App的访问权限。
- 可以通过编辑此文件来添加、删除用户或为用户指定脚色。
- logging.properties:
- catalina.policy 和 catalina.properties:
- 分别为Java安全计谋设置文件和Tomcat内部包的定义及访问控制。
二、Tomcat安装
2.1、查看可用的JDK
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum search java|grep jdk
- ldapjdk-javadoc.noarch : Javadoc for ldapjdk
- openjdk-asmtools-javadoc.noarch : Javadoc for openjdk-asmtools
- java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
- java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
- java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
- java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
- java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
- java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
- java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
- java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
- java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
- java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without
- java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
- java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
- java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment 8
- java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment
- java-1.8.0-openjdk-accessibility.i686 : OpenJDK accessibility connector
- java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
- java-1.8.0-openjdk-demo.i686 : OpenJDK Demos 8
- java-1.8.0-openjdk-demo.x86_64 : OpenJDK 8 Demos
- java-1.8.0-openjdk-devel.i686 : OpenJDK Development Environment 8
- java-1.8.0-openjdk-devel.x86_64 : OpenJDK 8 Development Environment
- java-1.8.0-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 8
- java-1.8.0-openjdk-headless.x86_64 : OpenJDK 8 Headless Runtime Environment
- java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation
- java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed
- java-1.8.0-openjdk-src.i686 : OpenJDK Source Bundle 8
- java-1.8.0-openjdk-src.x86_64 : OpenJDK 8 Source Bundle
- java-11-openjdk.i686 : OpenJDK Runtime Environment 11
- java-11-openjdk.x86_64 : OpenJDK 11 Runtime Environment
- java-11-openjdk-demo.i686 : OpenJDK Demos 11
- java-11-openjdk-demo.x86_64 : OpenJDK 11 Demos
- java-11-openjdk-devel.i686 : OpenJDK Development Environment 11
- java-11-openjdk-devel.x86_64 : OpenJDK 11 Development Environment
- java-11-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 11
- java-11-openjdk-headless.x86_64 : OpenJDK 11 Headless Runtime Environment
- java-11-openjdk-javadoc.i686 : OpenJDK 11 API documentation
- java-11-openjdk-javadoc.x86_64 : OpenJDK 11 API documentation
- java-11-openjdk-javadoc-zip.i686 : OpenJDK 11 API documentation compressed in a
- java-11-openjdk-javadoc-zip.x86_64 : OpenJDK 11 API documentation compressed in
- java-11-openjdk-jmods.i686 : JMods for OpenJDK 11
- java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11
- java-11-openjdk-src.i686 : OpenJDK Source Bundle 11
- java-11-openjdk-src.x86_64 : OpenJDK 11 Source Bundle
- java-11-openjdk-static-libs.i686 : OpenJDK libraries for static linking 11
- java-11-openjdk-static-libs.x86_64 : OpenJDK 11 libraries for static linking
- ldapjdk.noarch : The Mozilla LDAP Java SDK
- openjdk-asmtools.noarch : To develop tools create proper & improper Java
复制代码 2.2、安装OpenJDK 11
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum install -y java-11-openjdk java-11-openjdk-devel
复制代码 2.3、设置环境变量
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# vi /etc/profile
- export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- export PATH=$JAVA_HOME/bin:$PATH
复制代码 2.4、验证安装
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# java -version
- openjdk version "11.0.23" 2024-04-16 LTS
- OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
- OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
复制代码 2.5、查看tomcat的可以用版本
注:以下两条命令都可查看
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum list all | grep tomcat
- jglobus-ssl-proxies-tomcat.noarch 2.1.0-13.el7 epel
- tomcat.noarch 7.0.76-16.el7_9 updates
- tomcat-admin-webapps.noarch 7.0.76-16.el7_9 updates
- tomcat-docs-webapp.noarch 7.0.76-16.el7_9 updates
- tomcat-el-2.2-api.noarch 7.0.76-16.el7_9 updates
- tomcat-javadoc.noarch 7.0.76-16.el7_9 updates
- tomcat-jsp-2.2-api.noarch 7.0.76-16.el7_9 updates
- tomcat-jsvc.noarch 7.0.76-16.el7_9 updates
- tomcat-lib.noarch 7.0.76-16.el7_9 updates
- tomcat-native.x86_64 1.2.35-1.el7 epel
- tomcat-servlet-3.0-api.noarch 7.0.76-16.el7_9 updates
- tomcat-webapps.noarch 7.0.76-16.el7_9 updates
- tomcatjss.noarch 7.2.5-1.el7 base
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum search tomcat
- Loaded plugins: fastestmirror
- Loading mirror speeds from cached hostfile
- ================================================================================== N/S matched: tomcat ===================================================================================
- jglobus-ssl-proxies-tomcat.noarch : Globus Java - SSL and proxy certificate support for Tomcat
- tomcat-admin-webapps.noarch : The host-manager and manager web applications for Apache Tomcat
- tomcat-docs-webapp.noarch : The docs web application for Apache Tomcat
- tomcat-javadoc.noarch : Javadoc generated documentation for Apache Tomcat
- tomcat-jsp-2.2-api.noarch : Apache Tomcat JSP API implementation classes
- tomcat-jsvc.noarch : Apache jsvc wrapper for Apache Tomcat as separate service
- tomcat-lib.noarch : Libraries needed to run the Tomcat Web container
- tomcat-native.x86_64 : Tomcat native library
- tomcat-servlet-3.0-api.noarch : Apache Tomcat Servlet API implementation classes
- tomcat-webapps.noarch : The ROOT and examples web applications for Apache Tomcat
- tomcatjss.noarch : JSS Connector for Apache Tomcat, a JSSE module for Apache Tomcat that uses JSS
- tomcat.noarch : Apache Servlet/JSP Engine, RI for Servlet 3.0/JSP 2.2 API
- tomcat-el-2.2-api.noarch : Expression Language v2.2 API
- Name and summary matches only, use "search all" for everything.
复制代码 2.6、安装tomcat
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum -y install tomcat
复制代码 2.7、添加环境变量
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# vi /etc/profile
- export CATALINA_HOME=/usr/share/tomcat
- export PATH=$PATH:$CATALINA_HOME/bin
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# source /etc/profile
复制代码 2.8、启动tomcat
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# systemctl start tomcat
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# systemctl status tomcat
- ● tomcat.service - Apache Tomcat Web Application Container
- Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
- Active: active (running) since Sun 2024-08-18 17:39:31 CST; 8s ago
- Main PID: 12914 (java)
- CGroup: /system.slice/tomcat.service
- └─12914 /usr/lib/jvm/jre/bin/java -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/to...
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: Aug 18, 2024 5:39:32 PM org.apache.catalina.core.StandardService startInternal
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: INFO: Starting service Catalina
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: Aug 18, 2024 5:39:32 PM org.apache.catalina.core.StandardEngine startInternal
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: INFO: Starting Servlet Engine: Apache Tomcat/7.0.76
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: Aug 18, 2024 5:39:32 PM org.apache.coyote.AbstractProtocol start
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: INFO: Starting ProtocolHandler ["http-bio-8080"]
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: Aug 18, 2024 5:39:32 PM org.apache.coyote.AbstractProtocol start
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: INFO: Starting ProtocolHandler ["ajp-bio-8009"]
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: Aug 18, 2024 5:39:32 PM org.apache.catalina.startup.Catalina start
- Aug 18 17:39:32 iZbp1izvhfvbrd0mb6ktasZ server[12914]: INFO: Server startup in 49 ms
复制代码 2.9、安装Tomcat管理包
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# yum install -y tomcat-webapps tomcat-admin-webapps
复制代码 2.10、设置登录用户路径
- [root@iZbp1izvhfvbrd0mb6ktasZ ~]# vi /usr/share/tomcat/conf/tomcat-users.xml
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |