Tomcat 简单了解

Tomcat的目录结构及常用配置

 

1、Tomcat的目录层次结构

  • bin:存放启动和关闭Tomcat的脚本文件
  • conf:存放Tomcat服务器的各种配置文件
  • lib:存放tomcat服务器支撑的jar包
  • logs:存放Tomcat的日志文件
  • temp:存放Tomcat运行时产生的临时文件
  • webapps:web应用虽在目录,即供外界访问的web资源的存放目录
  • work:Tomcat的工作目录

  2.修改登录密码和用户名

conf里面的tomcat-users.xml文件

 

3.修改启动名称

bin里面的catalina.bat文件

 

4.server.XML 配置说明(端口,内存,连接数,等)

1>server.xml结构

<Server>

<Listener />

<GlobalNamingResources>

<Resource />

</GlobalNamingResources>

    <Service>

        <Connector />

        <Connector />

        <Engine>

<Logger />

             <Realm />

            <Host>

<Logger />

                <Context />

            </Host>

        </Engine>

    </Service>

</Server>

2>搞懂这些标签的作用 以及里面的属性含义http://www.cnblogs.com/xiaotang5051729/p/9305383.html

https://blog.csdn.net/qq_31957747/article/details/53729530

<server>元素

描述:代表一个容器,是tomcat的顶层元素,不能作为任何元素的子元素

属性:1.port:tomcat监听shutdown的命令端口,

2.shutdown="SHUTDOWN",终止tomcat是 发给停止端口的字符串

<Listener>:tomcat的监听配置 (也可以在里面写自己的监听)http://cywhoyi.iteye.com/blog/2075848

<GlobalNamingResources<Resource/>https://blog.csdn.net/yp5185423/article/details/8299800/#comments:配置Java命名和接口

<service>

Service是一组Connector的集合 它们共用一个Engine来处理所有Connector收到的请求,Server可以包含多个Service组件。

<\Connector>

由Connector接口定义.元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.

port:请求的端口

protocol:设置协议类型

connectionTimeout:定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间

maxThread:最大线程数,默认值为200

minSpareThreads:最小的备用线程数

maxSpareThread:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200

acceptCount : 当现有线程已经达到最大数75时,为客户请求排队.当队列中请求数超过100时,后来的请求返回Connection refused错误

redirectport : 当客户请求是https时,把该请求转发到端口8443去

compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off

compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩。

noCompressionUserAgents="gozilla, traviata" 

哪些客户端发出的请求不压缩,默认是不限制

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

配置想压缩的数据类型,默认是 text/html,text/xml,text/plain

 <Engine>

每个Service元素只能有一个Engine元素.多个 connector 公用一个engine

Engine用来处理Connector收到的Http请求 它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理 默认虚拟主机是localhost

name:定义名称

defaultHost:指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机,要与host的name一致 Realm可以理解为包含用户、密码、角色的”数据库”。Tomcat定义了多种Realm实现:JDBC Database Realm、DataSource Database Realm、JNDI Directory Realm、UserDatabase Realm等

Host负责管理一个或多个Web项目.

name="localhost"——指定默认虚拟主机名:localhost。

appBase="webapps"——默认Web源代码存放目录,可以是war文件或目录。(绝对路径、相对路径均可)

unpackWARS="true"——是否自动将war文件解压,true-自动解压,false-直接从WAR文件运行Web项目。

autoDeploy="true"——是否开启自动部署。设为true,Tomcat检测到appBase有新添加的Web项目时,会自动将其部署。

xmlValidation="false" xmlNamespaceAware="false" 与context有关

context :path:虚拟路径。 

docBase:应用程序的物理路径。 

workDir:这个应用的工作目录,存放运行时生成的与这个应用相关的文件。 

debug:设定debug level, 0表示提供最少的信息,9表示提供最多的信息。 

privileged:设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。 

reloadable:如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序,实现热部署。 

5.tomcat发布项目的几种方式

1.在server.xml中指定 

就是在context 标签中配置

<Context path ="/Sbsaj" docBase="Sbsaj" debug = "0" crossContext = "true">

