tomcat服务器相关介绍一

一、Tomcat是什么

Tomcat是Apache在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器,tomcat侧重于servlet引擎,如果以standalone方式运行,可以作为web服务器来使用,支持JSP;tomcat是由java语言开发的,需要在java虚拟机上进行工作。

二、Tomcat的常见的组件

服务器:Server Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例
服务:Service 一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器
连接器:Connector 负责连接客户端请求至Servlet容器内的Web应用程序;默认端口为http协议的8080;ajp协议的8009;https的8443
引擎:Engine 检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端
虚拟主机:Host 类似于apache的虚拟主机
上下文:Context  配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置

三、Tomcat的配置文件说明

server.xml Tomcat的主配置文件,包含Service, Connector, Engine,Valve, Hosts主组件的相关配置信息;
web.xml 遵循Servlet规范标准的配置文件,用于配置servlet
catalina.policy Java相关的安全策略配置文件
catalina.properties Tomcat内部package的定义及访问相关的控制
tomcat-users.xml
认证时用到的相关角色、用户和密码等信息;

Tomcat自带的manager默认情况下会用到此文件

logging.properties 日志记录器相关的配置信息

四、Tomcat简单的操作、基于nginx和apache的反向代理实现

前提:在centos7上安装tomcat软件包;并启动,测试访问!

准备:2台centos7虚拟主机,node1:172.16.116.231 ; node2:172.16.116.232

# yum install -y tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp
# systemctl start tomcat 
# [[email protected] tomcat]# systemctl start tomcat.service
[[email protected] tomcat]# ss -tanl
State      Recv-Q Send-Q                  Local Address:Port                    Peer Address:Port 
LISTEN     0      128                                 *:22                                 *:*     
LISTEN     0      100                         127.0.0.1:25                                 *:*     
LISTEN     0      1                    ::ffff:127.0.0.1:8005                              :::*     
LISTEN     0      100                                :::8009                              :::*     
LISTEN     0      100                                :::8080                              :::*     
LISTEN     0      128                                :::22                                :::*     
LISTEN     0      100                               ::1:25                                :::*

4.1、部署webapp

deploy:将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp; 将其特有类通过class loader装载至tomcat;可以自动部署和手动部署,这里介绍手动部署中的热部署,使用Tomcat自带的manager工具

[[email protected] ~] # cd /etc/tomcat
[[email protected] tomcat]# vim tomcat-users.xml 
  <role rolename="manager-gui"/>    
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
[[email protected] tomcat]# systemctl restart tomcat  
设置完成后,可以使用tomcat用户名和对应的密码访问Server Status|Manager App|Host Manager

4.2、Host定义

[[email protected] tomcat]# vim server.xml      //编辑server.xml文件
 <Host name="node1" appBase="/web/webapps" autoDeploy="false"> //添加node1虚拟主机
   <Context path="" docBase="" reloadable="true"/>
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/logs"
   prefix="localhost_access_log." suffix=".txt"    
   pattern="%h %l %u %t &quot;%r&quot; %s %b" />     //定义日志格式
 </Host>

