首页 > 其他分享 >Tomcat详解

Tomcat详解

时间:2024-08-11 21:27:30浏览次数:16  
标签:xml Tomcat tomcat 配置 详解 conf 目录

1. 安装tomcat

1. 去到tomcat官网下载tomcat安装包,下载的是免安装的包,解压就可用apache-tomcat-8.5.85.zip

解压后的如下:

 目录说明:

bin 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件

conf 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。

lib 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务

logs 默认的日志文件存放目录,如访问日志,可以通过server.xml文件配置到其他目录;

temp 存放 Tomcat 运行时产生的文件

webapps 存放项目资源的目录

work Tomcat 工作目录,如存放JSP编译后的类文件

2. 设置环境变量

新建两个系统变量,变量名分别为CATALINA_BASE和CATALINA_HOME,变量值为Tomcat文件夹的路径

找到系统变量Path,双击空白处或新建即可在末尾加上%CATALINA_HOME%\bin

3. 运行bin目录下的startup.bat,显示如下,表示tomcat启动成功(前提是安装好JDK,并设置了环境变量JAVA_HOME)

 4. 若出现乱码,修改conf目录下面的logging.properties

 5. 访问http://localhost:8080/

 6. 若要访问这里的Server Status是无法访问的,需要配置conf/tomcat-users.xml

增加如下配置,即可访问了

 

2. Tomcat系统架构

 

组件说明:

Server: Tomcat运行的进程实例

Connector: 负责客户端的HTTP、HTTPS、A JP等协议的连接。一个Connector只属于某一个Engine

Service: 用来组织Engine和Connector的关系

Engine: 响应并处理用户请求。一个引擎上可以绑定多个Connector

Host:虚拟主机

Context: 应用的上下文,配置路径映射path => directory

