Tomcat的安装即使用

Tomcat的概念

Tomcat服务器是Java语言开发的,免费的开放源代码的Web应用服务器。
Tomcat处理静态HTML的能力远不及Apache或者Nginx,通常是作为一个Servlet和JSP容器,单独运行在后端。
Tomcat是由三个功能组合而成:
java servlet:Tomcat是一个servlet容器,负责管理和执行java-servlet,服务端的java程序,处理客户端的http请求后台响应
java server:服务端的配置,pages动态页面的技术就是由Java代码完成的,tomcat既可以作为以java代码为基础的动态页面,也可以处理和转发动态请求。
Tomcat的并发能力很差,仅适用于小项目

Tomcat核心组件

web容器:处理web请求,影响,动态页面的展示
jsp容器:解析index.jsp中java代码转换为servlet的代码,然后servlet编译执行。
jsp是一种技术模板,类似于html语言,允许在html文件当中,嵌入java代码
servler容器:接受web容器的请求,负责加载,初始化,执行和管理
在这里插入图片描述connector:接受外部的请求已经响应请求
container:包含了engine host context webapp四个组件组成
service:包含了connector和container
engine:引擎,用来管理多个虚拟主机,一个service只能有一个engine
host;代表一个虚拟主机,也可以理解为站点
context:对应web应用
wrapps:最终的封装器,容器的最底层,index.jsp

Tomcat的安装

安装java

apt -y install openjdk-8-jdk-headless

把apache-tomcat安装包放到opt目录下并解压
重命名为tomcat并移到/usr/local/目录下

tomcat目录下的内容:
bin:启动和关闭脚本文件
conf:tomcat的配置文件
logs:tomcat的日志文件
webapps:保存不同项目的应用目录
work:工作目录
temp:临时文件保存目录

切换到/usr/local/bin目录下,执行
./startup.sh
#开启tomcat
netstat -antp | grep 8080
#查看端口是否正常启动

在浏览器上输入对应的网址加上8080端口,查看网页是否正常
在这里插入图片描述

配置多台虚拟主机

cd /usr/local/tomcat/webapps
mkdir test1 test2
cd test1/
vim 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>保存退出
cd ../test2
vim 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.test2.com");%></body></html>保存退出
cd /usr/local/tomcat/conf
vim server.xml<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host><Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" /></Host>保存退出
cd ../conf
./startup.sh
vim /etc/hosts192.168.42.20 www.test1.com www.test2.com保存退出

www.test1.com域名
在这里插入图片描述
www.test2.com域名
在这里插入图片描述

Tomcat的优化和动静分离

Tomcat的优化

默认的安装情况下,tomcat经常会假死的情况,所以tomcat需要进行优化
优化的三个方面
1、tomcat的配置优化
2、操作系统的内核优化
3、jvm调优

tomcat的配置优化

在tomcat的配置文件的第69<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="500"minSpareThreads="50"enableLookkups="false"disableUpploadTimeout="true"acceptCount="300"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"/>

8080: tomcat对外提供访问的默认端口
protocol: 默认的协议就是http/1.1
connectionTimeout:连接的超时时间 20000毫秒=20秒

redirectPort:如果是https,自动转到8843,为https协议服务的

maxThreads=“500” :tomcat可以创建最大的线程数

minSpareThreads=“50”:空闲线程的最小数量,用来处理溢出部分的请求

enableLookkups=“false”:禁用反向解析,提高访问速度

disableUpploadTimeout=“true”:开启上传的超时时间,连接在上传期间不存在超时的情况

acceptCount=“300”:当线程都在忙碌的时候,可以排队等待处理的请求数量

processorCache=“500”:连接器可以缓存的最大处理的数量

URIEncoding=“UTF-8”:设置字符集编码

compression=“on”:开启响应内容的压缩功能

compressionMinSize=“2048”:如果文件大小超过2M(2048KB),才会进行压缩。
compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png”:支持被压缩的文件类型,包括HTML、XML、JavaScript、CSS、纯文本、GIF图像、JPEG图像和PNG图像。

在网页浏览tomcat的配置
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml第20行
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />改成
allow=.*/>
vim /usr/local/tomcat/conf/tomcat-user.xml
第22<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

可以在网页上查看tomcat的配置
在这里插入图片描述
在这里插入图片描述

