IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Tomcat的部署与优化 -> 正文阅读

[Java知识库]Tomcat的部署与优化

1.Tomcat用来干嘛的

tomcat装载你的javaweb程序,可以称它为web容器,你的jsp/servlet程序需要运行在Web容器上,Web容器有很多种,JBoss、WebLogic等等,Tomcat是其中一种。tomcat是一种web服务器,也可以称作运行在服务器(物理意义上的计算机)上的一种软件包。用来对服务器上的HTML文档提供访问权限控制。

2.Tomcat核心组件

  1. 通常意义上的web服务接收请求后,只是单纯的响应静态资源,如HTML文件,图片等,不能再后端进行一定的护理操作,Tomcat是Apache下的一个子项目,它具备Web服务器的所有功能,不仅可以监听坚守请求并响应静态资源,而且可在后端运行特定规范的Java代码Servlet,同时将执行的结果以HTML代码的形式写回客户端。
  2. Tomcat其中的核心组件有三个
  • Web容器:完成Web服务器的功能
  • Servlet容器:由catalina的脚本来处理Servlet代码
  • JSP容器:将JSP动态网页翻译成Servlet代码

3.Tomcat组件详细介绍

  1. Web容器
    负责Web服务的TCP/IP、HTTP等协议响应、处理
  2. JSP容器
    是一种动态网页开发技术,它使用JSP标签在HTML网页中插入Java代码,主要用于时间 java、web应用程序的用户界面部分,JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态的创建网页,容器内提供多个以index.html为结尾的Java前端页面展示,而index.jsp中有很多HTML标签,HTML标签中会嵌套很多Java代码,这些代码最终会被翻译为Servlet代码(JSP容器本身并不具备解析与分析代码的功能,所以交给Servlet容器)
  3. servlet容器
    servlet容器翻译index.jsp中这些java代码,执行一些servlet任务操作,比如数据库交互、加密、人脸识别,处理完成后,将这些数据返回给JSP,通过jsp中的index.jsp展示出来。当进行动态交互时,会将JSP传递过来的代码翻译为servlet,由catalina脚本处理。catalina实际处理的是servlet代码,servlet代码是由java编写的。

4.Tomcat处理请求过程

用户请求被发送到本机的8080端口,而tomcat服务需要service支持,并且需要connector监听、连接,所以请求被connector监听,接收请求之后会交给container中的engine进行处理,engine(引擎)是作为容器运动的动力核心,基于引擎支撑,容器中会抛出很多host虚拟主机,这些虚拟主机中会有很多context,servlet处理完全后会返回给contexxt,context返回给engine引擎,engine返回给端口,端口将页面展现给用户。
在这里插入图片描述
connector

[root@localhost opt]# vim /usr/local/tomcat/conf/server.xml 
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"     //毫秒
               redirectPort="8443" />        //ssl重定向、映射443

5. Tomcat部署

下载并安装JDK(编译器)jdk可以把java源码文件转换为执行文件,在部署Tomcat之前必须先安装好jdk,因为jdk是Tomcat运行的必要环境,且关闭防火墙和核心防护

[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm    rh
[root@localhost ~]# rpm -ivh jdk-8u201-linux-x64.rpm 

[root@localhost opt]# vim /etc/profile.d/java.sh         //jdk的环境变量
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/bim:$PATH

[root@localhost opt]# source /etc/profile.d/java.sh             //宣告
[root@localhost bin]# java -version           //查看java版本
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost opt]# tar zxvf apache-tomcat-9.0.16.tar.gz           //解压
[root@localhost opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat


[root@localhost ~]# cd /usr/local/tomcat/
apache-tomcat-9.0.16   
bin                      //存放启动和关闭tomcat脚本,比较常用的是Catalina.sh、startup.sh、shutdown.sh三个脚本
conf              //存放启动tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml四个文件
CONTRIBUTING.md
lib                //存放tomcat服务器的jar包,一般不做任何改动,除非连接第三方服务,比如redis
LICENSE
logs              //存放Tomcat日志
NOTICE      
README.md
RELEASE-NOTES
RUNNING.txt
temp           //存放Tomcat运行时产生的文件
webapps            //存放项目资源的目录
work            //Tomcat工作目录,一般清楚Tomcat缓存的时候会用到
             
[root@localhost opt]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/           //优化路径
[root@localhost opt]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
[root@localhost opt]# startup.sh                     //开启服务
[root@localhost opt]# netstat -antp | grep 8080                //查看Tomcat端口是否监听

在这里插入图片描述

5.1优化Tomcat启动速度

[root@localhost opt]# vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security     

在这里插入图片描述
需要重启服务

[root@localhost opt]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost opt]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

