Tomcat简介

Tomcat背景

tomcat就是常用的的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中。而tomcat本身的运行也依赖于jdk环境。 tomcat常应用于lnmt环境

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。 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最新版本为9.0。

Tomcat简介

Tomcat服务器是一个免费的开放源代码的Web应用服务器,运行jsp和servlet,使用HTTP与客户端(通常是浏览器)进行通信。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍应用,是开发和调试JSP程序的首选,因为Tomcat技术先进,性能稳定,成为目前比较流行的Web应用服务器,Tomcat是应用(java)服务器,他只是一个servlet容器,是apache的扩展,但他是独立运行的.

tomcat软件本身是Java语言编写的,所以需要jdk的环境才能运行,且java语言编写的应用程序在启动时会有一个编译的过程,所以java语言编写的应用程序的启动速度相对于C语言编写的应用程序会慢一些。

# 常用的编写动态页面的语言: PHP——> LAMP  LNMP
# 借助于php的应用程序实现对php页面的解析java(jsp -- java server pages) # 开源工具<网站服务器> # WebLogical > Oracl 重量级商业工具,用于解析大型java项目
# WebSphere > IBM 重量级商业工具
# resin Python > CAUCHO 使用Django模块,编写动态页面
# Jboss

JAVA简介

了解java吗?

java三大平台,1999年SUN发不了基于java的三个平台技术标准。

​ JAVASE: java标准平台,允许开发和部署在桌面,服务器,嵌入式环境和实时环境中使用的JAVA应用程序。比如做一个桌面版QQ。

​ JAVAEE: java企业平台,可帮助开发和部署可移植,健壮,可伸缩且安全的服务器端java应用程序。EE是基于SE基础上构建的,提供web服务,组件模型,挂了你和通信API,可以用来实现企业级的面向服务体系结构和web等应用程序

​ JAVAME: java微型平台,也叫K-JAVA,用来开发和部署可以只和嵌入式设备(比如手机和打印机等).

java是如何跨平台的?

Java通过产生一种和系统平台无关的文件,然后再在各个平台的电脑上撞上模拟器(JVM虚拟机),让跨平台的文件运行在模拟器里面。

# 原理:
# 1.编译之后会生成与平台无关的字节码文件
# 2.得以来不同平台的虚拟机(JVM)
# JVM是不跨平台
JRE,JDK,JVM分别是什么?
#    JRE:  java运行环境,如果运行java程序,就需要JRE支持,JRE里面包含JVM
# JDK: java开发工具,包含java程序的所有工具,如javac和java等,JDK里包含JRE。
# JVM是JAVA语言的运行环境,也是java最具吸引力的特性之一。JVM用于读取并处理编译过的与平台无关的字节码class文件,从而实现java的移植性。但是JVM是不跨平台的。
# JVM是java程序的解释和执行器.

Tomcat常见的架构:

  1. tomcat本身即解析动态页面,又解析静态页面,适用于访问量极小的情况 client tomcat
  2. 静态页面的请求由httpd负责;动态页面,配置apache将请求转交给tomcat来完成,整合apache和tomcat需要Mod_jk的模块。这两款软件都是apache组织编写的,所以兼容性较好。

    http://tomcat.apache.org/download-connectors.cgi client HTTPD tomcat
  3. 客户端访问的是静态页面直接由nginx解析;动态页面,使用nginx的反向代理功能,代理到后端的tomcat服务器上面,由tomcat来响应客户端的动态页面。当然nginx的代理也可以开启缓存功能,将后端tomcat服务器上经常访问的页面缓存到本地,来提高响应效率。

这里的nginx即做静态页面的响应又完成反向代理的功能 client Nginx代理 tomcat tomcat

  1. nginx只是做代理使用,client访问静态页面,代理到后端的httpd,jsp的动态页面代理到tomcat,实现网站页面的动静分离

yum安装Tomcat

curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
yum install java-1.8.0-openjdk
yum install tomcat-webapps tomcat-admin-webapps
systemctl start tomcat
ss -antp |grep java
LISTEN 0 100 :::8009 :::* users:(("java",pid=7979,fd=50))
LISTEN 0 100 :::8080 :::* users:(("java",pid=7979,fd=49))

tar包安装Tomcat

1.安装JDK环境

