一.tomcat
1.Tomcat的目录
tomcat
|---bin:存放启动和关闭tomcat脚本
|---conf:存放不同的配置文件(server.xml和web.xml);
|---doc:存放Tomcat文档;
|---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
|---logs:存放Tomcat执行时的LOG文件;
|---src:存放Tomcat的源代码;
|---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
|---work:存放jsp编译后产生的class文件;
2.Tomcat配置文件
server.xml:Tomcat的主配置文件,包含Service、Connector、Engine、Realm、
Valve、Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web
应用程序提供包括MIME映射等默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自
带的manager默认情况下会用到此文件;在Tomcat中添加/删
除用户,为用户指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控
制的能力;
catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通
过类装载器装载的内容的控制;Tomcat在启动时会事先读
取此文件的相关设置;
logging.properties:Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相
关的日志,此文件即为日志记录器相关的配置信息,可以用
来定义日志记录的组件级别以及日志文件的存在位置等;
context.xml:所有host的默认配置信息;
1.Tomcat架构及常用的组件
server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<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 database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
(1)Server组件
对应配置文件中的<Server port=”8005” shutdown=”SHUTDOWN”>。这会
让Tomcat6启动一个server实例(即一个JVM),它监听在8005端口以接
收shutdown命令,使用 telnet 连接8005 端口可以直接执行 SHUTDOWN
命令来关闭 Tomcat。各Server的定义不能使用同一个端口,这意味着如果
在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管
理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基
于安全角度的考虑,这通常不允许远程进行。
Server的相关属性:
className:用于实现此Server容器的完全限定类的名称,默认为
org.apache.catalina.core.StandardServer;
port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为
SHUTDOWN;
(2)Service组建
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过
一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。
困此,Service要包含一个引擎、一个或多个连接器。
如上面示例中的定义:<Service name=”Catalina”>,这定义了一个名为
Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当
中。
Service相关的属性:
className:用于实现service的类名,一般都是
org.apache.catalina.core.StandardService。
name:此服务的名称,默认为Catalina;
(3)Connector组件
Connector组建是请求接收环节与请求处理环节的连接器,具体点说,就是
将接收到的请求传递给Tomcat WEB容器进行处理。
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
* Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是
Apache, IIS, Nginx等;
* Tomcat作为独立服务器:请求来自于web浏览器;
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接
器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,
以适应多种请求方式。
定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。
一般说来,常见于server.xml中的连接器类型通常有4种:
* HTTP连接器 * SSL连接器 * AJP 1.3连接器 * proxy连接器
如上面示例server.xml中定义的HTTP连接器:
<Connector port=”8080″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″/>
定义连接器时可以配置的属性非常多,但通常定义HTTP连接器时必须定义
的属性只有“port“,定义AJP连接器时必须定义的属性只有”protocol”,因为
默认的协议为HTTP。以下为常用属性的说明:
* address:指定连接器监听的地址,默认为所有地址,即0.0.0.0; 可以自
己指定地,如
* maxThreads:支持的最大并发连接数,默认为200;
* port:监听的端口,默认为0;
* protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为
AJP/1.3;
* redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的
HTTPS请求时,则转发至此属性定义的端口;
* connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默
认为60000,即1分钟;
* enableLookups:是否通过request.getRemoteHost()进行DNS查询以获
取客户端的主机名;默认为true; 进行反解的,可以设
置为false。
* acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均
处于繁忙状态时,新发来的请求将被放置于等待队列中;
下面是一个定义了多个属性的SSL连接器:
<Connector port=”8443″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” acceptCount=”100″ debug=”0″ scheme=”https”
secure=”true” clientAuth=”false” sslProtocol=”TLS” />
剩下的不粘贴了,自己去看:
https://www.cnblogs.com/irockcode/p/6796531.html
2.Tomcat调优
(1)内存调优(其实JVM调优更靠谱,这里写内存调优是为了防止面试时候答JVM
调优让面试官直接问JVM调优)
(2)