tomcat详细介绍

tomcat是java语言编写的软件
JVM是java虚拟机的缩写
java虚拟机本质就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。
java语言的可移植性正是建立在java虚拟机的基础上。任何平台只要装有针对该平台的java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是一次编译处处运行

关于不同语言的编译:
c语言(编译性语言):源码 不同的CPU架构 需要相同的代码根据不同的操作系统进行重新编译
java语言(一次编译处处运行):jdk包含java虚拟机;java代码运行在java虚拟机中;不同的操作系统可以使用相同的java代码 ,只是需要不同的jdk;java虚拟机提供了相同的环境;

tomcat基于java开发的web服务

tomcat和nginx的区别:
nginx仅支持静态资源,而tomcat则支持java开发的jsp动态资源和静态资源
nginx适合做前端负载均衡,而tomcat适合做后端应用服务处理
通常情况下,企业会使用nginx+tomcat结合使用,由nginx处理静态资源,tomcat处理动态资源

nginx+PHP处理动态资源
tomcat单独就可以处理动态资源

JVM JRE jdk三者的区别:
1、JVM是java虚拟机
2、JRE 是java的运行环境(包含java虚拟机)
3、jdk是java的开发工具(包含JRE(JRE包含java虚拟机))

tomcat快速安装

1、rpm方式安装jdk
上传软件包到/opt目录下
链接:https://pan.baidu.com/s/1tm1sxTO7bo40S_vcLuZZnw
提取码:ctk7
链接:https://pan.baidu.com/s/1n4g2C2wLlfahFoSFo0GPqA
提取码:opru

jdk的下载去Oracle官网下载
https://www.oracle.com/cn/java/technologies/javase/javase-downloads.html
tomcat去清华源可以下载或者去tomcat官网
http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/

在这里插入图片描述

rpm -ivh  jdk-8u102-linux-x64.rpm 
mkdir   /app/
tar xf  apache-tomcat-8.0.27.tar.gz  -C  /app/
/app/apache-tomcat-8.0.27/bin/startup.sh 

2、tomcat启动慢解决方案
查看没优化之前的启动时间

[root@tomcat02 opt]# grep  'Server startup'  /app/apache-tomcat-8.0.27/logs/catalina.out 
22-Jun-2020 06:38:39.904 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 558 ms

优化方案
解决tomcat启动时产生session随机数作为id导致启动慢的问题

vi /usr/java/jdk1.8.0_102/jre/lib/security/java.security
117 securerandom.source=file:/dev/urandom

tomcat目录结构

bin 主要包含启动关闭tomcat的脚本和依赖文件 
conf tomcat配置文件目录
lib   tomcat运行需要加载的jar包 类似于PHP的模块概念
LICENSE 通知信息
logs 在运行过程中产生的日志文件
NOTICE  通知版本信息
RELEASE-NOTES 版本特性
RUNNING.txt 帮助文件
temp 存放临时文件 上传的代码包解压时会临时存放在temp目录下
webapps 站点目录
work tomcat运行时产生的缓存文件

核心配置文件
/app/apache-tomcat-8.0.27/conf/server.xml

在这里插入图片描述
原理图解释:
1、整个tomcat就是一个server
2、connector连接器:支持HTTP https ajp三种协议 不同的协议不同的端口
3、连接器将请求转发给 engine引擎 引擎处理请求,默认引擎是catalina,匹配host区域站点

用户访问tomcat代理(proxy),代理通过请求头将访问连接抛给后端连接器,连接器通过service的配置将请求抛给后端引擎,引擎匹配host站点

一个tomcat实例一个server
一个server中包含多个connector,connector的主要功能是接受、响应用户请求
service的作用:将connector关联到engine(Catalina引擎中)

<Server port="8005" shutdown="SHUTDOWN"> 区域
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

资源区域

 <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

连接器区域

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

host区域 类似于nginx中的站点区域

tomcat部署zrlog博客项目
配置文件修改

129       <Host name="zrlog.oldboyedu.com"  appBase="/code"
130             unpackWARs="true" autoDeploy="true">
131         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log"
132                prefix="zrlog_access_log" suffix=".txt"
133                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
134       </Host>

配置文件解释

129       <Host name="域名"  appBase="站点目录"
130             unpackWARs="是否自动解压war包" autoDeploy="true">
131         <Valve className="日志级别格式" directory="日志目录"
132                prefix="日志名字" suffix=".txt"
133                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
134       </Host>

创建站点目录

mkdir  /code

放入war包

scp  10.0.0.12:/root/ROOT.war  .

重启tomcat服务

/app/apache-tomcat-8.0.27/bin/shutdown.sh 
 /app/apache-tomcat-8.0.27/bin/startup.sh

修改本地win的host文件,添加域名解析

访问

zrlog.oldboyedu.com:8080

在这里插入图片描述

安装数据库 并创库授权

mysql_secure_installation
mysql  -uroot  -p000000
create  database  zrlog;

界面操作:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

tomcat配置basic认证

效果图如下:当然了 这个是tomcat默认自带的
访问的是http://10.0.0.11:8080/host-manager

在这里插入图片描述
点击取消 获得设置用户名和密码的信息

在这里插入图片描述
编辑文件 设置密码

vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml 
 39 <role rolename="admin-gui"/>
 40 <user username="tomcat" password="123456" roles="admin-gui"/>

重启tomcat服务

/app/apache-tomcat-8.0.27/bin/shutdown.sh 
/app/apache-tomcat-8.0.27/bin/startup.sh 

