Tomcat简介(组成,工作原理,线程数设置等)

一、简介:
tomcat是一个免费的开放源代码的web应用服务器。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。当在一台机器上配置好Apache服务器,可以利用它响应HTML页面的访问请求。实际上Tomcat是Apachae服务器的扩展,但运行时,Tomcat是独立的。配置正确,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。Tomact也有处理HTML页功能,他还是一个Servlet和JSP容器。

注:
servlet:Java servlet的简称,称为小服务程序或者服务连接器。servlet可以响应任何类型的请求,但大多数情况只用来扩展基于HTTP协议的web服务器。
servlet特点:
1)提供了可被服务器加载并执行的程序代码,并服务于来自客户端的请求。
2)servlet服务器必须支持java
3)servlet不依赖浏览器,是允许在服务器端,所以不管浏览器是否支持java,都允许请求访问servlet。Servlet的规范规定servlet不仅能运行在基于pttp协议的web服务器上,还可以运行在基于其他应用协议的服务器上。目前主要运行在web服务器上,用来扩展web服务器的功能。

servlet容器响应客户请求访问特定servlet的流程如下:

1)客户发出要求访问特定的servlet的请求
2)servlet容器接受到客户请求并解析
3)servlet容器传概念一个servletRequest对象,在servletRequest对象中包含了客户请求信息及其他关于客户的信息。例如请求头,正文,可几乎ip地址等
4)servlet容器创建一个servletResponse对象
5)servlet容器调用客户所有请求的servlet的service服务方法,并且把servletRequest对象作为参数传给该服务方法
6)servlet从servletRequest对象中可获取客户的请求信息
7)servlet利用servletResponse对象来生成响应的结果
8)servlet容器把servlet生成的响应结果发送给客户

JSP(java server pages)java服务器页面,是在传统的网页HTML文件中插入java程序段和JSP标记,从而
形成JSP文件。用JSP开发的web用用是跨平台的。既能在Linux下运行,也能在其他操作系统上运行。

二、Tomcat目录
|---bin Tomcat:存放启动和关闭tomcat脚本;
|---confTomcat:存放不同的配置文件(server.xml和web.xml);
|---doc:存放Tomcat文档;
|---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
|---logs:存放Tomcat执行时的LOG文件;
|---src:存放Tomcat的源代码;
|---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
|---work:存放jsp编译后产生的class文件;