# CentOS7安装Java,有tar包和rpm包两种
1>. rpm -ivh jdk-8u121-linux-x64.rpm
2>. tar xvf jdk-8u151-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_151/ jdk
tail -2 /etc/profile
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

2.安装Tomcat

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
tar xvf apache-tomcat-8.5.47.tar.gz -C /usr/local/
ln -s /usr/local/apache-tomcat-8.5.47/ /usr/local/tomcat
tail -1 /etc/profile
export CATALINA_HOME=/usr/local/tomcat source /etc/profile
env |grep -i home
CATALINA_HOME=/usr/local/tomcat
HOME=/root # 查看熵池的大小:
cat /proc/sys/kernel/random/entropy_avail 180
增加熵池大小,解决Tomcat在CentOS 7巨慢的问题 # 安装rng服务,增大熵池
yum -y install rng-tools
systemctl start rngd && systemctl enable rngd
# 启动服务访问Tomcat页面快一百倍..

3.启动Tomcat

/usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
ss -antp |grep java
LISTEN 0 100 *:8009 *:* users:(("java",pid=857,fd=58))
LISTEN 0 100 *:8080 *:* users:(("java",pid=857,fd=53))
LISTEN 0 1 127.0.0.1:8005 *:* users:(("java",pid=857,fd=73))
Tomcat三个端口
# 8005:    是tomcat本身的端口,本地管理端口号
# 8080: 主端口号,是tomcat负责建立http连接的端口,通过浏览器访问tomcat服务器的web 应用时,使用此端口
# 8009: 是tomcat负责和其他http服务器建立连接的端口,ajp的编辑器
Tomcat启动脚本
vim /etc/init.d/tomcat
#!/bin/bash
#chkconfig: 2345 96 14
export JAVA_HOME=/usr/java/jdk1.8.0_121
export CATALINA_HOME=/usr/local/tomcat
exec $CATALINA_HOME/bin/catalina.sh $* # $*将脚本本身自带的参数全部传递过来,就是catalina.sh --help看到的所有的参数start stop等 chmod +x /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
service tomcat start
systemctl status tomcat
tail -f catalina.out 服务启动不起来查看这个日志文件

Tomcat组件分类及内部组成

组件分类
# 顶级组件
Server,代表整个Tomcat容器 # 服务类组件
Service,组织Engine和Connector,里面只能包含一个Engine # 连接器组件
Connector,有HTTP、HTTPS、A JP协议的连接器 # 容器类
# Engine、Host、Context都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。 # 内嵌类
# 可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内定义。 # 集群类组件
# listener、cluster
Tomcat内部组成

名称 说明
Server tomcat的进程示例
Connector 负责客户端的HTTP/HTTPS/AJP等协议的连接,一个Connter只属于一个Engine
Service 用来组织Connter和Engine之间的关系
Engine 响应并处理用户请求。一个引擎可以绑定多个Connter。
Host 虚拟主机
Context 应用的上下文,配置路径映射path=>directory

部署(deploy)webapp的相关操作

将应用程序文件和其依赖的类资源都放到主页面路径里

部署的两种方式:

1.自动部署: auto deploy

2.手动部署:

# 冷部署:  把webapp复制到指定的位置,而后才启动tomcat;
# 热部署: 在不停止tomcat的前提下进行部署: (支持热部署)需要依赖以下工具 # 部署工具: manager,ant脚本,tcd(tomcat client deployer)等
# undeploy: 拆除(反部署),停止webapp,并从tomcat实例上卸载webapp;

Jar包介绍

#很多时候开发会给我们一个jar包,让我们进行运行,命令如下
nohup java -jar jar包名称.jar > user.out &

Tomcat目录介绍

/usr/local/tomcat/bin
# 工具,脚本及启动时用到的类(二进制程序startup.sh shutdown.sh catalina.sh) /usr/local/tomcat/conf
# 配置文件 server.xml /usr/local/tomcat/lib
# 库文件,存放jar包,用来连接后端不同的应用程序,相当于httpd的模块文件 /usr/local/tomcat/logs
# 日志文件目录 /usr/local/tomcat/webapps
# 默认的应用程序目录 /usr/local/tomcat/work
# 工作目录,存放编译后的字节码文件 /usr/local/tomcat/temp
# 临时文件目录 /etc/tomcat
# 主配置配置文件目录: /etc/tomcat/ /etc/tomcat/server.xml
# 主配置文件 /usr/share/tomcat/webapps/
# 两个路径是链接的,里面目录都一样 /var/lib/tomcat/webapps/
# 这两个目录下文件和/usr/share/tomcat/webapps/下是同步的 [http://39.108.140.0:8080](http://39.108.140.0:8080/) # 打开浏览器系统默认会显示/var/lib/tomcat/webapps/ROOT/index.jsp的文件主页面

