Tomcat基础详解

Tomcat基础详解

组件原理图如下:

任何tomcat实例就是一个server,而一个server内部要想能够解析jsp页面转义编译serlet程序,要靠其引擎来实现

而引擎才是真正意义上执行jsp代码的容器,都是tomcat用类来描述这些组件的

同时,为了接受用户的请求,需要基于connector组件,所谓监听的套接字的程序,能够接手用户的请求,被称为连接器

一个server内部可以完全运行N个引擎,无非就是运行多个虚拟机而已

war包的概念

放在网页目录可以直接访问,而部署的时候可以自动将其展开装载,而这是部署本身所完成的工作

在实现web站点的时候,在出程序之下有目录比如/web/htdoc,而在其目录下有一子目录/web/htdoc/bbs 而在其下有个论坛程序

这个目录程序跟其他程序可能不在同一组,而新加的子目录则需要重新部署,因为其属于独立的应用程序,因为每个独立程序都需要独立部署

对于tomcat来讲每一个host内部还有一子组件,叫做conntest,其作用是为了实现程序的独立部署

对于tomcat来讲要想记录日志的话,因此这些都需要使用特殊接口来实现,所以,任何一个需要操作硬件资源的进程,资源都有一个类在实现我们的需求,tomcat也一样。

常见组件

1.服务器(server)

实例,通常一个jvm只能包含一个实例,一般情况下,一个物理服务器可以启动多个jvm,从而启动多个实例,但一般不这么做

2.服务(service)

一个服务组件通常包含一个引擎和此引擎相关联的一个或多个链接服务器

3.连接器(connectors)

一个引擎能配置多个连接器 但是每个连接器的端口不能冲突

同时,tomcat也支持AJP JSERV和JK2连接器,实现让apache反向代理到后端服务器的非常高效的传输协议

容器类组件

4.引擎

可以自己接收用户的http请求,并构建响应报文,而且可以在内部处理java程序的整个套间

5.主机

6.上下文

被嵌套类组件

7.阀门

能够过滤也可以做访问控制

8.日志记录器

9.领域(Realm)

用来实现用户的认证和授权

对tomcat来讲,每种模型上的实现必须开发一种程序,才能完成相应组件的功能,而java中任何程序都是一个类


Tomcat安装

查看文件:

# cat /usr/local/tomcat/conf/server.xml

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

<Serverport="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener"/>
  <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 databasethat can be updated and saved"
             factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />            #其调用tomcat-user.xml配置文件进行用户认证
  </GlobalNamingResources>

服务类组件配置信息,将连接器关联至引擎上

<Servicename="Catalina">
   <Connector port="8080" protocol="HTTP/1.1"                   #所在监听端口,以及协议版本号              
   connectionTimeout="20000"                         #连接超时时间,单位毫秒              
   redirectPort="8443" />                            #必要的时候可以做重定向,定义在8443
       <Connector port="8443"protocol="HTTP/1.1" SSLEnabled="true"        #端口监听在8443,协议http1.1              
       maxThreads="150" scheme="https" secure="true"            #最大线程,协议版本,安全的              
       clientAuth="false" sslProtocol="TLS" />                  #不验证客户端 ssl协议用的是tls
 
   <Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />   
 
   <Engine name="Catalina" defaultHost="localhost">                       #引擎,名为catalina
     <RealmclassName="org.apache.catalina.realm.LockOutRealm">       
       <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"              
       resourceName="UserDatabase"/>      </Realm>
    <Host name="localhost"  appBase="webapps"                       #应用程序存放的位置,相对路径
           unpackWARs="true" autoDeploy="true">                     #如果是war文件格式,是否解压,是否自动部署
 
         #定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式        
         <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
              prefix="localhost_access_log." suffix=".txt"         #日志的命名 suffix表示时间戳              
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />        #访问日志的格式      
           </Host>    
       </Engine>  
   </Service>
</Server>

Connector组件:

进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:

Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;

Tomcat作为独立服务器:请求来自于web浏览器;

Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。

连接器类型:

定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:

1) HTTP连接器

2) SSL连接器

3) AJP 1.3连接器

4) proxy连接器

HTTP连接器:

如上面示例server.xml中定义的HTTP连接器:

    <Connector port="8080" protocol="HTTP/1.1"
      maxThreads="150" connectionTimeout="20000"
      redirectPort="8443"/>

AJP连接器:  

定义连接器时可以配置的属性非常多,但通常定义HTTP连接器时必须定义的属性只有“port”,定义AJP连接器时必须定义的属性只有"protocol",因为默认的协议为HTTP。以下为常用属性的说明:

1) address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;

2) maxThreads:支持的最大并发连接数,默认为200;

3) port:监听的端口,默认为0;

4) protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;

5) redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;

6) connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;

7) enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;

8) acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;

HTTPS连接器:

下面是一个定义了多个属性的SSL连接器:

    <Connector port="8443"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" />

启用manager功能:

编辑tomcat-user.xml,添加如下行:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="standard"/>
<user username="tomcat" password="secret" roles="manager-gui,manager-script,standard"/>


启用host-manager和server status功能:

<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="admin-gui"/>

而后重启tomcat。

Manager的四个管理角色:

manager-gui - allows access to the HTML GUI and the status pages

manager-script - allows access to the text interface and the status pages

manager-jmx - allows access to the JMX proxy and the status pages

manager-status - allows access to the status pages only

原文地址:http://blog.51cto.com/lidongfeng/2063680

时间: 2024-10-06 23:26:18

Tomcat基础详解的相关文章

Tomcat配置详解

一.Tomcat定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML页面的访问请求.实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的 java基础 Java体系结构包括四

Swift学习——Swift基础详解(四)

A:小儿编程很不好! B:多半是不爱学,从看英文版开始,让你爱上编程! Type Aliases    类型重定义(typedef) Swift中重定义类型的关键字是typealias,至于怎么用,应该不必多说了,看例子: typealias AudioSample = UInt16 //定义了一个类型名称AudioSample,代表UInt16类型 var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound is now 0 Boo

Swift学习——Swift基础详解(一)

注:由于基础部分在Swift Tour 中已经大体的说明了,所以在详解中不会达到100%的原文释义 Constants and Variables  常量和变量 常量和变量都需要声明名称和类型(作为程序员,这些基础也就不说了),常量一次赋值不能改变,变量的值可以改变 Declaring Constants and Variables   声明常量和变量 常量和变量在使用之前必须要声明,使用let关键字定义常量,var关键字定义变量 下面的例子可以用来定义用户登录的时候最大的尝试次数: let m

Swift学习——Swift基础详解(二)

上节说了没有营养的变量和常量,这玩意,都差不多,自己稍微看下就好了 Integers    整型 整数就是整数了,没有小数,整数有符号(+,-,0)或者无符号(0,+) Swift提供了8,16,32,64位的有符号和无符号的整数,命名使用C的方式,比如,8位无符号的整型UInt8,32位有符号的整型就是Int32 Integer Bounds    整型范围 可以使用min 和 max获取整数类型的最大值和最小值 let minValue = UInt8.min // minValue is

HAProxy:基础详解

一.简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动.单一进程模型,此模型支持非常大的并发连接数.多进程或多线程模型受内存

Swift学习——Swift基础详解(三)

小葵花课堂继续开讲 Numeric Literals    数字文本 数字文本有以下几种写法: A decimal number, with no prefix A binary number, with a 0b prefix An octal number, with a 0o prefix A hexadecimal number, with a 0x prefix 十进制数,无前缀:二进制数,0b前缀:八进制数,0o前缀:十六进制数,0x前缀 论数字17的N种表现形式: let deci

Swift学习——Swift基础详解(八)

Assertions    断言 可选可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况.然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行.这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因. Debugging with Assertions    使用断言进行调试 断言会在运行时判断一个逻辑条件是否为true.从字面意思来说,断言"断言"一个条件是否为真.你可以使用断言来保证在运行其他代

Swift学习——Swift基础详解(六)

Optionals    选配 选配(好像不是这么翻译的)适用于那些值可能为空的情况,一个选配有两种情况:存在值并且等于x,或者值不存在. 选配的概念在OC和C里面并没有,在OC中最接近的概念就是:OC中的返回值为对象的函数,当对象不存在的时候,可以返回nil,但是nil只能代表对象,不可以代表基础类型或者结构体和枚举类型.OC中使用NSNotFound表示值不存在.在Swift中,不需要使用其他的类型表示不存在的值. 举个例子: 在Swift中,String类型有一个方法叫做toInt,但是并

Android BroadcastReceiver基础详解一

-.BroadcastReceivcer概述 1.什么是广播 BroadcastReceiver是Android四大组件之一,本质是一种全局的监听器,用于监听系统全局的广播消息.因此它可以非常方便的实现不同组件之间的通信. 2.BroadcastReceiver的创建启动 BroadcastReceiver是用用于接受程序所放出的Broadcast Intent,与应用程序启动的Activity.Service相同.也只需要两步: ①.创建需要启动的Broadcast的Intent ②.创建一个