tomcat详解

JAVA环境搭建

1.源码包安装java

jdk官网:http://jdk.java.net

1.在官网下载jdk或者java,这里选择jdk8版本,选择接受协议才可以进行下载
tomcat详解_第1张图片2.将下载的jdk源码包进行解压,我这里选择放在/usr/local/目录下,并且改名为java

[root@192 ~]# tar -zxf jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz 
[root@192 ~]# ls
anaconda-ks.cfg  apache-tomcat-8.5.37.tar.gz  jdk1.8.0_202  jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@192 ~]# mv jdk1.8.0_202 /usr/local/java

3.设置系统环境变量:有时配置文件不生效,再次加载文件即可

在配置文件后面添加以下几行
[root@192 ~]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSHOME=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
export PATH CLASSHOME JAVA_HOME
使配置文件生效
[root@192 ~]# source /etc/profile
检查配置文件是否生效
[root@192 ~]# java -version
java version "1.8.0_202-ea"
Java(TM) SE Runtime Environment (build 1.8.0_202-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b03, mixed mode)

tomcat安装

1.源码包安装tomcat
tomcat官网:http://tomcat.apache.org

[root@192 ~]# wget https://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
[root@192 ~]# tar -zxf apache-tomcat-8.5.37.tar.gz 
[root@192 ~]# ls
anaconda-ks.cfg  apache-tomcat-8.5.37  apache-tomcat-8.5.37.tar.gz    jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@192 ~]# mv apache-tomcat-8.5.37 /usr/local/tomcat^C
[root@192 ~]# /usr/local/tomcat/bin/startup.sh
[root@192 ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      768/sshd            
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      10145/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      10145/java               
tcp6       0      0 :::22                   :::*                    LISTEN      768/sshd     

2.浏览器输入http://localhost:8080

tomcat详解_第2张图片

tomcat配置虚拟机两种方式

一.基于不同的主机名搭建虚拟机
1.修改tomcat的配置文件

[root@192 conf]# vi server.xml
        
            ................................................................
      
      添加一下几行
       
          
      

2.创建访问目录

[root@192 ~]# mkdir /jump
[root@192 ~]# echo 'www.jump.com' > /jump/index.html
[root@192 ~]# mkdir /usr/local/tom/webapps/test
[root@192 ~]# echo 'www.jump8080.com' >  /usr/local/tom/webapps/test/index.html

3.在/etc/hosts文件添加主机名

[root@192 ~]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.126.132  www.jump.com

4.启动tomcat进行测试

[root@192 ~]# /usr/local/tomcat/bin/startup.sh
[root@192 ~]# curl http://localhost:8080/test/
www.tomcat8080.com
[root@192 ~]# curl http://www.jump.com:8080
www.jump.com

二.基于不同的端口搭建虚拟机
1.修改配置文件

[root@192 conf]# vi server.xml
    
..............................................................
    
在下面添加如下几行
    
       
         
         
                
         
         
      

2.创建访问目录

[root@192 ~]# mkdir /jump
[root@192 ~]# echo 'www.jump.com' > /jump/index.html
[root@192 ~]# mkdir /usr/local/tom/webapps/test
[root@192 ~]# echo 'www.jump8080.com' >  /usr/local/tom/webapps/test/index.html

3.启动tomcat进行测试

[root@192 conf]# /usr/local/tomcat/bin/startup.sh 
检查8080和8089端口是否启动
[root@192 conf]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      768/sshd            
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      17364/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      17364/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      17364/java          
tcp6       0      0 :::22                   :::*                    LISTEN      768/sshd            
tcp6       0      0 :::8089                 :::*                    LISTEN      17364/java 
[root@192 ~]# curl http://localhost:8080/test/
www.tomcat8080.com
[root@192 ~]# curl http://localhost:8089
www.jump.com

tomcat的server.xml文件配置

工作原理
serviceconnector组件根据浏览器的请求的协议和端口号来收集相关请求,

server.xml文件的组件

  1. 元素
    该组件定义一个tomcat实例,默认监听在8005端口以接受shutdown命令,使用telnet命令连接到该端口使用shutdown命令关闭tomcat实例。基于安全是不允许远程连接的。如果需要运行多个tomcat实例,将它监听在多个不同的端口即可。
  • address:监听端口绑定的地址。默认为localhost,既只能在localhost服务器上telnet发送shutdown命令关闭tomcat实例
  • port: 接受telnet发送shutdown指令的端口,默认为8005,设为-1可以禁掉该端口;
  • shutdown:通过tcp/ip协议连接发往serevr用于实现关闭tomcat实例的命令;

2.元素

该组建是将connector和engine组件绑定起来进行提供服务

  • name: service的显示名称,主要用于在日志里面进行标识service.默认为catalina.

3.connector
连接器组件主要用于接受客户端发送的请求并返回响应给客户端。
考虑到tomcat的工作方式:一种tomcat作为应用程序服务器接受来自前端的web服务器请求;另外一种就是既做为web服务器也作为应用程序服务器接受来自浏览器的请求。第二种基于http/1.1和http/2协议的连接器;第一种是基于AJP协议的连接器,AJP协议便负责Tomcat和Apache的连接;

  • address:连接器监听地址,默认监听所有地址,既0.0.0.0
  • maxThreads:支持最大并发连接数,默认为200
  • acceptCount:设置等待队列的最大长度,通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
  • maxconnections:允许建立的最大连接数。
  • port:监听端口,默认为0
  • protocol:连接器使用的协议,用于处理对应的请求
  • redirectport:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口。
  • connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
  • keepAliveTimeout:长连接状态的超时时间。超出该值时,长连接将关闭。
  • enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true,应设置为false防止反解客户端主机;

4.容器
用来分析协议的引擎机器,他从一个或者多个connector上接受请求,将请求交给虚拟主机进行处理,最后返回完整的数据给connector交给客户端。
service里面只允许有一个engine,而且engine必须设置在connector元素后面,否则无法关联其后面的connector进行请求处理。

  • defaultHost:指定处理请求的默认虚拟主机。在Engine中定义的多个虚拟主机的主机名称中至少有一个跟defaultHost定义的主机名称同名。
  • name:Engine组件的名称,用于记录日志和错误信息。

5.容器
host容器用来定义虚拟主机。engine从connector接收到请求进行分析后,会将相关的属性参数传递给对应的(筛选方式是从请求首部的host字段和虚拟主机名称进行匹配)虚拟host进行处理。如果没有合适的虚拟主机,则传递给默认虚拟主机。

  • name:虚拟主机的主机名。
  • appBase:此Host的webapps目录,即webapp部署在此虚拟主机上时的存放目录。
  • unpackWARs的值为true通过解压后的文件结构运行该Web应用。
  • autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。
  • startStopThreads:启动context容器时的并行线程数。
  • xmlBase:部署在此虚拟主机上的context xml目录。
  • 主机别名:有时候还需要管理多个站点名称,即主机别名。可以使用Alias为Host指定的主机名定义主机别名。

6.容器
一个context代表一个webapp。catalina基于对请求URI与context中定义的path进行最大匹配前缀的规则进行挑选,从中选出使用哪个context来处理该HTTP请求。每个context都必须在虚拟主机容器host中有一个唯一的context name。必须要有一个context的path为0长度的字符串(即),该context是该虚拟主机的默认webapp,用于处理所有无法被虚拟主机中所有context path匹配的请求。

  • cookies:默认为true,表示启用cookie来标识session。
  • docBase:即DocumentRoot,是该webapp的context root,即归档WAR文件所在目录或非归档内容所在目录。
  • path:定义webapp path。
  • reloadable:是否监控/WEB-INF/class和/WEB-INF/lib两个目录中文件的变化,变化时将自动重载。
  • xmlNamespaceAware:和web.xml的解析方式有关。默认为true,设置为false可以提升性能。
  • xmlNamespaceAware:和web.xml的解析方式有关。默认为true,设置为false可以提升性能。

7.
realm定义的是一个安全上下文,访问时基于那种认证方式访问;可以认为是一个存放用户名,密码及角色的一个“数据库”。

  • .LockOutRealm:多次登录失败后,锁定用户。
  • JAASRealm:基于Java Authintication and Authorization Service实现用户认证。
  • JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;
  • JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;
  • MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;
  • UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;

8.元素
类似于过滤器,一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。

  • AccessLogValve:访问日志Valve;
  • ExtendedAccessValve:扩展功能的访问日志Valve;
  • RequestDumperValve:请求转储Valve;
  • RemoteAddrValve:基于远程地址的访问控制;
  • RemoteHostValve:基于远程主机名称的访问控制;
  • SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量;

9.Listener
Listener 为侦听器,通常实现tomcat内部进行通信的,可在各组件之间完成通信

10.
全局命名资源,方便全局引用,为其命名方便调用。
server.xml配置文件内容

#告诉浏览器文件是按照1.0版本的xml规则解析,采用utf-8的编码格式

#server整个配置文件的根元素,shutdown属性表示关闭Server的指令,port属性表示Server接收shutdown指令的端口号,;

  
  
  
  
  
   
  
    
  
  #service是连接connector和engine组件的,name属性定义service的名字
  
  #protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort如果发送的是https请求将请求重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间
    
  #客户端可以通过8009端口号使用AJP协议访问Tomcat,
    
  #Engine是Service组件中的请求处理组件,name属性用于日志和错误信息,在整个Server中应该唯一。defaultHost属性指定了默认的host名称。
    
      
        
      
  #Host组件代表Engine中的一个虚拟主机
      
   #定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式
        
      
    
  

tomcat+nginx实现动静分离

名称 服务器
tomcat 192.168.50.144
nginx 192.168.50.145

1.配置tomcat的测试动态页面
为了删除干扰,将webapps/ROOT/目录下文件全部删除

 [root@tomcat ~]# ls /usr/local/tomcat/webapps/ROOT/
index.jsp   QQ.png
[root@tomcat ROOT]# more /usr/local/tomcat/webapps/ROOT/index.jsp 

 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> 
 <%@ page import="java.util.Date" %> 
 <%@ page import="java.text.SimpleDateFormat" %> 
  
  
  
  
 tomcat
  
 
    

192.168.50.144 tomcat

2.配置nginx的静态测试页面

[root@nginx ~]# more /usr/local/nginx/html/index.html 

192.168.50.145 nginx

[root@nginx ~]# ls /usr/local/nginx/html/ 50x.html index.html

3.nginx修改配置文件进行动静分离

upstream tomcat_server {
       server 192.168.50.144:8080;
}
upstream nginx_server {
       server 192.168.50.145;
}
#静态请求转发
        location ~.*\.(gif|jpg|jpeg|png|bmp|css)$ {
            expires 1d;
        }
#动态请求
        location  ~.*.jsp$ {
           proxy_pass http://tomcat_server;
           proxy_set_header Host $host;
        }    

4.重新加载nginx,启动tomcat
tomcat测试:
tomcat详解_第3张图片nginx测试:
tomcat详解_第4张图片
通过nginx访问动态网页请求:
tomcat详解_第5张图片

tomcat 8.x 配置管理员登陆

tomcat的管理员角色权限

  • admin-gui — 可访问 “host管理” 页面,但"APP管理" 和 “服务器状态” 页面无查看权限
  • manager-gui — 无 “host管理” 页面访问权限,有"APP管理" 和 “服务器状态” 页面查看权限
  • manager-status — 只有"服务器状态" 页面查看权限
  • manager-script — 有脚本方式管理接口访问权限和"服务器状态" 页面查看权限
  • manager-jmx — JMX 代理接口访问权限和"服务器状态" 页面查看权限
  • admin-script — 只有host-manager脚本方式管理接口访问权限

1.tomcat9进入管理界面时报错
tomcat详解_第6张图片
2.需要修改配置文件$tomcat/conf/tomcat-users.xml ,添加以下内容:


 
 
 
 
 
 

3.tomcat8 安全机制默认下仅允许本机访问tomcat,如果需要远程访问则修改文件的ip访问规则:
配置两个文件主要为了方便管理

[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/manager.xml
             
      

[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/host-manager.xml

 #配置允许所有网段都可以进行访问

4.重新启动tomcat,再次进行访问tomcat的管理界面:ip地址:8080/manager
tomcat详解_第7张图片点击确定进入组管理界面:
tomcat详解_第8张图片

你可能感兴趣的:(tomcat详解)