<Resource name ="mysql/sbs" auth ="Container" type="javax.sql.DataSource"

driverClassName="com.mysql.jdbc.Driver"

url = "jdbc:mysql://192.168.1.35/Sbsaj_DB"

username="root"

password="root"

maxActive="100"

maxIdIe="10"

maxWait="5000"/>

</Context>

2.将编写并编译好的web项目(注意要是编译好的,如果是 eclipse,可以将项目打成 war 包放入),放入到 webapps 中 ----------目前我们公司常用的

3.进入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目录,新建一个 项目名.xml 文件

在XML文件里面编辑 context 内容

<Context  docBase="D:/WebProject" reloadable="true" />

<Context docBase="D:/Users/Administrator/Workspaces/MyEclipse Professional 2014/IOFinanceManageCommon_web_ali/WebRoot" reloadable="true" />

三个的优缺点:借鉴于网络

总结:

第一种方法直接在 server.xml 文件中配置,但是从 tomcat5.0版本开始后,server.xml 文件作为 tomcat 启动的主要配置文件,一旦 tomcat 启动后,便不会再读取这个文件,因此无法再 tomcat 服务启动后发布 web 项目

第二种方法比较普通,但是我们需要将编译好的项目重新 copy 到 webapps 目录下,多出了两步操作

第三种方法是最好的,每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 应用的上下文路径,而不再理会 <Context>中配置的 path 路径,因此在配置的时候,可以不写 path。

通常我们使用第三种方法

发现的问题:用eclipse 启动tomcat后可以 进到 tomcat首页点击"manager APP" 进入

但是直接启动"startup.bat" 可以进入 首页 单无法通过单机"manager APP"进入 ,也无法直接访问项目

6.tomcat设置内存和最大连接数

内存修改bin里面的catalina.bat文件

 

连接数修改 :Connector

 

 

7.tomcat服务,自启动: 服务器重启以后 tomcat自动重启

安装服务:进入安装目录-> bin ,,在空白处按住shift+鼠标右键 -> 在此处运行命令窗口,将service.bat文件拖拽到命令窗口中,按enter键运行,出现了“Usage: service.bat install/remove [service_name] [/user username] ”提示后,输入service.bat install Tomcat 输完然后按Enter键,会显示所调用的环境变量,即为服务安装成功。

设置服务自启动:控制面板-> 管理工具 -> 服务(右键 -> 以管理员身份运行),找到Apache Tomcat 8.0 tomacat,设置为自动。

 

------------------------------------------------以下粘贴自网络--------------------------------------------------==========================================================================

3、JavaWeb应用的发布

开放式目录方式:

打包war方式:   使用   Jar -cvf *.war .

     

4、Tomcat的组成结构

Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。

 

每个组件都可以在Tomcat安装目录/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。下面用XML的形式展示各种Tomcat组件之间的关系    

<Server>代表整个Servlet容器组件,是最顶层元素,可以包含一个或多个<Service>元素

       <Service>包含一个<Engine>元素以及一个或多个<Connector>元素,这些<Connector>共享一个<Engine>

           <Connector/>代表和客户程序实际交互的组件,负责接收客户请求,以及向客户返回响应

           <Engine>每个<Service>元素只能包含一个<Engine>元素,它处理在同一个<Service>中所有<Connector>接收到的客户请求

                     <Host>在一个<Engine>中可以包含多个<Host>,它代表一个虚拟主机(即一个服务器程序可以部署在多个有不同IP的服务器主机上),它可以包含一个或多个应用

                             <Context>使用最频繁的元素,代表了运行在虚拟主机上的单个web应用

                    </Host>

          </Engine>

     </Service>

</Server>

 

5、Tomcat体系结构

 

6、虚拟目录的映射方式

从Tomcat6开始,Tomcat支持自动映射,即tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录,换句话说,只需把web应用放在webapps目录下,不需要配置Context,外界可以直接访问。

          

