tomcat详解

JAVA环境搭建

1.源码包安装java

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

1.在官网下载jdk或者java,这里选择jdk8版本,选择接受协议才可以进行下载
在这里插入图片描述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配置虚拟机两种方式

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

[root@192 conf]# vi server.xml
        <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            ................................................................
      </Host>
      添加一下几行
       <Host name="www.jump.com" appBase="/jump" unpackWARs="true" autoDeploy="true">
          <Context  path="" docBase='.'  debug="0" />
      </Host>

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
    <Service name="Catalina">
..............................................................
    </Service>
在下面添加如下几行
    <Service>
       <Connector executor="tomcatThreadPool"
               port="8089" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
         <Engine name="second" debug="0">
         <Host name="www.jump.com"  appBase="/jump"
            unpackWARs="true" autoDeploy="true">
                <Context path='' docBase="." debug="0"/>
         </Host>
         </Engine>
      </Service>

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

2.<Service>元素

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

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

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

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

6.<context>容器
一个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>
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.<Value>元素
类似于过滤器,一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。

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

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

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

#告诉浏览器文件是按照1.0版本的xml规则解析,采用utf-8的编码格式
<?xml version="1.0" encoding="UTF-8"?>
#server整个配置文件的根元素,shutdown属性表示关闭Server的指令,port属性表示Server接收shutdown指令的端口号,;
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.security.SecurityListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 
  <GlobalNamingResources>
    <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>
  #service是连接connector和engine组件的,name属性定义service的名字
  <Service name="Catalina">
  #protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort如果发送的是https请求将请求重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  #客户端可以通过8009端口号使用AJP协议访问Tomcat,
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  #Engine是Service组件中的请求处理组件,name属性用于日志和错误信息,在整个Server中应该唯一。defaultHost属性指定了默认的host名称。
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
  #Host组件代表Engine中的一个虚拟主机
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
   #定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  #prefix和suffix表示日志文件的前缀名称和后缀名称。pattern表示记录日志时的信息和格式。
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

tomcat+nginx实现动静分离

名称服务器
tomcat192.168.50.144
nginx192.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 
<!DOCTYPE html>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> 
 <%@ page import="java.util.Date" %> 
 <%@ page import="java.text.SimpleDateFormat" %> 
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/
 html4/loose.dtd"> 
 <html> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 <title>tomcat</title>
 </head> 
 <body>
    <h1>192.168.50.144 tomcat</h1> 
    <img src="QQ.png">
 </body> 
 </html>

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

[root@nginx ~]# more /usr/local/nginx/html/index.html 
<h1>192.168.50.145 nginx</h1>
[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测试:
在这里插入图片描述nginx测试:
在这里插入图片描述
通过nginx访问动态网页请求:
在这里插入图片描述

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进入管理界面时报错
在这里插入图片描述
2.需要修改配置文件$tomcat/conf/tomcat-users.xml ,添加以下内容:

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
 <role rolename="manager-script"/>
 <role rolename="manager-gui"/>
 <role rolename="manager-jmx"/>
 <role rolename="manager-status"/>
 <user username="tomcat" password="s3cret" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
 </tomcat-users>

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

[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/manager.xml
<Context privileged="true" antiResourceLocking="false"          docBase="${catalina.home}/webapps/manager">             
      <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/host-manager.xml
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/host-manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> #配置允许所有网段都可以进行访问
</Context>

4.重新启动tomcat,再次进行访问tomcat的管理界面:ip地址:8080/manager
在这里插入图片描述点击确定进入组管理界面:
在这里插入图片描述

  • 9
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值