这篇文章给大家讲解Tomcat快速入门,Tomcat和Nginx类似,都是WEB服务器软件,只不过Tomcat是基于JAVA开发的WEB服务,主要解析JAVA代码。
Nginx仅支持静态资源解析,而Tomcat支持Java开发的web应用,还支持解析静态资源(效率不高)Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。通常清空下企业种会使用Nginx+Tomcat结合,Nginx处理静态资源,Tomcat处理动态资源。
Java环境简单介绍
Tomcat快速安装
一、安装jdk
二、安装Tomcat(下载、解压、启动)
三、配置systemctl方式启动
Tomcat配置文件
Tomcat配置虚拟主机(与Nginx同理)
Tomcat HTTP请求过程
Tomcat管理页面
Tomcat部署zrlog项目
一、定义虚拟主机,配置tomcat文件
二、上传war包至指定目录,配置代码文件
三、创建数据库
四、访问zrlog站点进行安装
五、测试发布博客(文字+图片)
JVM介绍:Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM,虚拟机是通过软件模拟出具有完整硬件系统的功能
为什么Java需要JVM虚拟机?
早期C语言,不支持跨平台,如果C语言想要在Windows Linux Mac上运行,需要进行分别编译,那么在Linux上有很多优秀的软件,如果需要在Windows上使用需要重新编译,移植性差。
而Java则不同,Java是可以跨平台,只需要将源码进行一次编译,能够在不同的操作系统运行。
Java是如何做到的?
它只需要在Windows Linux系统上运行一个JVM,这样我们就能将Java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译,而JVM是由JRE提供的
Java环境种JRE和JDK的区别?
JRE是Java的运行环境,包含JVM
JDK是Java的开发环境,包含Java的运行环境JRE
如果说单纯的运行环境Java代码,只需要JRE足够,但是如果需要提供开发环境以及运行环境则需要JDK
yum -y install java 或者上传rpm包 rpm -ivh jdk-8u181-linux-x64.rpm
Tomcat官网:Apache Tomcat® - Welcome!
#可以在官网直接下载也可以在windows下载后导入 [root@Web01 ~]# rz -E rz waiting to receive. [root@Web01 ~]# mkdir /soft [root@Web01 ~]# tar xf apache-tomcat-9.0.73.tar.gz -C /soft/ #做软连接一方面是方便调用,一方面是如果升级,直接重新挂下软连接即可 [root@Web01 ~]# ln -s /soft/apache-tomcat-9.0.73/ /soft/tomcat [root@Web01 ~]# /soft/tomcat/bin/startup.sh #启动 #8080对外提供服务的端口,8005关闭Tomcat端口 [root@Web01 ~]# netstat -tnulp|grep java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 36724/java tcp6 0 0 :::8080 :::* LISTEN 36724/java [root@Web01 ~]# /soft/tomcat/bin/shutdown.sh #停止
[root@Web01 ~]# systemctl cat nginx #模仿着写 # /usr/lib/systemd/system/nginx.service [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)" ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)" [Install] WantedBy=multi-user.target cat >/usr/lib/systemd/system/tomcat.service<<'EOF' [Unit] Description=Apache Tomcat Server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/soft/tomcat/bin/startup.sh ExecStop=/soft/tomcat/bin/shutdown.sh ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 && /soft/tomcat/bin/startup.sh [Install] WantedBy=multi-user.target EOF [root@Web01 ~]# systemctl daemon-reload #加进配置文件后重载 [root@Web01 ~]# systemctl start tomcat [root@Web01 ~]# netstat -tnulp|grep java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 38210/java tcp6 0 0 :::8080 :::* LISTEN 38210/java [root@Web01 ~]# systemctl enable tomcat Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
tomcat软件目录结构 bin ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件) conf ---tomcat配置文件的目录(站点配置:server.xml) lib ---tomcat运行时需要加载的jar包 logs ---tomcat日志存放位置 temp ---tomcat临时存放文件路径 webapps ---tomcat默认站点目录 work ---tomcat运行时产生的缓存文件 [root@Web01 ~]# vim /soft/tomcat/conf/server.xml #配置文件 [root@Web01 ~]# sed -i '//d' /soft/tomcat/conf/server.xml #删除注释行
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml ...... #添加下面内容到默认host下面...... [root@Web01 ~]# systemctl restart tomcat [root@Web01 ~]# mkdir -p /code/tomcat/test/ROOT [root@Web01 ~]# echo 'test:koten' > /code/tomcat/test/ROOT/index.html
本地解析hosts,浏览器访问:test.koten.org:8080
用户发出一个请求,如http://test.koten.org:8080/index.jsp
Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
Engine通过请求中的主机名test.koten.org查找满足条件的虚拟主机(Host)
找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。
Tomcat中的Context与Nginx中的location定义的路径效果类似,也与alias类似
location /files/ { alias /var/www/myfiles/; }
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml ............ [root@Web01 ~]# systemctl restart tomcat [root@Web01 ~]# mkdir /code/tomcat/test/tt [root@Web01 ~]# echo 'test:tt' > /code/tomcat/test/tt/index.html #注意这里不需要ROOT目录 #经测试,先创建tt目录重启后会显示8005端口,不先创建tt目录,虽然也可以看,但是不显示8005端口,不知道这两者是否有关联
Tomcat自带的管理页面有管理功能和监控功能
1、所有的管理页面,都将权限赋予了角色,而角色的名称是固定的:manager-gui,admin-gui
2、需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的管理页面
[root@Web01 ~]# vim /soft/tomcat/conf/tomcat-users.xml ......
3、由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问
将127改成10
[root@Web01 ~]# cat /soft/tomcat/webapps/host-manager/META-INF/context.xml |grep 10 allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> [root@Web01 ~]# cat /soft/tomcat/webapps/manager/META-INF/context.xml |grep 10 allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
4、重启tomcat并访问 10.0.0.7:8080
可以查看服务器的状态
在上面也可以进行一些部署
可以开启、停止、添加部署的虚拟主机
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml ............ [root@Web01 ROOT]# systemctl restart tomcat [root@Web01 ROOT]# netstat -tnulp|grep java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 60913/java tcp6 0 0 :::8080 :::* LISTEN 60913/java
自定义日志格式:
%a 远程的IP地址 %A 本地的IP地址 %b 发送的字节数,不包括HTTP头,如果没有发送字节则显示"-" %B 发送的字节数,不包括HTTP头 %h 远程主机名 %H 请求协议 %l 小写的L,远程逻辑从identd的用户名,总是返回"-" %m 请求方法 %p 本地端口 %q 查询字符数,在前面加上一个"?",如果它存在则使用%q参数记录该字符串,否则用一个空字符串标识查询字符串不存在 %r 请求行,协议头第一行,包括请求方法,uri和http协议版本 %s 响应的HTTP状态码 %S 用户会话ID %t 日期和时间,在通用日志格式 %u 远程用户身份验证 %U 请求的URL路径 %v 本地服务器名 %D 处理请求的时间(以毫秒为单位) %T 处理请求的时间(以秒为单位) %I 大写的i,当前请求的线程名称
zrlog官网:ZrLog 博客程序
[root@Web01 ~]# mkdir -p /code/tomcat/zrlog/ROOT [root@Web01 ~]# cd /code/tomcat/zrlog/ROOT [root@Web01 ROOT]# wget https://dl.zrlog.com/release/zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war&ref=index [root@Web01 ROOT]# jar -xvf zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war [root@Web01 ROOT]# rm -rf zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war #用完即使删掉,防止后续迁移时会再次解压,覆盖已经部署甚至已有数据的文件
[root@DB01 ~]# mysql -uroot Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 11408 Server version: 5.5.68-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database zrlog charset utf8; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on *.* to 'koten'@'%' identified by 'koten.vip'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> quit Bye
后台成功上传,前台正常显示
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!