但是如果你不想讲项目放在webapps下,而是放在其他地方,还是需要配置Context,比如我的tomcat在C盘,我的项目在D盘,则需要在Host下增加如下虚拟目录映射语句。

<Contextpath="/myapp"docBase="D:/work/myapp"></Context>

 

7、Context元素配置

tomcat在加载一个web应用时,会一次按照以下五种方式查找web应用中的元素,优先级一次降低,直到找到为止

  1. 到Tomcat安装目录/conf/Context.xml文件中查找元素。
  2. 到Tomcat安装录/conf/[enginename]/[hostname]/context.xml.default文件中查找元素。

[enginename]:表示的name属性

[hostname]:表示d的那么属性

  1. 到Tomcat安装目录/conf/[enginename]/[hostname]/[contextpath].xml文件中查找元素

[contextpath]:表示单个Web应用的URL入口

  1. 到Web应用的META-INF/context.xml文件中查找元素
  2. 到Tomcat安装目录/conf/server.xml文件中查找元素。只适用于单个Web应用

        

8、将项目部署为Tomcat默认应用

即访问 http://localhost:8080 时出来的是tomcat自带的欢迎页面,改为登录到自己的项目主页。

 

方法一:

在Tomcat默认安装后,tomcat的主目录是webapps/root目录,所以如果想改变tomcat的主目录的话可以如下所做:

 

在/conf/server.xml文件的之间加入代码

<Contextpath=""docBase="C:\tomcat7\webapps\myapp"reloadable="true"debug="0"></Context>

<!--

docBase改为自己需要的项目路径

如果建立了Apache和tomcat集群,Apache server 的默认端口是80 ,IE访问的方法只需输入:http://localhost,就可以自动定位到xx工程下面去

-->

 

方法二:

将tomcat安装目录下的ROOT下的所有文件删除,换成自己项目的文件,此法有点暴力。

               

方法三:

Tomcat5.0以下版本在C:/Tomcat/conf/Catalina/localhost目录下会自动生成了一个ROOT.Xml,但是5.0以上版本不再生成此文件。

 

所以可以新建个ROOT.xml,在里面加入如下代码:

<?Xml version='1.0' encoding='utf-8'?>

<ContextcrossContext="true"docBase="C:\tomcat7\webapps\myapp"path=""reloadable="true">

</Context>

<!--但是我自己在7.0版本上测试好像未成功,大家可以自己试试-->

 

9、Context元素的属性

path:指定访问该Web应用的URL入口

 

docBase:指定Web应用的文件路径,可以写绝对路径,也可以写相对于appBase属性的相对路径

 

className:指定实现Context组件的Java类的名字,这个类必须实现org.apache.catalina.Contex接口,该属性默认值为org.apache.catalina.core.StandardContext(不建议大家改动)

 

reloadable:如果为true,Tomcat服务器在运行状态下回监视在WEB-INF/classes和WEB-INF/lib目录下的class文件的改动,以及监视Web应用的WEB-INF/web.xml文件的改动,如果检测到有更新,服务器会自动更新加载web应用。

 

其默认值为false。在开发和调试阶段,将其改为true,一般像Eclipse等开发环境都会默认改为true。在正式发布阶段,应将其该为false,可以降低Tomcat的运行负荷,提高Tomcat的运行性能

 

在一般情况下,元素都会使用默认的标准Context组件,即className属性采用默认值org.apache.catalina.core.StandardContext,它除了拥有上面介绍到的属性外,还有自身专有的属性:

  • cachingAllowed:是否允许启用静态资源(HTML、图片、声音等)的缓存。默认值为true。
  • cacheMaxSize:设置静态资源缓存的最大值,单位为K。
  • workDir:指定Web应用的工作目录。
  • uppackWAR:如果为true,会把war文件展开为开放目录后再运行。为false,直接运行war文件。默认值为true。

        

10、web.xml文件

该文件必须放在/WEB-INF目录下,但是从7.0版本开始,Tomcat可以不使用web.xml文件,而是使用注解方式。

 

三、Tomcat的优化

 

1、内存使用配置

Tomcat是依赖于JVM的,所以Tomcat的使用内存配置实质上是JVM的内存配置。

 