webapp归档格式:

在实际工作中,当程序员将成千上万的jsp格式的文件,要一个一个传输过来非常的慢,所以需要文件的归档)

        .war:webapp;
(如果从程序员那里得到的是.war格式的文件,则直接放在主页面目录下就可以了,系统会自动展开的)
.jar:EJB的类打包文件(类库);
.rar:资源适配器类打包文件;
.ear:企业级webapp;

Tomcat核心文件

/usr/local/tomcat/conf/server.xml
<Server> -----------> Tomcat实例
<Service> -----------> 定义网站服务
<Connector /> -----------> 定义对外提供服务的端口
<Engine> -----------> Tomcat虚拟主机运行的环境
<Host> -----------> Tomcat虚拟主机
<Context /> -----------> 某应用程序的数据文件存放目录
</Host>
</Engine>
</Service>
</Server> # Server: tomcat的一个实例,实际部署tomcat多实例时,每一个实例都需要准备配置文件
# Service: 用于定义tomcat的项目名称,一般无需修改
# Connector: 连接器,根据需要可以有多个,8080端口在这里定义的
# Engine:引擎用于定义客户端访问时,使用哪个虚拟主机响应
# Host:配置tomcat的虚拟主机
# Context:
# 应用程序的数据文件存放的目录名字为ROOT的时候是不需要写的,但是如果不是ROOT的名字就必须要写context的配置
/web/app/ROOT 不需要context
/web/app/test 需要context
Listener className:tomcat在实现时调用的内部代码的类,调用类来实现某些功能
8009端口:AJP协议用的,是tomcat和apache结合使用的,现在用的不多了,可注释掉
pattern="%h %l %u %t &quot;%r&quot; %s %b" />:日志的格式:
%h 客户端的ip
%l 客户端的用户名
%u 基于密码认证的用户名
%t 访问的时间
&quot 双引号
%r http请求报文里面第一行内容 uri地址和http协议的版本
%s 状态码
%b http报文大小
Tomcat前面有负载均衡的时候获取用户真实IP地址
在tomcat配置文件/conf/server.xml下配置
className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
systemctl restart tomcat

Tomcat三种运行模式

# Tomcat是一个jsp/server容器,三种运行模式,BIO,NIO和APR.HTTP协议;
# Tomcat的连接器有两种: HTTP和AJP
# AJP:面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用通信通道;

主要有以下特征:

1.在快速网络有较好的性能表现,支持数据压缩传输;

2.支持SSL,加密及客户端证书;

3.支持Tomcat实例集群;

4.支持在Apache和Tomcat之间的重用;

BIO

  • 使用传统的javaI/O操作,基于java的http/1.1连接器,Tomcat7以下版本默认以BIO模式运行的。当中性能最低;

    一个线程处理一个请求,缺点:并发量很高时,线程数较多,浪费资源;

NIO

  • 是javaSE1.4及后续版本提供的一种新的I/O操作方式,基于缓冲区,并能提供非阻塞I/O操作的Java API,他拥有比传统I/O操作更好的并发运行性能;
  • 利用java的异步请求IO处理,可以通过少量的线程处理大量的请求;8默认NIO;

APR

  • Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理问阿金读取或网络传输操作,大大提高Tomcat对静态文件处理性能,高并发应用首选模式;
  • APR是原生C语言编写的非阻塞I/O,利用了操作系统的网络连接功能,连接很快,需要先安装APR和Native,若直接启动就支持APR,能大幅度提升性能;

    需要以下三个组件支持:

    APR library, 自带的Tomcat-native, OpenSSL libraries;
  • 根据工作分为: 作为独立服务器和应用程序服务器;