运行过程: 首先开启 tomcat进程,会有 server 产生,然后产生一个 service管理组件,管理所有其他组件的用户发送请求。httpd请求过来,connector连接器(默认监听)接收到此请求,会转交给 engine (引擎)。engine (引擎)会处理请求,遍历 host (虚拟主机)会交给客户访问的host,如果找不到交给默认的 host 会根据 上下文 context (上下文映射关系去找相对应的文件。找到文件后, 交给 JSP 生成代码,再交给 servlet 生成 html 原路返回,反馈给用户。

conf/server.xml

其结构如下:

<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                           connectionTimeout="20000"
                           redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost"  appBase="webapps"
                        unpackWARs="true" autoDeploy="true">
            </Host>
        </Engine>
    </Service>
</Server>

 一般的Connector可以有多个,例如

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
</Connector>

<Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />

 虚拟主机,可以配置多个, 如下:

<Host name="a.pdd.com" appBase="/data/web1" unpackWARs="true" autoDeploy="true"></Host>
<Host name="b.pdd.com" appBase="/data/web2" unpackWARs="true" autoDeploy="true"></Host>

 Host下面可以配置Context, Context可以配置多个, 如下所示

#映射指定路径
<Context path="/test" docBase="/data/test" reloadable="true" />
#映射站点的根目录
<Context path="/" docBase="/data/website" reloadable="true" />

 

我们看到Server.xml当中还有一个Realm的配置, 它主要是用来配置用户权限的。

首先说一下 tomcat 的权限管理。因为在 tomcat 中可以配置多个 web 项目,而 tomcat 为这些项目的管理创建了管理页面,也就是默认 webapps 下 host-manager 与 manager 文件夹的项目页面,为了保证安全性,访问这两个项目需要设置权限,但是如果对每个新用户都单独的设置权限比较繁琐麻烦,所以在 tomcat 中定义了几种不同的权限,我们可以自己配置 "角色"(可以看作是特定权限的集合) 和 "用户"(设置登录名、密码,与角色相关联),然后就可以通过自定义的 "用户" 去访问管理页面。"角色" 和 "用户" 的配置默认可以在 tomcat-users.xml 中配置。当 tomcat 启动后,就会通过 conf 目录下的 server.xml 中的 Realm 标签来检查权限。

默认的Realm为UserDatabaseRealm,信息存储于XML文档中 conf/tomcat-users.xml

除此之外,还有JDBCRealm, DataSourceRealm, JNDIRealm等。

最后,还可以配置Valve,可以单独配置应用日志,如下:

<Context path="/test" docBase="/data/test" reloadable="true" >
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_test_log" suffix=".txt"
    pattern="%h %l %u %t "%r" %s %b" />
</Context>

 Tomcat 中定义了 Pipeline 和 Valve 两个接口,Pipeline 用于构建责任链, 后者代表责任链上的每个处理器。Pipeline 中维护了一个基础的 Valve,它始终位于Pipeline的末端(最后执行),封装了具体的请求处理和输出响应的过程。当然,我们也可以调用addValve()方法, 为Pipeline 添加其他的Valve,后添加的Valve 位于基础的Valve之前,并按照添加顺序执行。Pipiline通过获得首个Valve来启动整合链条的执行,如下所示:

 

Context.xml

它在conf目录下面,主要用于配置默认context, 我们在项目中也可以自定义context.xml来覆盖它。

可以定义在当前应用目录的/META-INF/context.xml ,但是该位置在第一次部署解析的时候会拷贝$CATALINA_BASE/conf/[enginename]/[hostname]/xxx.xml xxx代表当前应用名。拷贝也是需要配置的,Host中有一个配置就是copyXML。

Web.xml

web.xml 文件分为 tomcat 安装目录的 conf 下的以及各个项目的 WEB-INF 目录下的。conf 下的是全局配置,所有 web 项目都会受到影响,而 WEB-INF 下的只会作用于当前项目,但是如果与 conf 下的 web.xml 配置冲突,那么就会覆盖掉 conf的。

3. Tomcat优化

JVM 优化

因为 Tomcat 是一台 Java 服务器,所以它的优化就可以归结到 JVM 的优化上,而 Tomcat 在JVM 上的优化可以分为垃圾回收器的选择以及一些参数配置。关于垃圾回收器和相关参数配置这里就不过多阐述了,这里只介绍下如何在 Tomcat 启动时携带我们想要的配置。

windows 下: 修改bin/catalina.bat 文件,在第一行添加 : set JAVA_OPTS=-server -Dfile.encoding=UTF-8 具体配置

linux 下:修改 bin/catalina.sh 文件,在第一行添加: JAVA_OPTS=" -server 具体配置"

Tomcat 配置优化

连接器的配置是决定 Tomcat 性能的关键,在一般情况下使用默认的就可以了,但是在程序比较吃力时,就需要手动配置它来提高效率,完整的配置如下:

<Connector port="8080" 
    protocol="HTTP/1.1" 
    executor="tomcatThreadPool" 
    maxThreads="1000" 
    minSpareThreads="100" 
    acceptCount="1000" 
    maxConnections="1000" 
    connectionTimeout="20000" 
    compression="on" 
    compressionMinSize="2048" 
    disableUploadTimeout="true" 
    redirectPort="8443" 
    URIEncoding="UTF-8" />

标签:xml,Tomcat,tomcat,配置,详解,conf,目录
From: https://blog.csdn.net/mjb709/article/details/141085712

相关文章

  • VulnhubJIS-CTF靶机详解
    项目地址https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/修改靶机的网卡开机时长按shift,进入此页面选择第二个,进入等待加载完成选择root模式进入将只读模式改为读写模式mount-oremount,rw/查看本机的网卡名称ifconfig-a修改默认网卡......
  • Maven的概述及基本使用示例详解
    一、Maven简介ApacheMaven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档官网:http://maven.apache.org/项目对象模型(ProjectObjectModel)依赖管理模型(Dependency)插件(Plugin)1.1、Maven概述Maven是专门用于......
  • USB协议详解第5讲(USB描述符-接口描述符)
    1.USB描述符USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB接口描述符的组成。2.接口描述符组成前面讲了设备描述符和标准配置描述符,本篇我们讲解接口描述符。首先要明确的一点......
  • 并发修改异常 ConcurrentModificationException详解
    并发修改异常ConcurrentModificationException详解异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。异常抛出在ArrayList类中的checkForComodification()方法中。checkForComodification()方法实际上就是当modCoun......
  • MySQL 数据类型详解
    MySQL是一种广泛使用的关系型数据库管理系统,它支持多种数据类型以满足各种应用场景的需求。本文将详细介绍MySQL支持的数据类型、它们的使用场景以及实现原理,并通过图示帮助读者更直观地理解。目录简介数值类型整型浮点型定点型日期和时间类型字符串类型字符串二进制字......
  • Redis 数据类型详解
    Redis是一个开源的内存数据结构存储系统,广泛应用于缓存、消息队列、实时数据分析等场景。Redis提供了多种数据类型,本文将详细介绍Redis的五种主要数据类型及其应用场景,并从概述、基本操作、应用场景和数据结构等方面进行深入探讨。1.字符串(String)概述字符串是Redis......
  • Redis 数据类型详解
    Redis是一个开源的内存数据结构存储系统,广泛应用于缓存、消息队列、实时数据分析等场景。Redis提供了多种数据类型,本文将详细介绍Redis的五种主要数据类型及其应用场景,并从概述、基本操作、应用场景和数据结构等方面进行深入探讨。1.字符串(String)概述字符串是Redis......
  • MySQL 数据类型详解
    MySQL是一种广泛使用的关系型数据库管理系统,它支持多种数据类型以满足各种应用场景的需求。本文将详细介绍MySQL支持的数据类型、它们的使用场景以及实现原理,并通过图示帮助读者更直观地理解。目录简介数值类型整型浮点型定点型日期和时间类型字符串类型字符串二进制字......
  • 公主少爷都爱看的haproxy七层代理详细介绍及常见实验详解
    目录一、负载均衡1.1什么是负载均衡1.2为什么要实验负载均衡1.3四层负载均衡1.4七层负载均衡1.5四层负载均衡和七层负载均衡的对比二、什么是haproxy2.1定义2. 2功能和特点2.3应用场景 2.4haproxy的分类 三、安装及基本配置的信息3.1软件的安装3.2haproxy基本......
  • C++虚函数表、地址详解(x86/x64)
    参考博文:c++虚函数表、地址详解-CSDN博客本文在上述博文的基础上,补充了x64下的验证代码。一.什么是虚函数表,它有什么特点?        虚函数大家都知道是基本用于实现多态的,当父类指针指向子类对象的时候,如何确定调用的函数是父类里的还是子类里面的,这就要用到虚函数表......