操作系统的内核优化

在/etc/sysctl.conf文件配置操作系统的内核优化
net.ipv4.ip_forward=0 #开启服务数据的路由功能
net.ipv4.tcp_syncookies=1 #启动SYN cookies功能,避免tcp SYN的攻击
net.ipv4.tcp_max_tw_buckets=6000 #系统中允许出现的最大的time_wait的数量
net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse:#启用TIME_WAIT套接字快速回收和重用。
vm.overcommit_memory=0:#控制内存超额分配策略,避免OOM killer杀掉进程。
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_window_scaling=1:#启用TCP窗口缩放功能,允许大窗口的TCP传输。
net.ipv4.conf.default.accept_source_route:#不接受源路由,增加网络安全性。
kernel.sysrq=0:#禁用了内核的SysRq功能,SysRq允许在系统崩溃或出现问题时执行一些调试操作。
kernel.core_uses_pid=1:#设置核心转储文件名中包含进程ID,有助于标识是哪个进程导致了核心转储。
kernel.msgmnb 和 kernel.msgmax:#增加IPC消息队列的默认和最大大小,用于进程间通信。
kernel.shmmax 和 kernel.shmall:#调整共享内存的最大大小和分配页面数。

jvm优化

vim /usr/local/tomcat/bin/catalina.sh
第119行
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true -XX:+DisableExplicitGC"
解析
$JAVA_OPTS -server jvm服务端的优化:
-Xms2048m:设置JVM分配的最小内存为2048MB。
-Xmx2048m:设置JVM分配的最大内存为2048MB。
24G:设置成的内存
官方建议,初始大小核最大值设置成一样的值,一般是物理内存大小的一般
-Xmn768m:设置新生代的内存大小为768,建议设置成整个堆内存大小的3/8
-XX:ParallelGCThreads=2:设置资源回收器的线程数量是2
-XX:MetaspaceSize=128m:设置元空间的初始大小
-XX:MaxMetaspaceSize=512m:设置元空间的最大值,元:都是保存数据的核心信息
-Djava.awt.headless=true :启用无图形界面的模式,防止在linux系统下,web页面无法正常显示图片
-XX:+DisableExplicitGC:垃圾回收机制的信息在后台显示

在这里插入图片描述
内存匹配改变
在这里插入图片描述

在这里插入图片描述
Eden Space: 堆内存 用来存储新创建的对象,这一部分的是完全分配给新创建的对象使用

G1 Old Gen:堆内存 存储的是长时间活动的对象

Survivor Space :堆内存,存储中中生代的对象

CodeHeap ‘non-nmethods’:非堆内存,存储已经编译的代码

CodeHeap ‘non-profiled nmethods‘:非堆内存,已经被压缩的类定义

CodeHeap ‘profiled nmethods’:非堆内存当中的元数据信息

Compressed Class Space:存储已压缩的类定义

Metaspace:元数据空间的大小
在这里插入图片描述
ajp:ajp是一种协议,ajp协议:是tomcat服务端和前端的服务器进行连接的协议

作用:提供负载均衡和高效请求的转发

nio:nio技术:异步非阻塞通信

和前端服务器通信的端口是8009

Tomcat的动静分离

