tomcat就是经常使用的的中间件之一,tomcat自己是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中。而tomcat自己的运行也依赖于jdk环境。 tomcat常应用于lnmt环境php
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。java
Tomcat服务器是一个免费的开放源代码的Web应用服务器,运行jsp和servlet,使用HTTP与客户端(一般是浏览器)进行通讯。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是不少的场合下被广泛应用,是开发和调试JSP程序的首选,由于Tomcat技术先进,性能稳定,成为目前比较流行的Web应用服务器,Tomcat是应用(java)服务器,他只是一个servlet容器,是apache的扩展,但他是独立运行的.python
tomcat软件自己是Java语言编写的,因此须要jdk的环境才能运行,且java语言编写的应用程序在启动时会有一个编译的过程,因此java语言编写的应用程序的启动速度相对于C语言编写的应用程序会慢一些。linux
# 经常使用的编写动态页面的语言: PHP——> LAMP LNMP # 借助于php的应用程序实现对php页面的解析java(jsp -- java server pages) # 开源工具<网站服务器> # WebLogical > Oracl 重量级商业工具,用于解析大型java项目 # WebSphere > IBM 重量级商业工具 # resin Python > CAUCHO 使用Django模块,编写动态页面 # Jboss
java三大平台,1999年SUN发不了基于java的三个平台技术标准。nginx
JAVASE: java标准平台,容许开发和部署在桌面,服务器,嵌入式环境和实时环境中使用的JAVA应用程序。好比作一个桌面版QQ。程序员
JAVAEE: java企业平台,可帮助开发和部署可移植,健壮,可伸缩且安全的服务器端java应用程序。EE是基于SE基础上构建的,提供web服务,组件模型,挂了你和通讯API,能够用来实现企业级的面向服务体系结构和web等应用程序web
JAVAME: java微型平台,也叫K-JAVA,用来开发和部署能够只和嵌入式设备(好比手机和打印机等).apache
Java经过产生一种和系统平台无关的文件,而后再在各个平台的电脑上撞上模拟器(JVM虚拟机),让跨平台的文件运行在模拟器里面。bootstrap
# 原理: # 1.编译以后会生成与平台无关的字节码文件 # 2.得以来不一样平台的虚拟机(JVM) # JVM是不跨平台
# JRE: java运行环境,若是运行java程序,就须要JRE支持,JRE里面包含JVM # JDK: java开发工具,包含java程序的全部工具,如javac和java等,JDK里包含JRE。 # JVM是JAVA语言的运行环境,也是java最具吸引力的特性之一。JVM用于读取并处理编译过的与平台无关的字节码class文件,从而实现java的移植性。可是JVM是不跨平台的。 # JVM是java程序的解释和执行器.
这里的nginx即作静态页面的响应又完成反向代理的功能 client Nginx代理 tomcat tomcatvim
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))
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))
# 8005: 是tomcat自己的端口,本地管理端口号 # 8080: 主端口号,是tomcat负责创建http链接的端口,经过浏览器访问tomcat服务器的web 应用时,使用此端口 # 8009: 是tomcat负责和其余http服务器创建链接的端口,ajp的编辑器
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 服务启动不起来查看这个日志文件
# 顶级组件 Server,表明整个Tomcat容器 # 服务类组件 Service,组织Engine和Connector,里面只能包含一个Engine # 链接器组件 Connector,有HTTP、HTTPS、A JP协议的链接器 # 容器类 # Engine、Host、Context都是容器类组件,能够嵌入其它组件,内部配置如何运行应用程序。 # 内嵌类 # 能够内嵌到其余组件内,valve、logger、realm、loader、manager等。以logger举例,在不一样容器组件内定义。 # 集群类组件 # listener、cluster
名称 | 说明 |
---|---|
Server | tomcat的进程示例 |
Connector | 负责客户端的HTTP/HTTPS/AJP等协议的链接,一个Connter只属于一个Engine |
Service | 用来组织Connter和Engine之间的关系 |
Engine | 响应并处理用户请求。一个引擎能够绑定多个Connter。 |
Host | 虚拟主机 |
Context | 应用的上下文,配置路径映射path=>directory |
将应用程序文件和其依赖的类资源都放到主页面路径里
部署的两种方式:
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 &
/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的文件主页面
在实际工做中,当程序员将成千上万的jsp格式的文件,要一个一个传输过来很是的慢,因此须要文件的归档)
.war:webapp; (若是从程序员那里获得的是.war格式的文件,则直接放在主页面目录下就能够了,系统会自动展开的) .jar:EJB的类打包文件(类库); .rar:资源适配器类打包文件; .ear:企业级webapp;
/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 "%r" %s %b" />:日志的格式: %h 客户端的ip %l 客户端的用户名 %u 基于密码认证的用户名 %t 访问的时间 " 双引号 %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是一个jsp/server容器,三种运行模式,BIO,NIO和APR.HTTP协议; # Tomcat的链接器有两种: HTTP和AJP # AJP:面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用通讯通道;
主要有如下特征:
1.在快速网络有较好的性能表现,支持数据压缩传输;
2.支持SSL,加密及客户端证书;
3.支持Tomcat实例集群;
4.支持在Apache和Tomcat之间的重用;
BIO
NIO
APR