三、Tomcat类加载
 Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)
 System($CLASSPATH/*.class和指定的jar)
 Common($CATALINA_HOME/common 下的classes,lib,endores三个子目录)
 Catalina ($CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见)
 &Shared($CATALINA_HOME/shared/下的classes和lib目录以及$CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.classlib/*.jar)

加载类和资源的顺序为:
1、/Web-INF/classes
2、/Web-INF/lib/*.jar
3、Bootstrap
4、System
5、$CATALINA_HOME/common/classes
6、$CATALINA_HOME/common/endores/*.jar
7、$CATALINA_HOME/common/lib/*.jar
8、$CATALINA_HOME/shared/classes
9、$CATALINA_HOME/shared/lib/*.jar 

四、tomcat的组成

server: 代表整个Servlet容器组件,是Tomcat的顶层元素。在<Server>元素中可以包含一个或者多个<Service>元素         
1)port 指定一个端口,这个端口负责监听关闭tomcat的请求 
2)shutdown 指定向端口发送的命令字符串 
service:   包含一个<Engine>元素,以及一个或多个<Connector>元素,这些<Connector>原先共享一个<Engine>元素
name 指定service的名字 
Connector:代表和客户程序时间交互的组件,负责接收客户请求,以及想客户返回响应结果(表示客户端和service之间的连接):
1)rt 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 
2)inProcessors 服务器启动时创建的处理请求的线程数 
3)axProcessors 最大可以创建的处理请求的线程数 
4)nableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查

询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 
5)edirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 
6)ceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
7)onnectionTimeout 指定超时的时间数(以毫秒为单位)

Engine:每个<Service>只能有一个<Engine>元素。<Engine>元素处理在同一个<Service>中所有<Contector>元素接收到的客户请求(表示指定service中的请求处理机,接收和处理来自Connector的请求):
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 
Context:每个<Context>元素代表了运行在虚拟主机上的单个Web应用。在一个<Host>元素中可以包含多个<Context>元素。使用最频繁(表示一个web应用程序):
1)ocBase 应用程序的路径或者是WAR文件存放的路径 
2)ath 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/**** 
3)eloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序 
host:在一个<Engine>元素中可以包含多个<Host>元素。每个<Host>元素定义了一个虚拟主机,他可以包含一个或多个Web应用(表示一个虚拟主机):
1)name 指定主机名 
2)Base 应用程序基本目录,即存放应用程序的目录 
3)npackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序

Logger (表示日志,调试和错误信息):
1)lassName 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口 
2)refix 指定log文件的前缀
3)uffix 指定log文件的后缀
4)imestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm (表示存放用户名,密码及role的数据库):
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 
 Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息 
 directory(指定log文件存放的位置):
pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多
五、tomcat的配置文件构成:
server.xml:主配置文件;包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息
web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;
context.xml:每个webapp都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;
tomcat-users.xml:用户认证的账号和密码文件;
catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略,一般不使用;
catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties:日志系统相关的配置;

六、Tomcat Server处理一个http请求的过程(工作原理)
假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的CoyoteHTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URLPATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

七、线程数设置等
1.加大tomcat连接数
在tomcat配置文件server.xml中的<Connector />配置中,和连接数相关的参数有:
 minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
 acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
 enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
 connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
       其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
 web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

2.mcat中如何禁止列目录下的文件
在{tomcat_home}/conf/web.xml中,把listings参数设置成false即可

3.加大tomcat可以使用的内存
tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB

4.查看内存:查看Tomcat的JVM内存
1)omcat6中没有设置任何默认用户,因而需要手动往Tomcat6的conf文件夹下的tomcat-users.xml文件中添加用户。
    如:<role rolename="manager"/>
           <user username="tomcat" password="tomcat" roles="manager"/>
    注:添加完需要重启Tomcat6。
2)问http://localhost:8080/manager/status,输入上面添加的用户名和密码。
3)然后在如下面的JVM下可以看到内存的使用情况。
JVM
    Free memory: 2.50 MB Total memory: 15.53 MB Max memory: 63.56 MB

5.区分maxThreads和maxConnections这两个参数:
maxThreads是指Tomcat线程池做多能起的线程数,而 maxConnections 则是Tomcat一瞬间做多能够处理的并发连接数。比如maxThreads=1000,maxConnections=800,假设某一瞬间的并发时1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列“排队”。如果accptCount=100,则有100进入队列排队。

6.Tomcat的JVM提示内存溢出

查看%TOMCAT_HOME%\logs文件夹下,日志文件是否有内存溢出错误

7.修改server.xml文件部署
这种方式可以不必将PetWeb目录拷贝到webapps下,直接在F:/部署。方法如下,更改$CATALINA_HOME/conf/server.xml文件,找到以下内容:
xml代码: <Context   path = "/Pet"   reloadable = "false"   docBase = "F:/PetWeb"   workDir = "d:/Mywebapps/emp"  />

path:是访问时的根地址,表示访问的路径;如上述例子中,访问该应用程序地址如下:http://localhost:8080/Pet/

reloadable:表示可以在运行时在classes与lib文件夹下自动加载类包。其中reloadable="false"表示当应用程序 中的内容发生更改之后服务器不会自动加载,这个属性在开发阶段通常都设为true,方便开发,在发布阶段应该设置为false,提高应用程序的访问速度。

docbase:表示应用程序的路径,注意斜杠的方向“/”。 docBase可以使用绝对路径,也可以使用相对路径,相对路径相对于webapps。

workdir:表示缓存文件的放置地址


猜你喜欢

转载自blog.csdn.net/zhangyi_1027/article/details/80181674
今日推荐