欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tomcat详细介绍

程序员文章站 2022-07-14 10:47:42
...

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/

tomcat详细介绍

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启动慢解决方案
查看没优化之前的启动时间

[aaa@qq.com 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

tomcat详细介绍
原理图解释:
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

tomcat详细介绍

安装数据库 并创库授权

mysql_secure_installation
mysql  -uroot  -p000000
create  database  zrlog;

界面操作:
tomcat详细介绍

tomcat详细介绍

tomcat详细介绍

tomcat配置basic认证

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

tomcat详细介绍
点击取消 获得设置用户名和密码的信息

tomcat详细介绍
编辑文件 设置密码

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

tomcat详细介绍

设置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

tomcat详细介绍
tomcat详细介绍

tomcat详细介绍
nginx+tomcat架构

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 aaa@qq.com'10.0.0.%' identified by "000000";

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

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

tomcat详细介绍

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/

tomcat详细介绍

修改站点目录信息 作为区分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>

tomcat详细介绍

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的配置文件

[aaa@qq.com 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 

tomcat详细介绍

使用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

[aaa@qq.com ~]# 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

tomcat详细介绍

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

相关标签: 小型服务 nginx