文章目录

  • 前言
  • 一:Tomcat安装部署
      • 1.1:Tomcat简介
      • 1.2:Tomcat核心组件
      • 1.3:Tomcat处理请求的过程
          • 1.3.1:请求过程基本解释
          • 1.3.2:请求过程详细解释
      • 1.4:Tomcat部署步骤
          • 1.4.1:下载并安装jdk
          • 1.4.2:安装并启动Tomcat
          • 1.4.3:缩短Tomcat启动时间
          • 1.4.4:Tomcat目录结构
  • 二:虚拟主机配置
      • 2.1:虚拟主机概述
      • 2.2:举例:通过两个域名访问到不同的项目内容
          • 2.2.1:步骤
          • 2.2.2:创建erbao和sanbao项目目录和文件
          • 2.2.3:设置DNS和修改Tomcat主配置文件
          • 修改Tomcat主配置文件
          • 2.2.4:重启Tomcat服务并测试
  • 三:Tomcat优化
      • 3.1:Tomcat配置文件参数优化
          • 3.1.1:参数总览
          • 3.1.2:参数详解
      • 3.2:jmeter压测工具
          • 3.2.1:测试机安装jdk(环境)
          • 3.2.2:测试机安装压测工具
          • 3.2.3:优化参数,再次测试

前言

  • Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的
  • 诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

一:Tomcat安装部署

1.1:Tomcat简介

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会( Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由 Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 是目前比较流行的Web应用服务器

1.2:Tomcat核心组件

  • catalina是Tomcat以前的名字,后来才改成Tomcat

1.3:Tomcat处理请求的过程

1.3.1:请求过程基本解释

  • connector:连接器

    一个Connector组件将在某个指定的端口上侦听客户请求,接收浏览器发过来的tcp连接请求,创建一个Request和一个Response对象分别用于和其你去端交换数据,然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给Engine,从Engine中获得响应并返回给客户端。 Tomcat有两个经典的Connector,一个直接侦听来自浏览器的HTTP请求,另外一个侦听来自其他的WebServer的请求。Cotote HTTP/1.1 Connector在端口8080处侦听来自客户浏览器的HTTP请求,Coyote JK2 Connector在端口8009处侦听其他WebServer的Servlet/JSP请求。 Connector 最重要的功能就是接收连接请求然后分配线程让 Container来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心。

  • container:

    Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet则定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。 Context定义在父容器 Host 中,其中Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。

  • engine:引擎

    Engine 容器比较简单,它只定义了一些基本的关联关系 Host 容器

  • host:虚拟主机

    Host 是 Engine 的字容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息

  • context:JSP前段页面

    Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的

  • servlet:处理代码

1.3.2:请求过程详细解释
  • 1.用户在浏览器中输入网址localhost:8080/test/index.jsp,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;

  • 2.Connector把该请求交给它所在的Service的Engine(Container)来处理,并等待Engine的回应;

  • 3.Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;

  • 4.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);

  • 5.path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类;

  • 6.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等;

  • 7.Context把执行完之后的HttpServletResponse对象返回给Host;

  • 8.Host把HttpServletResponse对象返回给Engine;

  • 9.Engine把HttpServletResponse对象返回Connector;

  • 10.Connector把HttpServletResponse对象返回给客户Browser

  • 例如:这幅图的流程更加场景化了

1.4:Tomcat部署步骤