nginx1服务器
vim nginx.confupstream tomcat {server 192.168.42.30:8080 weight=3;server 192.168.42.40:8080 weight=2;}...location ~* \. jsp$ {proxy_pass http://tomcat;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header HOST $host;#设定后端服务器收到的请求访问的主机名,域名,ip端口。默认的proxy_pass#指定的主机名,是代理的主机名,不是客户端的真实主机名	}保存退出systemctl  restart nginx
tomcat第一台
cd /usr/local/tomcat/webapps
mkdir test1 
cd test1/
vim 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>保存退出cd /usr/local/tomcat/conf
vim server.xml<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>
tomcat第二台
cd ../test2
vim index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test1 page</title></head><body><% out.println("动态页面 2,http://www.test2.com");%></body></html>保存退出
cd /usr/local/tomcat/conf
vim server.xml<Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" /></Host>保存退出
cd ../conf
./startup.sh

在这里插入图片描述
在这里插入图片描述
按照以下配置配置出tomcat的动静分离
客户端: 浏览器

nginx1: 调度器 192.168.42.20

nginx2 静态页面 192.168.42.30

nginx3 静态页面 192.168.42.40

tomcat1: 后端服务器1 动态 192.168.42.21

tomcat2: 后端服务器2 动态 192.168.42.22

调度器
cd /usr/local/nginx/conf
vim nginx.donf#全局stream {upstream xy104 {server 192.168.42.30:80;server 192.168.42.40:80;}server {listen 81;proxy_pass xy104;}}保存退出
systemctl restart nginxnginx2的配置
cd  /usr/local/nginx/html
vim index.htmlthis is xy104保存退出
cd ../conf
vim nginx.conf#http模块upstream tomcat {server 192.168.42.21:8080;server 192.168.42.22:8080;}#server模块server {....keepalive_timeout 0;location ~* \.jsp$ {proxy_pass http://tomcat;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded-for;proxy_set_header Host $host;}....}保存退出
systemctl  restart nginxnginx3的配置
cd /usr/local/nginx/html
vim index.htmlthis is xy105保存退出
cd ../conf
vim nginx.conf
#http模块upstream tomcat {server 192.168.42.21:8080;server 192.168.42.22:8080;}#server模块server {....keepalive_timeout 0;location ~* \.jsp$ {proxy_pass http://tomcat;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded-for;proxy_set_header Host $host;}....}保存退出
systemctl restart nginxtomcat1的配置cd /usr/local/tomcat/webappsmkdir test1cd test1/vim 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>保存退出
cd /usr/local/tomcat/conf
vim server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>
cd ../bin
./shutdown.sh
./startup.shtomcat2的配置cd /usr/local/tomcat/webappsmkdir test2cd test2/vim index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test1 page</title></head><body><% out.println("动态页面 2,http://www.test2.com");%></body></html>保存退出
cd /usr/local/tomcat/conf
vim server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" />
</Host>
cd ../bin
./shutdown.sh
./startup.sh

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:进程(环境变量、程序地址空间)

目录 冯诺依曼体系结构 操作系统 设计操作系统的目的 操作系统的管理 进程 PCB fork 进程状态 进程状态查看 僵尸进程 孤儿进程 进程优先级 查看、修改进程优先级命令 竞争、独立、并行、并发 进程切换 活动队列和运行队列 活动队列 过期队列 active指针…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

SpringBoot 编程式事务使用

目录 1. 简介2. TransactionTemplate 方式3. TransactionManager 方式4. 事务传播行为5. 事务隔离级别6. 最佳实践7. 常见问题与解决方案 1. 简介 编程式事务管理是通过编写代码来管理事务&#xff0c;相对于声明式事务&#xff08;Transactional注解&#xff09;&#xff0…

uniapp连接蓝牙操作(蓝牙设备地锁)

介绍&#xff1a; 本文采用uni-app框架来创建一个简单的用户界面&#xff0c;用于搜索、连接和发送命令给蓝牙设备。 1.打开蓝牙适配器 function openBluetooth() {uni.openBluetoothAdapter({success() {uni.offBluetoothDeviceFound();// 监听新设备发现事件uni.onBlueto…

web:pc端企业微信登录-vue版

官方文档&#xff1a;developer.work.weixin.qq.com/document/pa… 不需要调用ww.register&#xff0c;直接调用ww.createWWLoginPanel即可创建企业微信登录面板 - 文档 - 企业微信开发者中心 (qq.com) 引入 //通过 npm 引入 npm install wecom/jssdk import * as ww from we…

登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢

Error response from daemon: Get "https://172.16.21.35/v2/": tls: failed to verify certificate: x509: certificate is valid for 127.0.0.1, ::1, 172.16.21.30, not 172.16.21.35 版本 v2.10.1-b7b88476 不需要从头看, 直接看最下面的成功的证书创建 这里面首…

外观模式的理解和实践

外观模式&#xff08;Facade Pattern&#xff09;是一种常用的软件设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。该模式定义了一个高层的接口&#xff0c;使得子系统更容易使用。简单来说&#xff0c;外观模式就是通过引入一个外观角色…

excel使用笔记

1.工作表1计算工作表2某列的和 假设我们有两个工作表&#xff0c;分别命名为“Sheet1”和“Sheet2”&#xff0c;我们想要求和这两个工作表中A1到A**单元格的数据&#xff0c;可以在任意一个工作表的单元格中输入以下公式&#xff1a; SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…

《应用导航设计:裂变式路由风暴来袭》——HarmonyOS开发项目时的Navigation路由奇妙使用

文章目录 应用导航设计引言概述场景示例基本实现推荐方案路由管理模块的实现页面跳转实现 业务实现中的关键点动态加载路由栈管理 应用导航设计 引言 在大型应用开发中&#xff0c;如何高效地设计应用导航&#xff0c;处理多模块间的路由跳转与解耦&#xff0c;始终是一个关键…

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

XSLT 编辑 XML

XSLT 编辑 XML 介绍 XSLT&#xff08;可扩展样式表语言转换&#xff09;是一种用于转换XML文档的语言。它允许开发人员将XML数据转换为其他格式&#xff0c;如HTML、PDF或纯文本。XSLT通过使用XPath查询来定位XML文档中的元素&#xff0c;并对这些元素应用转换规则。在本教程…

thinkphp8自带分页bootstrap

tp8引用的是bootstrap3.4.1这个版本&#xff1b; 前端结构&#xff1a; <ul class"pagination"><li><a href"/index.php?page4"></a></li><li><a href"/index.php?page1">1</a></li>…

win服务器的架设、windows server 2012 R2 系统的下载与安装使用

文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件&#xff08;1&#xff09;新建虚拟机&#xff08;2&#xff09;设置虚拟机&#xff08;3&#xff09;打开虚拟机 windows server 2012&#xff08;4&#xff09;进…

如何在谷歌浏览器中开启安全浏览

在数字化时代&#xff0c;网络安全变得愈发重要。作为全球最受欢迎的网络浏览器之一&#xff0c;谷歌浏览器提供了多种功能来保护用户的在线安全。本文将详细介绍如何在谷歌浏览器中开启安全浏览&#xff0c;并额外提供一些有用的页面滚动设置、地址栏快捷搜索和跟踪防护的相关…

djiango DRF的使用

djiango DRF的使用 一 、初始 DRF序列化环境安装环境配置数据模型定义定义DRF序列化模型对象 二 、DRF请求和响应请求对象&#xff08;Request objects&#xff09;响应对象&#xff08;Response objects&#xff09;状态码&#xff08;Status codes&#xff09;包装&#xff0…

如何使用 Python 连接 PostgreSQL 数据库?

在Python开发中&#xff0c;连接PostgreSQL数据库是一个常见的需求。 我们可以使用多种库来实现这一功能&#xff0c;其中最常用的是psycopg2。 下面我将详细介绍如何使用psycopg2来连接PostgreSQL数据库&#xff0c;并提供一些实际开发中的建议和注意事项。 1. 使用 psycop…

计算机网络-HTTP协议

HTTP HTTP是一种不保存状态&#xff0c;即无状态的协议。HTTP协议自身不对请求和响应之间的通信进行保存。为了保存状态因此后面也有一些技术产生比如Cookies技术。 HTTP是通过URI定位网上的资源&#xff0c;理论上将URI可以访问互联网上的任意资源。 如果不是访问特定的资源…

CTFHub 命令注入-综合练习(学习记录)

综合过滤练习 命令分隔符的绕过姿势 ; %0a %0d & 那我们使用%0a试试&#xff0c;发现ls命令被成功执行 /?ip127.0.0.1%0als 发现一个名为flag_is_here的文件夹和index.php的文件&#xff0c;那么我们还是使用cd命令进入到文件夹下 http://challenge-438c1c1fb670566b.sa…

前端 下载文件时如何处理后端返回的 文件流

在前端&#xff0c;处理文件下载通常涉及到接受一个 文件流&#xff08;Blob 或者 ArrayBuffer&#xff09;&#xff0c;然后将它转换成可以下载的链接。以下是实现前端文件下载并接受文件流的一些常见方法。 1. 使用 Blob 和 URL.createObjectURL 创建下载链接 假设后端返回…

HttpSevletRequest Body信息不能被多次读取的问题

在 Java Web 开发中&#xff0c;HTTP 请求体是客户端向服务器发送数据的主要载体&#xff0c;例如表单提交、JSON 数据等。当服务器收到请求后&#xff0c;通常通过 HttpServletRequest 类获取请求体的内容。然而&#xff0c;HTTP 请求体通常只能被读取一次。这是因为请求体使用…