[[email protected] tomcat]# mkdir -pv /web/{logs,webapps}   //提供测试页面
<%@ page language="java" %>
<html>
  <head><title>Tomcat1 on node1</title></head>
  <body>
    <h1><font color="red">Tomcat1.node1.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("node1.com","node1.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
~       
windows设置hosts文件: 172.16.116.231 node1

4.3、修改默认虚拟主机的方法

# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="localhost">  //defaultHost设置为默认的host<name>即可

4.4、LNT实现方法(nginx反向代理用户请求至tomcat)

[[email protected] ~]# yum install -y nginx    //在node2上安装nginx
[[email protected] ~]# vim /etc/nginx/nginx.conf   //编辑nginx配置文件,加入下面一句
  location / {
     proxy_pass http://node1:8080/     //将客户端的所有请求都反向代理至node1
        }
        
 //如果想动静分离,静态请求由nginx响应,动态请求由node1响应,需要进行下面的修改即可
  location ~* \.(jsp|do)$ {
    proxy_pass http://node1:8080/      //动静分离 

    }

4.5、LAT实现方法(apache反向代理用户请求至tomcat)

准备工作;编辑 /etc/httpd/conf/httpd.conf将中心主机的DocumentRoot注释

4.5.1、mod_proxy_http

[[email protected] ~]# cd /etc/httpd/conf.d/
[[email protected] conf.d]# vim mod_proxy_http.conf 
<VirtualHost *:80>
    ServerName node2     //虚拟主机名
    ProxyVia On       //是否在响应头部加入via,即代理的主机名
    ProxyRequests Off    //关闭正向代理
    ProxyPreserveHost On   
   <Proxy *>
     Require all granted        //允许所有主机访问
   </Proxy>
     ProxyPass / http://node1:8080/
        ProxyPassReverse / http://node1:8080/   //ProxyPassReverse作用就是反向代理 
   <Location />
     Require all granted
   </Location>
</VirtualHost>

4.5.2、mod_proxy_ajp

AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和 SERVLET容器 连接

[[email protected] conf.d]# vim mod_proxy_ajp.conf        
<VirtualHost *:80>
    ServerName node2
    ProxyVia On
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / ajp://node1:8009/
    ProxyPassReverse / ajp://node1:8009/  //将协议和端口改为ajp和8009即可
    <Location />
        Require all granted
    </Location>
</VirtualHost>                //测试没问题,就不截图了~~

4.5.3、mod_jk

mod_jk 简称JK,是Apache服务器的一个可插入模块,用以为Apache提供处理JSP/Servlet的能力。mod_jk实质上是Apache与Tomcat的连接器,并附带提供集群和负载均衡的功能。

apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。

(1) mod_jk:额外编译安装

# yum groupinstall "Development tools" 
# cd tomcat-connectors-1.2.40-src/native
# yum install -y httpd-devel                 
# which apxs           
 /usr/bin/apxs
# ./configure --with-apxs=/usr/bin/apxs  
#make && make install

(2)编辑mod_jk的模板配置文件

[[email protected] conf.d]# vim mod_jk.conf   
LoadModule  jk_module  modules/mod_jk.so              //让httpd加载jk模块
JkWorkersFile  /etc/httpd/conf.d/workers.properties    //jk的worker文件
JkLogFile  logs/mod_jk.log                            //日志文件
#JkLogLevel  debug
JkMount  /*  Tomcat1                
JkMount  /status/  stat1

(3)workers配置文件:workers.properties

[r[email protected] conf.d]# vim workers.properties
worker.list=Tomcat1,stat1       
worker.Tomcat1.port=8009
worker.Tomcat1.host=172.16.116.231   
worker.Tomcat1.type=ajp13         //mod_jk只能使用ajp13协议 
worker.Tomcat1.lbfactor=1           //权重
worker.stat1.type = status          //这个页面最好加入用户认证

五、tomcat 集群;实现session会话保持的3种方法介绍

5.1、基于session会话绑定实现方法,nginx和apache测试!

在原来的基础上再加入一台虚拟机做反向代理使用;node3:172.16.116.233

5.1.1、nginx负载均衡至后端tomcat方法;基于session会话绑定实现

<1> node1: 172.16.116.231        //配置tomcat1;修改并加入虚拟主机node1
# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="node1"> 
<Host name="node1" appBase="/web/webapps/" autoDeploy="false" >
   <Context path="" docBase="" reloadable="true"/>
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/logs"
      prefix="localhost_access_log." suffix=".txt"
      pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Host>

<2> node2: 172.16.116.232       //配置tomcat2;修改并加入虚拟主机node2,
# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="node2"> 
<Host name="node2" appBase="/web/webapps/" autoDeploy="false" >
   <Context path="" docBase="" reloadable="true"/>
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/logs"
     prefix="localhost_access_log." suffix=".txt"
     pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Host>
             
<3> node3: 172.16.116.233       //配置nginx负载均衡的反向代理
# vim /etc/nginx/nginx.conf        
 upstream tomcatservs {           //在http段加入upstream上游服务器
        ip_hash ;               //源地址hash,将同一源地址的请求始终定向至某一上游服务器
       server node1:8080;         //达到session会话绑定的目的     
       server node2:8080;
     }
     
 location / {                          //在server段中加入反向代理
       proxy_pass http://tomcatservs/       
    }

5.1.2、apache负载均衡至后端tomcat方法;基于session会话绑定实现

通过apache3种反向代理的方式进行测试

 apache: tomcat

mod_proxy

mod_proxy_http

mod_proxy_balancer

http connector    //http协议连接器

mod_proxy

mod_proxy_ajp

mod_proxy_balancer

ajp connector     //ajp协议连接器
mod_jk ajp connector    //ajp协议连接器

▲▲▲httpd负载均衡集群使用到的选项总结▲▲▲


lbfactor表示:后台服务器负载到由Apache发送请求的权值,该值为1到100之间的任何值。

BalancerMember:负载均衡集群中的成员

lbmethod表示:负载载均衡策略。

lbmethod=byrequests 按照请求次数均衡(默认)

lbmethod=bytraffic 按照流量均衡

lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

ProxyPass表示:所有的test请求都会重定向到balancer://lbcluster1/处理。balancer是内置负载。

ProxyPassReverse表示:反向代理,也就是将所有的请求反向代理到负载均衡后的应用url路径中。

stickysession表示:进行Session复制使用

①mod_proxy_http 、http connector

node1 : 172.16.116.231 
<Engine name="Catalina" defaultHost="node1" jvmRoute="Tomcat1">  //Engine加入jvmRoute标识

node2 : 172.16.116.232
<Engine name="Catalina" defaultHost="node1" jvmRoute="Tomcat2"> //Engine加入jvmRoute标识

node3 : 172.16.116.233
[[email protected] conf.d]# vim mod_proxy_http.conf 

header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster1>
    BalancerMember http://172.16.116.231:8080 loadfactor=1 route=Tomcat1
    BalancerMember http://172.16.116.232:8080 loadfactor=1 route=Tomcat2
    ProxySet stickysession=ROUTEID               //根据routeid做session绑定
</proxy>

<VirtualHost *:80>
    ServerName node3
    ProxyVia On
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / balancer://lbcluster1/          //注意,要使用balancer
    ProxyPassReverse / balancer://lbcluster1/
    <Location />
        Require all granted
    </Location>
</VirtualHost>

②mod_proxy_ajp、ajp connector

[[email protected] conf.d]# vim mod_proxy_ajp.conf    //只需修改这个地方,其它不用修改即可实现 
BalancerMember ajp://172.16.116.231:8009 loadfactor=1 route=Tomcat1
BalancerMember ajp://172.16.116.231:8009 loadfactor=1 route=Tomcat1

③mod_jk、ajp connector

[[email protected] conf.d]# vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile  /etc/httpd/conf.d/workers.properties     //集群worker相关配置
JkLogFile  logs/mod_jk.log
JkLogLevel  error
JkMount  /*  lbcluster1
JkMount  /status/  stat1

[[email protected] conf.d]# vim workers.properties 
worker.list = lbcluster1,stat1             //worker列表
worker.Tomcat1.type = ajp13        //Tomcat1是node1节点上的运行tomcat的jvm标识
worker.Tomcat1.host = 172.16.116.231      //ip或主机名都可以
worker.Tomcat1.port = 8009
worker.Tomcat1.lbfactor = 1
worker.Tomcat2.type = ajp13        //Tomcat2是node2节点上的运行tomcat的jvm标识
worker.Tomcat2.host = 172.16.116.232     //ip或主机名都可以    
worker.Tomcat2.port = 8009
worker.Tomcat2.lbfactor = 1             //权重
worker.lbcluster1.type = lb
worker.lbcluster1.sticky_session = 0    //是否绑定session会话;0为不绑定,1为绑定
worker.lbcluster1.balance_workers = Tomcat1, Tomcat2   //lbcluster1集群成员
worker.stat1.type = status

5.2、基于session 集群的方法,也就是session共享

session manager:会话管理器;常用的管理器有4种


StandardManager

标准会话管理器


PersistentManager

持久会话管理器


FileStore :文件存储,可以存在nfs服务器上

JDBC :基于jdbc存储在后端的关系型数据库中,如mysql

DeltaManager
Manager用来在节点间拷贝Session,默认使用DeltaManager,

DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把

Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用


BackupManager

备用会话管理器


当集群中的节点数量很多并且部署着不同应用时,可以使用

BackupManager,BackManager仅向部署了当前应用的节点拷贝Session

这里主要介绍DeltaManager的实现方法:

前端的node3负载均衡的相关配置不需要改变,使用上述3种方式都可以,只需要在tomcat节点上修改;node1:172.16.116.231 ; node2:172.16.116.232 需要做如下的修改 ;根据官方文档实现

http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

[[email protected] ~]# mkdir /web/webapps/ROOT/{classes,lib,META-INF,WEB-INF} -pv
[[email protected] ~]# cp /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml /web/webapps/ROOT/WEB-INF/
<Host name="node2" appBase="/web/webapps" autoDeploy="false">
        <Context path="" docBase="ROOT" reloadable="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.16.7"
                     port="45564"
                     frequency="500"
                     dropTime="3000"/>
   <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                     address="172.16.116.232"
                      port="4000"
                       autoBind="100"
                       selectorTimeout="5000"
        </Sender>
        </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"/>
 </Cluster>
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

[[email protected] ~]# vim /web/webapps/ROOT/WEB-INF/web.xml
     <distributable/>

▲▲▲特别要说明的是▲▲▲

tomcat集群中的session管理,主要有两种方式:

1).粘性session

表示从同一客户端发来的请求都将有集群中的同一个tomcat进行处理。配置方式是在上面的workers.properties文件中

Xml代码

  1. worker.lbcontroller.sticky_session=1

粘性session的好处在不会在不同的tomcat上来回跳动处理请求,但是坏处是如果处理该session的tomcat崩溃,那么之后的请求将由其他tomcat处理,原有session失效而重新新建一个新的session,这样如果继续从session取值,会抛出nullpointer的访问异常。

2).session复制

session复制是指tomcat彼此之间通过组播方式将session发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是当tomcat实例很多,或者用户在session中有大量操作时,组播发送的信息量十分惊人。session复制配置则是在发布的web应用程序中的web.xml中添加

Xml代码

  1. <distributable/>

以上就是这次讲到的内容,下次再介绍session服务器的实现方法,基于msm的实现过程! 谢谢O(∩_∩)O~~

时间: 2024-10-23 06:58:31

tomcat服务器相关介绍一的相关文章

tomcat服务器和http协议笔试题

tomcat与web程序结构与Http协议与HttpUrlConnection 考查的知识点:tomcat服务器相关信息 1.下面关于tomcat服务器描述正确的是() (难度A) A. tomcat是一个开源的免费的web服务器,它支持javaEE所有规范 B. tomcat 安装后默认端口80 C. tomcat 启动时需要配置JAVA_HOME 环境变量 D. tomcat 启动时必须配置CATALINA_HOME环境变量 考查的知识点:tomcat配置 4.安装tomcat成功后,要修改

JAVA学习-Tomcat服务器介绍

Apache的开源web服务器.可以解析php,js,css,一起jsp/Servlet容器. 安装Tomcat7安装包. 第一步,先下载Tomcat服务器. 下载地址 http://tomcat.apache.org/download-70.cgi#7.0.67 第二步,解压到硬盘. D:\apache-tomcat-7.0.67 第三步,配置环境变量. 系统变量,新建变量CATALINA_HOME名.变量值就是第二步中的服务器根目录. 第四步,测试首页. 运行Tomcat服务器,bin目录下

tomcat服务器介绍之二 、session服务器实现方法

上次讲到了session会话的绑定,通过nginx和apache(3种方式)实现 session会话的复制,通过DeltaManager和apache(mod_jk)实现 这次讲解基于msm实现session服务器的过程,需要用到的软件包如下: 一.准备工作,先部署nginx可以反向代理客户端请求至2台tomcat服务器 测试环境在centos7上,使用nginx和tomcat7实现:参考网页 https://code.google.com/p/memcached-session-manager

Tomcat 服务器介绍和使用

服务器的概念和作用: 问题: 学习了 java 编程之后,java 代码的一个很重要的作用就是进行数据的处理,但是目前来说我们运行编写的代码,只有一次性,也就是运行完毕后,如果需要再次运行则需要再次手动启动代码的执行.但是我们无法提前用户会何时发送请求,也就无法决定我们编写的 java 代码应该什么时候启动运行.而且手动运行也变得不现实. 解决: 那么根据 java 的网络编内容,我们是不是可以使用代码编写一个容器 (对象) 呢?,该容器可以根据用户的请求来启动并运行我们编写的数据逻辑代码.答案

Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序

1.首先,先要去MyEclipse和Tomcat的官网去下载Linux版的压缩文件,而MyEclipse的中文官网是需要登录并有可能要付钱,大家可以去网上下载,还有就是Tomcat的linux版,这个直接上官网就可以下载了,下载后我还是通通把它们放在我E盘下的as目录底下,如果大家还没配置好jdk,即Java环境的话,可看我这篇文章:http://blog.csdn.net/u012561176/article/details/45119047 这里我就直接进行操作了! 我E盘下的as文件夹

Tomcat服务器与HTTP协议

Tomcat服务器与HTTP协议 一.  Tomcat服务器 1.tomcat服务器 1.web :网页,它代表的是网络上的资源.(java技术开发动态的web资源,即动态web页面,在Java中,动态web资源开发技术统称为Javaweb.) 网络的资源分为两种 1.静态资源------主要用于展示信息     html 2.动态资源------交 互                 jsp asp php 2.javaweb开发中常见的服务器. weblogic  BEA公司------它是

Apache+Tomcat服务器集群配置

在实际应用中,如果网站的访问量很大,为了提高访问速度,可以与多个Tomcat服务器与Apache服务器集成,让他们共同运行servlet/jsp 组件的任务,多个Tomcat服务器构成了一个集群(Cluster)系统,共同为客户提供服务.集群系统具有以下优点: 高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务.   高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算

tomcat配置及介绍

系统环境:windows 7 64位 首先下载jdk 1.7,安装好jdk. 下载tomcat 8.0的压缩包,不要下载安装包exe程序. 设置环境变量 JAVA_HOME:C:\Java\jdk1.7.0_65    也就是jdk的安装目录 CLASSPATH:.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar    里面有个英文状态下的点,代表当前目录,对应的是jdk安装目录下面lib文件夹内的tools.jar和dt.jar文件. CATA

重温web服务器--细说Tomcat服务器

从大学开始接触java web的开发时就开始使用tomcat部署web项目,对它的理解仅仅停留在"这是个开源免费的servlet容器"的阶段,后来也接触了一些tomcat的体系,原理等方面的知识,也是半知半解,最近又开始看这方面的东西,截止到写这篇博文,我也不没有完全理解它,但一些比较基础的东西总算有些眉目了,读源码不易,且行且珍惜,这里写篇笔记整理下. Tomcat体系结构 先盗张图: 可以看到,Tomcat有一个最顶层的容器,也就是server容器,它最大,在server容器中,可