Tomcat是Apache软件基金会的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat 中得到体现,Tomcat支持最新的Servlet和JSP规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
同类软件:
jboss jetty
weblogic ORACLE
商业用付费EJB
企业支持重载配置websphere IBM商业授权
coyote是tomcat的Connector框架的名字,简单说就是coyote来处理底层的socket,并将http请求、响应等字节流层面的东西,包装成Request和Response两个类(这两个类是tomcat定义的,而非servlet中的ServletRequest和ServletResponse),供容器使用
1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。
2、Connector把该请求交给它所在的service的Engine(引擎)来处理,并等待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。
Connector连接器和容器container(解析java代码)
①yum方式安装加载epel源,版本目前为tomcat7.0
yum -y install java 这个是安装jdk的
可以先yum info tomcat 查看当前epel源存在的版本
②二进制方式安装直接下载,部署好java环境,即可运行(推荐)
③源码方式安装需要下载Apache Ant进行编译安装
①上传获取软件
②部署java环境
tar zxvf jdk-8u192-linux-x64.tar.gz
mkdir /usr/local/java
mv jdk1.8.0_192 /usr/local/java/
#tomcat配置环境变量的两种方式两种使用其中一种即可
#第一种tomat依赖JAVA_HOME环境变量,通过导入shell脚本
echo "export JAVA_HOME=/usr/local/java/" >> /etc/profile
添加环境变量
./etc/profile
和source /etc/profile 一样,都是让配置立即生效
#第二种tomcat依赖java环境变量
echo"PATH=/usr/local/java/bin:$PATH" >> /etc/profile
source /etc/profile
#第三种tomcat依赖JRE_HOME变量
echo "export JR_HOME=/usr/local/java/jre" >> /etc/profile
如果配置JAVA_HOME路径配置到jdk下就可以,不需要配置到bin下。
如果配置java的环境变量PATH,就指定到bin下。
如果启动tomcat,遇到如下问题
①没有安装jre jdk
②环境变量没有配置
③启动的软件找不到需要的java相关软件
#部署tomcat
tar xvf apache-tomcat-9.8.11.tar.gz
mv apache-tomcat-9.0.11 /usr/local/tomcat
安装完成访问tomcat官网测试是否安装成功
服务器ip:8080
如果需要更换jdk,先 killall java cd到bin目录yum remove java*
卸载jdk完成之后重新上传并解压tar xvf 新的安装包 -C 指定解压目录
可以mkdir -p /usr/local/java tar xvf 新的安装包 -C /usr/local/java
bin存放启动和关闭Tomcat的脚本文件
conf存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml
lib存放Tomcat服务器所需的各种JAR包文件
logs 存放Tomcat执行时的日志文件
temp 此目录是tomcat存放的临时文件
webapps tomcat默认存放应用程序的目录,好比apache的默认网页存放路径是/var/www/html一样work用于存放JSP应用程序在部署时编译后产生的class文件
docs tomcat文档
examples tomcat自带的一个独立的web应用程序例子
host-manager tomcat的主机管理应用程序(虚拟机服务器)
manager tomcat的管理应用程序
ROOT指tomcat的应用程序的根,如果应用程序部署在ROOT中,则可直接通过http://ip:port访问到
catalina.policy 配置tomcat对文件系统中目录或文件的读、写执行等权限,及对一些内存,
session等的管理权限
catalina.prloperties 配置tomcat的classpath等
context.xml tomcat的默认context容器
logging.properties 配置tomcat的日志输出方式(注意是运行日志,不是访问日志)
server.xml tomcat的主配置文件(修改端口号8080)
tomcat-users.xml tomcat的角色(授权用户)配置文件
web.xml tomcat的应用程序的部署描述符文件(配置虚拟机域名绑定)
tomcat的相关管理命令在$prefix/bin目录下
经常使用的命令: ./version.sh
catalina.sh主命令脚本
configtest.sh检测配置文件
shutdown.sh关闭
startup.sh启动
version.sh查看版本
测试启动tomcat
/usr/local/tomcat/bin/startup .sh
ps aux |grep tomcat 查看进程
netstat -lntp |grep 8888 查看端口号
在/etc/init.d/目录下添加一个tomcat脚本,用于管理服务
vim catalina.sh
另外一种通过wc统计字节数的脚本判断方法
通过判断后台启动字符的方法不行,因为进程里面没有tomcat字符
启动级别和优先级。
012345:表示在2、3、4、5运行级别上启动;80:表示启动顺序;90:表示关闭顺序。
优先级范围是0-100,数字越大,优先级越低。
CentOS7是把脚本放在
将脚本放置/etc/rc.d/init.d路径
0 关机
1 为单用户模式,就像Win下的安全模式类似。
2 为多用户模式,但是没有网络连接。
3 为完整的多用户模式,是标准的运行级,命令行模式。
4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 带图像界面的多用户模式。
6 为重启,运行init 6机器就会重启。
可以通过ip:8080/examples 测试JSP Servlets WebSocket
tomcat单实例运行多个tomcat应用的案列
①建立项目目录并写入测试文件
测试文件是写入项目根目录ROOT
echo "test" >> index.html
②编辑配置文件
shell > /usr/local/tomcat/ conf/ server.xml
③检测配置并重启
service tomcat configtest
service tomcat restart
④访问主机解析域名
Tip:
项目源码:|
①jsp jsp=>java代码=>class字节码=>加载jvm运行=>解析字符串=>container容器=>connector连接=>浏览器
403根据提示操作
第一步:注释掉访问ip限制
vim context.xml
最好把中间两行注释掉
第二步:创建用户和密码开启访问权限
修改完成之后重启服务就可以正常访问服务器状态
服务器状态面板可以看到服务器一些相关信息,还能控制服务器的启动和关闭
第一步:根据提示修改host-manager目录下的context.xml
和服务器状态一样都是注释掉访问限制
第二步:根据页面提示和 Server Status一样修改对应的tomcat-users.xml
根据提示添加用户和角色就行
实际业务环境中,用户是直接通过域名访问。基于协议一般是http、https等。默认tomcat运行在8080端口。一般会通过前端服务器反向代理到后端tomcat的方式,来实现用户可以直接通过域名访问到tomcat的webapps
动静分离:动态页面的请求交由后端处理(tomcat+java),静态资源直接返回
502就是后端服务器出问题了 tomcat或者php
解决方案:
当nginx和tomcat网站根目录一致的情况,注意nginx是否有权限读到tomcat网站目录的权限。—般性解决方案网站目录文件夹,赋予一个公共用户www
cd /usr/ local/tomca
chown -R www : www webapps
nginx反向代理用户看到的service都是nginx
随着业务的发展,单实例服务已经不能够满足业务使用需要
pv页面访问数量
qps 每秒查询次数 并发量
DAU每日活跃用户数
单实例无法满足,扩容为多实例
常见的业务运行方式
单实例单应用一个tomcat—一个webapps
单实例多应用一个tomcat多个webapps host
多实例单应用多个tomcat同一个webapps
多实例实现方式:
①多台服务器一个运行一个实例(性能好)
②单台服务器运行多个实例(监听不同的端口,性价比高)伪集群
多实例多应用
server04 nginx负载均衡
server01 tomcat1
server03 tomcat2
实施步骤:
①复制虚拟机,多实例
两台tomcat里项目里的内容要一致
在server03上配置和servero1—样的实现
1、建立项目文件夹目录,绑定host主机域名
2、nginx做反向代理
②配置nginx负载均衡
server04配置负载均衡vim nginx.conf 只用安装nginx就行,其他两台web服务器是安装tomcat的
不用安装 nginx
upstream tomcat {
server 192.168.17.102:8080;
server 192.168.17.101:8080;
}
server {
listen 80;
server_name tomcat.devops.com;
location / {
#分发到两台server
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
转发也是80nginx端口httpd,查看状态
访问域名查看负载均衡轮询效果,可以把其中一个项目文件内容修改一下
把nginx关闭,然后配置文件里面的80端口无法转发到8080.
动态和静态资源都实现负载均衡
哪个域名绑定在哪台服务器上就走哪个集群,如果条件允许静态资源负载均衡也需要重新配置一台服务器
ZrLog是使用Java开发的博客/CMS程序,具有简约,易用,组件化,内存占用低等特点。自带Markdown编辑器,让更多的精力放在写作上。
https://github.com/94fzb/zrlog
建立项目目录,上传项目文件ROOT.war包
绑定域名在/usr/local/tomcat/conf目录下的server.xml文件中
绑定域名之后可以prefix="blog.access_log" suffix=".txt" 开启配置日志路径
解析域名千万注意必须解析单例服务器,因为负载均衡服务器是找不到项目位置的(只是做请求的分发)
单例服务器就是web服务器
403就是没有权限的意思
chown -R www:www webapps/ 授予文件权限
查看web服务器的访问日志可以测试负载均衡是否成功
cat /usr / local/nginx / logs/access . log