在/bin目录下的catalina.bat可以直接通过Tomcat设置JVM内存参数,windows下打开catalina.bat文件,在大概中间的位置,找到

set "JAVA_OPTS=%JAVA_OPT% -server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true"

通过内存设置充分利用服务器内存

  • -server:模式启动应用慢,但是极大程度提高运行性能
  • -Xms2048m -Xmx2048m:设置的是堆内存

 

java8开始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不会再有java.lang.OutOfMemoryError:PermGen space,可以不设置

           

  • Headless=true:适用于Linux系统,与图形操作有关,如生成验证码含义是当前的是无显示器的服务器,应用中如果获取系统显示有关的参数会抛出异常,windows系统可不用设置

 

可通过jmap -heap process_id查看设置是否成功

         

2、最大连接数配置(并发能力)

在/conf/server.xml里进行配置

 

在属性中将protocol属性改为 

"org.apache.coyote.http11.Http11NioProtocol",

NIO模型的效率更高

            

加入

maxThreads="500" 

//当前可以同时处理的最大用户访问数

 

minSpareThreads="100" 

//最小空闲线程连接数,用于优化线程池

 

maxSpareThreads="200"

 

acceptCount="200" 

//当所有的线程以分配,仍然允许连接进来,但是出于等待状态的用户数。

//等待线程数+工作线程数=总的可最大连接数,如果超过此数,

//新的连接将不会被接受,就会产生一个http错误

 

enableLookups="false"

//是否允许DNS反查,如果为true,request.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名,

//当没有这样需要的时候,可以将这个功能关闭,在一定程度上提高了Tomcat服务器的性能

 

四、负载均衡配置

       

负载均衡是提高应用负载量和容错的有效手段,可以结合Nginxs与Tomcat实现,Nginx是一款性能优异的反向代理服务器。

 

1、负载均衡配置实现

反向代理原理示意图:

 

负载均衡示意图:

 

负载均衡策略:

 Nginx 提供轮询(round robin)、用户IP哈希(client IP)和指定权重 3 种方式

       

2、负载均衡时Session的处理策略

Session是Tomcat服务器上的内存空间,如果一个用户发出多个请求,却发到了多个tomcat服务器中,那么就会出现Session不同步的问题

              

解决方案1

将一个用户的请求锁定到某一台服务器上,简单,但是缺乏容错性,一旦某个服务器发生故障,Session可能丢失,(但是服务器发生故障是一个低概率事件,如果一个服务器经常挂掉,要么是硬件有问题,要么是应用有问题)

 

可以使用用户IP哈希实现

 

解决方案2

Session复制策略,基于网络的广播策略,一个节点Session变化,其他节点同步复制,具有容错性,但节点多或复制量大时对网络负荷大,使网络效率低下,甚至阻塞

 

① 在/conf/server.xml文件中开启Session复制的选项,将注释去掉,7.0默认值以配置好,需要接收器绑定内网(一般服务器都有两块网卡)网卡地址,修改端口>。

 

② 在应用中指定应用是在分布式部署之下,在web.xml中添加选项

 

解决方案3

额外创建一个共享的空间用来存放Session,所有服务器共享一个Session

 

memcached缓存共享方案基本原理

粘性Session与非粘性Session方式:

 

需要一些工具jar包,官网有目录和下载连接,在/conf/context.xml中进行配置,全局有效。

       

3、集群环境中应用代码应注意的问题       

传递Session需要实体类序列化支持,实现可序列化接口,设置版本号。

       

获取用户IP地址方法的变化,获取真实客户端ip而不是Nginx代理地址。

         

动静分离结构的预规划。一般高并发的网站上,资源类的文件,如js,css,图片通常是由静态服务器处理,Nginx处理静态文件效率就非常高,而tomcat处理静态文件是它很大的一个弱势,tomcat只负责动态请求的处理。

 

那么编码的时候就要考虑静态资源最后可能要被拿出去,地址会有变化,所以在开发的时候应该规划访问地址,保持最大灵活性。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值