1.4.1:下载并安装jdk

  • 没有资源可以私我

  • 挂在宿主机共享目录

    [root@localhost ~]# mount.cifs //192.168.10.1/ccc /mnt
  • 安装共享目录中资源包

    [root@localhost ~]# cd /mnt/Tomcat/
    [root@localhost Tomcat]# rpm -ivh jdk-8u201-linux-x64.rpm
  • 设置环境变量

    [root@localhost Tomcat]# cd /usr/java/jdk1.8.0_201-amd64
    [root@localhost Tomcat]# java -version '//查看Java版本'
    [root@localhost jdk1.8.0_201-amd64]# pwd
    /usr/java/jdk1.8.0_201-amd64 '//复制路径'
    [root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
    '//尾行插入'
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
    export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    export PATH=$JAVA_HOME/bin:$PATH
    [root@localhost jdk1.8.0_201-amd64]# java -version '//查看Java版本'
  • 已经安装成功

1.4.2:安装并启动Tomcat
  • 解压共享目录中的Tomcat安装包

    [root@localhost Tomcat]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local
    [root@localhost Tomcat]# cd /usr/local
    [root@localhost local]# mv apache-tomcat-9.0.16/ tomcat9
  • 创建软连接

    [root@localhost local]# ln -s /usr/local/tomcat9/bin/startup.sh /usr/bin	'//创建开启Tomcat脚本的软连接'
    [root@localhost local]# ln -s /usr/local/tomcat9/bin/shutdown.sh /usr/bin '//创建关闭Tomcat脚本的软连接'
  • 开启服务,关闭防火墙

    [root@localhost local]# systemctl stop firewalld.service
    [root@localhost local]# setenforce 0
    [root@localhost local]# startup.sh '//开启Tomcat'
    [root@localhost local]# netstat -ntap |grep 8080
  • 测试机访问Tomcat主页

1.4.3:缩短Tomcat启动时间
[root@localhost ~]# vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
'//搜索securerandom'
securerandom.source=file:/dev/random '//找到此行'
securerandom.source=file:/dev/urandom '//将random修改为urandom'
[root@localhost ~]# startup.sh
1.4.4:Tomcat目录结构

二:虚拟主机配置

2.1:虚拟主机概述

  • 有多个项目同时运行时,一台服务器不建议运行多个Tomcat服务,需要配置虚拟主机

2.2:举例:通过两个域名访问到不同的项目内容

2.2.1:步骤
  • 创建erbao和sanbao项目目录和文件
  • 修改 Tomcat主配置文件
  • 重启 Toma服务
  • 测试
2.2.2:创建erbao和sanbao项目目录和文件
[root@localhost ~]# mkdir /usr/local/tomcat9/webapps/erbao
[root@localhost ~]# echo "<h1>this is erbao page</h1>" > /usr/local/tomcat9/webapps/erbao/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat9/webapps/sanbao
[root@localhost ~]# echo "<h1>this is sanbao page</h1>" > /usr/local/tomcat9/webapps/sanbao/index.jsp
2.2.3:设置DNS和修改Tomcat主配置文件
  • 设置DNS

    ####配置DNS
    [root@localhost local]# yum install bind -y
    [root@localhost local]# vim /etc/named.conf
    修改监听地址:127.0.0.1修改为any,localhost修改为any
    [root@localhost local]# vim /etc/named.rfc1912.zones
    zone "erbao.com" IN { '//添加此段'
    type master;
    file "erbao.com.zone";
    allow-update { none; };
    zone "sanbao.com" IN { '//添加此段'
    type master;
    file "sanbao.com.zone";
    allow-update { none; };
    };
    [root@localhost local]# cd /var/named
    [root@localhost named]# cp -p named.localhost erbao.com.zone
    [root@localhost named]# vim erbao.com.zone
    www IN A 192.168.79.133 '//末行添加'
    [root@localhost named]# cp -p erbao.com.zone sanbao.com.zone
    [root@localhost named]# systemctl start named
  • 测试机指定解析地址

  • 修改Tomcat主配置文件

    [root@localhost named]# vim /usr/local/tomcat9/conf/server.xml
    '//添加这两段内容到文章末尾'
    <Host name="www.erbao.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat9/webapps/erbao" path="" reloadable="true"/>
    </Host>
    <Host name="www.sanbao.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat9/webapps/sanbao" path="" reloadable="true"/>
    </Host>
    </Engine> '//插入到此行上方'
    </Service>
    </Server>
2.2.4:重启Tomcat服务并测试
[root@localhost named]# shutdown.sh
[root@localhost named]# startup.sh
  • 打开测试机测试

三:Tomcat优化

3.1:Tomcat配置文件参数优化

3.1.1:参数总览

3.1.2:参数详解
  • Ø maxThreads:Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200。

  • Ø minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。

  • Ø maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。默认值是-1(无限制)。一般不需要指定。

  • Ø URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web 服务器软件配置方便,需要分别指定。

  • Ø connnectionTimeout:网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。

  • Ø enableLookups:是否反查域名,以返回远程主机的主机名,取值为:true 或 false, 如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。

  • Ø disableUploadTimeout:上传时是否使用超时机制。应设置为 true。

  • Ø connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间, 这个根据你自己的业务需要自己调,以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

  • Ø acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。

  • Ø compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。

  • Ø compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。

  • Ø compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。

  • noCompressionUserAgents=“gozilla, traviata”:对于以下的浏览器,不启用压缩。

3.2:jmeter压测工具

3.2.1:测试机安装jdk(环境)
  • 准备好安装源,直接安装jdk,一直下一步即可

  • 到C:\Program Files\Java\jdk1.8.0_181\bin目录,复制路径

  • 设置系统环境变量

    右击–属性–高级系统设置–环境变量–系统变量–修改Path

3.2.2:测试机安装压测工具
  • 将宿主机的压测工具拖到虚拟机中,打开软件

  • 直接运行

3.2.3:优化参数,再次测试
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" '//找到此段落'
connectionTimeout="20000"
redirectPort="8443" />
'//在 redirectPort="8443" 和/>中间添加以下段落'
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh
  • 再次压测,用刚刚的方法去平均值进行比较,再次就不在赘述

如何安装部署和优化Tomcat?(Tomcat部署和优化与压测,虚拟主机配置,Tomcat处理请求的过程)的更多相关文章

  1. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  2. Tomcat之虚拟主机配置以及web应用配置

    Tomcat之虚拟主机配置以及web应用配置 Tomcat文件夹结构例如以下: bin ---- 启动和关闭须要的bat文件所在的文件夹 conf --- 配置文件夹 lib ---  tomcat执 ...

  3. 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志

    6月27日任务 16.4 配置Tomcat监听80端口16.5/16.6/16.7 配置Tomcat虚拟主机16.8 Tomcat日志扩展邱李的tomcat文档 https://www.linuser ...

  4. Linux centosVMware 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志

    一.配置Tomcat监听80端口 关闭tomcat报错 [root@davery src]# /usr/local/tomcat/bin/shutdown.sh 重装tomcat即可 vim /usr ...

  5. Nginx--服务部署、基于域名的虚拟主机配置

    一.服务部署 1.预处理 安装CentOS ,配置hosts.静态IP.设置必要的安全参数等(略) 1-1.系统环境 [root@vnx ~]# cat /etc/redhat-release Cen ...

  6. 【原创】Apache和基于虚拟主机的Tomcat集群方案

    最近建设了北京某政府机构的网站,网站前段使用Apache做负载均衡,后端使用Tomcat做的集群,基于虚拟主机的方式访问,并且实现了静态资源和动态资源的分离. 开始的建设方案有两种,一种是使用apac ...

  7. Ngnix 安装、信号量、虚拟主机配置

    ngnix的安装很简单 1.先从ngnix官网下载ngnix压缩包 wget http://nginx.org/download/nginx-1.6.2.tar.gz 2.解压并进入其目录 tar - ...

  8. Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置)

    Apache+php+mysql的安装与配置 - 之三(Apache的虚拟主机配置) Apache核心(Core)配置 VirtualHost 语法 <VirtualHost addr[:por ...

  9. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

随机推荐

  1. 密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

    密码学笔记——eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} ...

  2. vs查看动态库依赖

    dumpbin是VS自带的工具,进入Visual Studio 的命令提示 查看程序或动态库所依赖的动态库 dumpbin /dependents  abc.exe 查看动态库的输出函数 dumpbi ...

  3. Docker - 命令 - docker volume

    概述 docker volume 命令 背景 docker 容器的存储, 通常需要独立于镜像 docker volume 就是负责这块的命令 1. 写在 docker volume 之前 概述 doc ...

  4. Analog power pin UPF defination

    在一个analog macro端口上,有些pin是always on的,有些是shut down的,如何描述这些pin的power属性?这是一个常见问题,驴就此机会大致描述一下常见的做法.对于这个问题 ...

  5. java知识树

    https://blog.csdn.net/aitaozi11/article/details/79652943 (学习Java的9张思维导图) 文章目录 针对技术栈学习 1. java基础 1.1 ...

  6. finalize()

    本文介绍的是Java里一个内建的概念,Finalizer.你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了.在java.lang.Obje ...

  7. P1030 求先序排列 (一个非常棒的写法)

    理论正确就是真正的正确,误... 就是找嘛,找到每一个对应字符,然后对应的左右子树的区间,然后就可以了. #include <bits/stdc++.h> using namespace ...

  8. java篇 之 集合

    集合   链接:https://blog.csdn.net/weixin_42504145/article/details/83119088 数组: java的数组既可以存储基本数据类型,也可以存储引 ...

  9. 80端口被system占用

    # 开始 今天配置wampserver 3.0.6的时候 发现右下角的图标一直是红色的 经验告诉我两个服务都没有运行 # 解决思路 wampserver有两个服务 一个是 Apache 服务 一个是 ...

  10. Airflow 操作知识总结(完善中)

    airflow默认以utc时区运行,如果需要计算正确的时间,需要把时间进行时区转换,核心代码如下 #将本地时间转换为utc时间,再设置为start_date tz = pytz.timezone('A ...