6.Tomcat 虚拟主机

添加两个域名访问到不同的项目内容

[root@localhost ~]# vim /etc/hosts         //添加映射
192.168.20.11 www.jerry.com www.tom.com


[root@localhost ~]# mkdir /usr/local/tomcat/webapps/jerry      //创建项目目录和文件     
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/tom
[root@localhost ~]# echo "hi jerry\!" > /usr/local/tomcat/webapps/jerry/index.jsp //网页文件
[root@localhost ~]# echo "hi tom\!" > /usr/local/tomcat/webapps/tom/index.jsp
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml  //修改tomcat的主配置文件

在这里插入图片描述

  • Host name:主机名
  • appBase:tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps
  • unpackWARs:tomcat再webaps文件夹中发现awr包文件时,是否自动将其解压
  • autodeploy:设为true,则web。sml发生变化时,tomcat自动重新部署程序,实现则会个功能必须允许后台处理
  • xmlValidation:是否开启对xml文件的验证
  • xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,标识对web.xml文件执行有效性检验
  • docBase:web应用的目录
  • path:设置访问的URI为web应用的根目录(uri的路径)""表示默认,加载系统中自带的类文件
  • reloadable:是否再程序有改动的时候重新载入
[root@localhost ~]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      16299/java          
tcp6       0      0 ::1:37550               ::1:8080                TIME_WAIT   -                   

在这里插入图片描述
在这里插入图片描述

7.Tomcat优化

  • maxTHreads:表示Tomcat可创建的最大的线程数,默认为200
  • minSpareThreads:Tomcat最小空闲线程数,表示即使没有人使用也开这么多空线程等待,默认是10
  • maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的- - -socket线程,默认值是-1(表示无限制,一般不用指定)
  • URIEncoding:指定Tomcat容器的URL编码格式
  • connnectionTimeout:网络连接超时,以毫秒为单位,默认20000
  • enableLookups:是否反查域名
  • disableUploadTimeout:上传时是否使用超时机制,应设置为true
  • connectionUploadTimeout:上传超时时间
  • addeptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个
  • compression:是否对响应的数据进行gzip压缩,压缩可以有效减少页面的大小,节省带宽
  • compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启压缩默认为2048
  • compressabldMimeType:指定对哪些类型的文件进行数据压缩
  • noCompressionUserAgents=“gozilla,traviata” :对于一下的浏览器,不启动压缩
 69     <Connector port="8080" protocol="HTTP/1.1"
 70                connectionTimeout="20000"
 71                redirectPort="8443" 
 72                 minSpareThreads="50" 
 73                 enableLookups="false"  
 74                 disableUploadTimeout="true"      //上传超时
 75                 acceptCount="300"               //队列
 76                 maxThreads="500"
 77                 processorCache="500"        //系统可以缓存对象的数量
 78                 URIEncoding="UTF-8"      
 79                 compression="on"             //压缩   
 80                 compressionMinsize="2048"               
 81                 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif, image/jpg,image/png"
 82 />

8.nginx+tomcat

如何将前端收到的动态请求交转给后端多个tomcat处理
Tomcat1

[root@localhost ~]# mkdir /usr/local/tomcat/webapps/test      //创建项目
[root@localhost ~]# vim /usr/local/tomcat/webapps/test/index.jsp     //页面文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml      //进入主配置文件

在这里插入图片描述

[root@localhost ~]# startup.sh               //开启服务
[root@localhost ~]# curl 192.168.20.11:8080/index.jsp          //通过curl命令测试是否成功

<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
动态页面 1,http://www.test1.com

</body>
</html>

Tomcat2与Tomcat1一样

[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# mkdir test
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# cd test/
[root@localhost webapps]# vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
[root@localhost test]# vim /usr/local/tomcat/conf/server.xml 

在这里插入图片描述

[root@localhost test]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@localhost test]# curl 192.168.20.20:8080/index.jsp

<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
动态页面 2,http://www.test2.com

</body>
</html>

Nginx

[root@localhost ~]# echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html        //设置静态页面
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf   //配置nginx主配置文件

在这里插入图片描述

[root@localhost ~]# systemctl start nginx.service 
[root@localhost ~]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      82061/nginx: master 

通过win10访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

Container组件,是由一个Engine组件组成,组件结构如图1-3所示。
其中,Host对应相应的请求链接,Context对应相应的Web App,Wrapper对应相应的Servlet。
Tomcat只是一个服务,他的connector组件负责的监听即8080端口,交互也都由connector来完成,

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-09 17:29:59  更:2021-07-09 17:30:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/18 17:37:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码