01 . Tomcat简介及部署的更多相关文章

  1. 01 . Redis简介及部署主从复制

    简介 Remote Dictionary Server, 翻译为远程字典服务, Redis是一个完全开源的基于Key-Value的NoSQL存储系统,他是一个使用ANSIC语言编写的,遵守BSD协议, ...

  2. 01 . Nginx简介及部署

    Nginx简介 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开 ...

  3. 01 . RabbitMQ简介及部署

    RabbitMQ简介 ​ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它 ...

  4. 01 . Memcached简介及部署

    Memcached简介 memcached是一个自由开源,高性能,分布式内存对象存储系统 基于内存的key-valued存储,用来存储小块的任意数据(字符串,对象) 他是一个简洁的key-value存 ...

  5. 01 . Mysql简介及部署

    Mysql数据库简介 什么是数据? ​ 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材,数据是信息的表现形式和载体,可以是符号,文字,数字,语音,图 ...

  6. 01 . MongoDB简介及部署配置

    简介 什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...

  7. Tomcat简介、安装部署、上线网站

    资源池 本章资源:点击这里 提取码:upbf tomcat官网:https://tomcat.apache.org/ jpress博客系统安装包下载地址(不是官网):https://gitee.com ...

  8. tomcat -> 简介&部署

    Tomcat 简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开 ...

  9. 01 HDFS 简介

    01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...

随机推荐

  1. libevent(五)event

    libevent使用struct event来表示一个事件. #define evutil_socket_t int #define ev_uint8_t unsigned char #define ...

  2. 【FPGA技巧篇一】FPGA设计的四种常用思想与技巧之一 :乒乓操作

    本文篇章将讨论一下的四种常用 FPGA 设计思想与技巧: 乒乓操作. 串并转换. 流水线操作. 数据接口同步化, 都是 FPGA 逻辑设计的内在规律的体现, 合理地采用这些设计思想能在FPGA设计工作 ...

  3. Qt保持窗口在最上方

    原文:https://blog.csdn.net/hl1hl/article/details/85244451 前言 在Qt开发桌面软件的过程中,根据开发的需求不同,我们经常需要将弹出窗口,一般常见的 ...

  4. FOC: Park变换电角度误差带来的影响

    关于坐标变换已经在这篇博客中提到<FOC中的Clarke变换和Park变换详解>,在FOC算法的实际调试过程中会遇到很多与理论有所偏差的问题,往往这些情况下,需要对理论有较深刻的理解,才能 ...

  5. [hdu1023]递推

    http://acm.hdu.edu.cn/showproblem.php?pid=1023 如果把栈里面的元素个数表示成状态,每一步(共2 * n步)的状态构成的状态序列的种数就是答案,令dp[i] ...

  6. Pytorch使用分布式训练,单机多卡

    pytorch的并行分为模型并行.数据并行 左侧模型并行:是网络太大,一张卡存不了,那么拆分,然后进行模型并行训练. 右侧数据并行:多个显卡同时采用数据训练网络的副本. 一.模型并行 二.数据并行 数 ...

  7. 数据库-第八章 数据库编程-8.1 嵌入式SQL

    嵌入式SQL 一.嵌入式SQL的处理过程 1.嵌入式SQL语句的基本格式 2.嵌入式SQL的处理过程 3.主语言访问数据库的基本步骤 ⅰ建立数据库连接 ⅱ定义必要的主变量和数据通信区 ⅲ访问数据库并返 ...

  8. python 基础知识1

    一.编译型与解释性区别: 编译型:一次性将全部的代码编译成二进制文件.(如:C.C++) 优点:运行效率高 缺点:开发速度慢,不能跨平台. 解释型:当程序运行时,从上至下一行一行的解释成二进制.(如p ...

  9. CODING 敏捷实战系列课第三讲:可视化业务分析

    业务分析处在开发过程的上游,提高业务分析的质量,可以减少后续开发.测试和集成过程中的反复确认,场景遗漏.采用可视化的业务分析工具箱可以大幅度避免文字版的业务需求描述所带来的不够完整,有误解等问题.CO ...

  10. 07JAVA基础面向对象-继承/多态

    一.继承 1.概念 子类的共性 重用现有类并在此基础上进行扩展 public class 子类 extends 父类{} 2.继承中的成员访问 成员变量 成员方法 局部->本类中成员变量-> ...