zoukankan      html  css  js  c++  java
  • 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的站点目录下即可部署完成

  • 相关阅读:
    二柱子四则运算程序
    测绘软件使用感受
    二分图的最大匹配、完美匹配和匈牙利算法(转载)
    serialVersionUID的用处(转载)
    RMQ(模板)
    codeforces 825E
    红黑树
    SQL 范式(转载)
    java 移位运算
    [Hnoi2010]Bounce 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/liushiya/p/13532330.html
Copyright © 2011-2022 走看看