输入用户名tomcat 密码123456

在这里插入图片描述

设置zrlog的basic认证

vim /code/ROOT/WEB-INF/web.xml
 28 <security-constraint>
 29   <web-resource-collection>
 30     <web-resource-name>test</web-resource-name>
 31     <!--匹配所有请求-->
 32     <url-pattern>/admin/login/*</url-pattern>
 33   </web-resource-collection>
 34   <auth-constraint>
 35     <!-- 只允许basicrole角色的用户访问 -->
 36     <role-name>test100</role-name>
 37   </auth-constraint>
 38 </security-constraint>
 39 <login-config>
 40   <!--值可以是BASIC/DIGEST/CLIENT_CERT/FORM-->
 41   <auth-method>BASIC</auth-method>
 42   <!--认证提示信息-->
 43   <realm-name>Default</realm-name>
 44 </login-config>

配置test100的角色

vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml
 39 <role rolename="admin-gui"/>
 40 <role rolename="test100"/>
 41 <user username="tomcat" password="123456" roles="admin-gui,test100"/>
 42 </tomcat-users>

重启tomcat服务

  167  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  168  /app/apache-tomcat-8.0.27/bin/startup.sh

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

在这里插入图片描述
nginx+tomcat架构

在这里插入图片描述

数据库迁移
1、nginx负载安装数据库

yum install -y  mariadb-server

2、迁移数据库
tomcat01节点上 关闭tomcat并备份数据

  173  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  174  mysqldump -uroot  -p000000  -B zrlog >zrlog.sql
  scp  zrlog.sql   10.0.0.3:/root
  systemctl stop  mariad

3、导入数据
nginx负载节点上 导入数据

mysql  -uroot -p000000 <zrlog.sql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zrlog              |
+--------------------+
授权允许网段访问
 grant all on *.* to root@'10.0.0.%' identified by "000000";

4、tomcat01节点 启动tomcat并访问测试

/app/apache-tomcat-8.0.27/bin/startup.sh

在这里插入图片描述

tomcat02部署
tomcat02删除站点数据

rm -rf /app/apache-tomcat-8.0.27/
 rm -rf /code/*
 启动tomcat
 /app/apache-tomcat-8.0.27/bin/startup.sh 

tomcat01数据复制到tomcat02

 scp -r   /app/apache-tomcat-8.0.27  10.0.0.12:/app
 scp  -r /code/*  10.0.0.12:/code/

在这里插入图片描述

修改站点目录信息 作为区分tomcat01 和tomcat02的标识

vim /code/ROOT/include/templates/default/header.jsp
 61                             <span class="slogan">tomcat02</span>


vim /code/ROOT/include/templates/default/header.jsp
61                             <span class="slogan">tomcat01</span>

在这里插入图片描述

nginx节点安装nginx 配置负载均衡

vim zrlog.conf

upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
listen 80;
server_name zrlog.oldboyedu.com;
root html;
index index.html index.htm;
location / {
  proxy_pass http://java;
  proxy_set_header Host $http_host;
 }
}


 systemctl start  nginx
 systemctl enable  nginx

nginx+tomcat架构实现https

1、上传证书

创建目录 存放证书

mkdir  /opt/cert/

2、修改nginx的zrlog.conf的配置文件

[root@lb01 cert]# cat  /etc/nginx/conf.d/zrlog.conf 
upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
  listen 443 ssl;
  ssl_certificate /opt/cert/Nginx/1_blog.oldqiang.com_bundle.crt;
  ssl_certificate_key /opt/cert/Nginx/2_blog.oldqiang.com.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;
  root html;
  index  index.html index.htm;
  location / {
  proxy_pass  http://java/;
  proxy_set_header Host $http_host;
 }
}
 server {
 listen 80;
 server_name blog.oldqiang.com;
 location / { 
 location / {
 return 302 https://blog.oldqiang.com$request_uri;
  }
 }
}

3、修改win本地host解析

10.0.0.3  blog.oldqiang.com

4、修改tomcat配置文件中的域名信息和nginx中一致

vim /app/apache-tomcat-8.0.27/conf/server.xml
129       <Host name="blog.oldqiang.com"  appBase="/code"
  211  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  212  /app/apache-tomcat-8.0.27/bin/startup.sh 

在这里插入图片描述

使用maven编译java项目

1、安装maven

rpm -ivh jdk-8u102-linux-x64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tar xf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/
ln -s /usr/local/apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
source /etc/profile

[root@tomcat01 ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_102, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_102/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

2、上传java源码 进行编译

java代码使用maven编译:jar包 war包 可能会是两种包之中的一个
注意:maven进行编译的时候,一定要在源码目录下 其他目录下找不到pom文件 会报错

mvn  package

执行编译后 会下载一些依赖 这些下载源是在国外
3、修改maven为国内源

vim /usr/local/maven/conf/settings.xml
160 <mirror>
161 <id>alimaven</id>
162 <name>aliyun maven</name>
163 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
164 <mirrorOf>central</mirrorOf>165 </mirror>
166 <mirror>167 <id>alimaven</id>
168 <mirrorOf>central</mirrorOf>169 <name>aliyun maven</name>
170 <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
171 </mirror>

不需要重启 再次进行编译即可

mvn  package

在这里插入图片描述

会在目录下生成一个target目录 在这个目录下会有war包
将war包放入tomcat的站点目录下即可部署完成

posted @ 2020-08-19 22:29  热气球!  阅读(550)  评论(0编辑  收藏  举报