tomcat简单应用

基于Java访问web

AJAX技术,实现网页的部分页面自动刷新

官网: http://tomcat.apache.org/

注意:安装tomcat前必须先部署JDK

1、多实例实现

[root@centos8 ~]#mkdir /data/m48/ROOT      #注意是要创建ROOT主页面路径,页面文件存放在目录下即可
[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml 
    <Engine name="Catalina" defaultHost="localhost">  #指定默认实例

    <Connector port="8080" protocol="HTTP/1.1"  
    #指定监听端口,协议,注意端口不要在1023以下,会没有权限,或更改service文件运行身份为root
               connectionTimeout="20000"
               redirectPort="8443" />


	<Host name="localhost"  appBase="webapps"         #网页域名和页面文件路径
            unpackWARs="true" autoDeploy="true">        #是否自动解压及上传

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    #日志功能
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
      <Host name="m48.magedu.org"  appBase="/data/m48/"      #网页域名和页面文件路径注意搭配DNS解析
            unpackWARs="true" autoDeploy="true">             #是否自动解压及上传
      </Host>
    </Engine>
  </Service>
</Server>
[root@centos8 ~]#systemctl restart tomcat
#访问时需指定端口,10.0.0.8:8080     m48.magedu.org:8080

2、自定义日志格式

[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    #日志功能
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
               
#更改为json格式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>      
#注意上面的是一整行,不要换行
#可使用jq工具处理json格式日志文件
[root@centos8 ~]#yum -y install jq
[root@centos8 ~]#echo 'xxx' |jq

3、反向代理实现

3.1、在单一主机上
3.1.1、在同一主机,单一虚拟主机上
#DNS解析指向nginx代理服务器
#在nginx代理上
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
		location / {
			root html;
			index index.html index.htm;
			proxy_pass http://127.0.0.1:8080;    #添加指向即可
		}
[root@nginx ~]#nginx -s reload

#后续访问直接写域名即可,不用写端口号
3.1.2、在同一主机,多虚拟主机上
#DNS解析均指向当前主机ip
#搭建多虚拟主机
[root@centos8 ~]#mkdir /data/tomcat/t{1,2}/ROOT -p
[root@centos8 ~]#echo "t1" > /data/tomcat/t1/ROOT/index.html
[root@centos8 ~]#echo "t2" > /data/tomcat/t2/ROOT/index.html

[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml

      <Host name="t1.magedu.org"  appBase="/data/tomcat/t1/"
            unpackWARs="true" autoDeploy="true">
      </Host>
      <Host name="t2.magedu.org"  appBase="/data/tomcat/t2/"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>
[root@centos8 ~]#systemctl restart tomcat

#配置代理
[root@centos8 ~]#vim /apps/nginx/conf/nginx.conf
		location / {
			root html;
			index index.html index.htm;
			proxy_pass http://127.0.0.1:8080;    #添加指向主机即可,也可写域名,但需要解析指向主机
			proxy_set_header Host $http_host;    #添加转发主机头至后端服务器
		}
3.2、在多主机上,实现负载均衡

五台主机

DNS: 10.0.0.7

nginx: 10.0.0.8

tomcat1: 10.0.0.18

tomcat2: 10.0.0.28

客户端: 10.0.0.200

3.2.1、环境准备
#配置tomcat
[root@tomcat1 ~]#mkdir /data/tomcat/t1/ROOT
[root@tomcat1 ~]#echo "t1" > /data/tomcat/t1/ROOT/index.html

[root@tomcat1 ~]#vim /usr/local/tomcat/conf/server.xml
      <Host name="www.magedu.org"  appBase="/data/tomcat/t1/"     #域名主机设置为www,便于后续代理跳转
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>

[root@tomcat2 ~]#mkdir /data/tomcat/t2/ROOT
[root@tomcat2 ~]#echo "t2" > /data/tomcat/t2/ROOT/index.html
[root@tomcat2 ~]#vim /usr/local/tomcat/conf/server.xm
      <Host name="www.magedu.org"  appBase="/data/tomcat/t2/"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>

systemctl restart tomcat

#配置DNS
[root@DNS ~]#vim /var/named/magedu.org.zone
t1       A   10.0.0.18
t2       A   10.0.0.28
[root@DNS ~]#rndc reload

#配置nginx代理服务器,实现负载均衡
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
http {                     #注意是在http语句块里加下面的指令
	upstream tomcat {      #添加想跳转的后端服务器
		#ip_hash;           #会话绑定
		hash $cookie_JSESSIONID;     #指定根据cookie的JSESSIONID值来进行跳转
		server 10.0.0.18:8080;       #轮询用法,注意指定端口号
		server 10.0.0.28:8080;
	}
	server{
		location / {
		root html;
		index index.html index.htm;
		proxy_pass http://tomcat;            #添加跳转后端指向
		proxy_set_header Host $http_host;    #添加转发主机头至后端服务器
		}
	}
}

#检查
[root@10.0.0.200 ~]#curl -b 'SessionID=xxx' www.magedu.org      #-b指定cookie
3.2.2、https
server {
		location / {
			listen 80;
			server_name www.magedu.org;
			return 302 https://$server_name$request_uri;     #https跳转,注意是跳转到上一行的域名
		}
}
server {
	listen 443 ssl;
	server_name www.magedu.org;
	ssl_certificate /etc/nginx/ssl/www.magedu.org.pem;      #证书文件,注意域名匹配
	ssl_certificate_key /etc/nginx/ssl/www.magedu.org.key;
	client_max_body_size 20m;
	location / {
		proxy_pass http://tomcat;
		proxy_set_header Host $http_host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}
3.2.3、tomcat 的 Session 复制集群

Session不变,跳转的主机变了,内部主机的Session复制共享,消耗内存,后端tomcat两三台的情况下可以用

官方文档

https://tomcat.apache.org/tomcat-10.0-doc/cluster-howto.html

将官方文档的方案复制后进行稍加更改即可

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"    #指定的多播地址,即相同频道
                        port="45564"           #45564/UDP
                        frequency="500"        #间隔500ms发送
                        dropTime="3000"/>      #故障阈值3s
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"           #监听地址,此项建议修改为当前主机的IP
                      port="4000"              #监听端口
                      autoBind="100"           #如果端口冲突,自动绑定其它端口,范围是4000-4100
                      selectorTimeout="5000"   #自动绑定超时时长5s
                      maxThreads="6"/>         #最大线程数

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
          #注意上面这行,tomcat7版本最后面少了个/
        </Cluster>

网段地址分类

A: 1-126.x.x.x
B: 128-191
C: 192-223
D: 224-239
E: 保留项
3.2.3.1、具体实现

环境和负载均衡一样

#配置nginx代理服务器,实现负载均衡
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
http {
	upstream tomcat {
		server 10.0.0.18:8080;
		server 10.0.0.28:8080;
	}
	server {
		listen 80;
		server_name www.magedu.org;
		location / {
			proxy_pass http://tomcat;
			proxy_set_header Host $http_host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
	}
}
[root@nginx ~]#nginx -s reload

#更改tomcat配置,将官方文档里的内容拷贝在host语句块中,且需更改web.xml文件,同理在tomcat2上进行相同操作
[root@tomcat1 ~]#vim /usr/local/tomcat/conf/server.xml
      <Host name="www.magedu.org"  appBase="/data/tomcat/t1/"
            unpackWARs="true" autoDeploy="true">
            <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"    #指定的多播地址,频道
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="10.0.0.18"      #监听地址,此项建议修改为当前主机的IP
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
          #注意上面这行,tomcat7版本最后面少了个/
        </Cluster>
      </Host>
    </Engine>
  </Service>
</Server>

[root@tomcat1 ~]#cp -a /usr/local/tomcat/webapps/ROOT/WEB-INF/ /data/tomcat/t1/ROOT/    #注意属性
[root@tomcat1 ~]#vim /data/tomcat/t1/ROOT/web.xml
 </description>
<distributable/> #添加此行
</web-app>       #在最后一行的上面添加

[root@tomcat1 ~]#systemctl restart tomcat
3.2.4基于memcached搭建Session服务器

可以用redis也可以用memcached

3.2.4.1、配置memcached和tomcat在同一主机上

msm的sticky 模式:前端tomcat和后端memcached有关联(粘性)关系

需提前下载相关jar包

官方文档

https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

在这里插入图片描述

#注意版本相搭配,否则不兼容
For the most simple integration you just need to have a tomcat (6, 7, 8 or 9) and a memcached or Redis installed (or s.th. supporting the memcached protocol).   #仅支持到tomcat9版本

#配置memcached
[root@tomcat1 ~]#yum -y install memcached
[root@tomcat1 ~]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"                   #内存大小,一般设置为物理内存的一半,单位字节
#OPTIONS="-l 127.0.0.1,::1"      #注释掉此行
[root@tomcat1 ~]#systemctl enable --now memcached.service


#配置tomcat
[root@tomcat1 ~]#vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:10.0.0.48:11211,n2:10.0.0.58:11211"    #tomcat服务器的ip及端口
    failoverNodes="n1"        #故障转移,写的是当前主机
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
#添加上面内容
</Context>     #最后一行

#将jar包传到/usr/local/tomcat/lib/目录下
asm-5.2.jar
kryo-3.0.3.jar
kryo-serializers-0.45.jar
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
minlog-1.3.1.jar
msm-kryo-serializer-2.3.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
spymemcached-2.12.3.jar
[root@tomcat1 ~]#systemctl restart tomcat

#准备测试页面文件
[root@tomcat1 ~]#vim /data/tomcat/t1/ROOT/session.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tomcat test</title>
</head>
<body>
<h1> Tomcat Website1 </h1>     #为测试页面效果可以更改字符
<div>On  <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

#同样步骤在tomcat2上进行即可

#配置nginx代理服务器,实现负载均衡
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
http {                     #注意是在http语句块里加下面的指令
	upstream tomcat {      #添加想跳转的后端服务器
		#ip_hash;          #会话绑定
		#hash $cookie_JSESSIONID;    #指定根据cookie的JSESSIONID值来进行跳转
		server 10.0.0.18:8080;       #轮询用法,注意指定端口号
		server 10.0.0.28:8080;
	}
	server {
		location / {
		}
		location ~* \.(jsp|do)$ {            #添加转发,跳转
		proxy_pass http://tomcat;
		#proxy_set_header Host $http_host;   #转发主机头至后端服务器
		}
	}
}
[root@nginx ~]#nginx -t
[root@nginx ~]#nginx -s reload

#访问nginx代理服务器的ip加端口即可进行检查,域名记得配置DNS
3.2.4.2、non-sticky模式

前端tomcat和后端memcached没有关联(粘性)关系,且在memcached上都存放SessionID

#配置tomcat
[root@tomcat1 ~]#vim /usr/local/tomcat/conf/context.xml
 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:10.0.0.18:11211,n2:10.0.0.28:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/path1|/path2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
#添加上面内容
</Context>     #最后一行
3.2.5、基于redis搭建session服务器

在memcached所需jar包基础上再下载 jedis-3.0.0.jar 包

#配置redis
[root@tomcat1 ~]#yum -y install redis
[root@tomcat1 ~]#sed -Ei 's/(^bind).*/\1 0.0.0.0/' /etc/redis.conf
[root@tomcat1 ~]#systemctl enable --now redis

#配置tomcat
[root@tomcat1 ~]#vim /usr/local/tomcat/conf/context.xml

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="redis://10.0.0.18"     #redis服务器的地址
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/path1|/path2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>

#将jar包传到/usr/local/tomcat/lib/目录下
asm-5.2.jar
kryo-3.0.3.jar
kryo-serializers-0.45.jar
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
minlog-1.3.1.jar
msm-kryo-serializer-2.3.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
spymemcached-2.12.3.jar
jedis-3.0.0.jar
[root@tomcat1 ~]#systemctl restart tomcat

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值