目录
前言
一、context.xml 文件
二、web.xml文件
三、server.xml文件
四、tomcat-users.xml
Tomcat 的配置文件由4个 xml 文件构成,context.xml、web.xml、server.xml、tomcat-users.xml 这4个文件。每个文件都有自己的功能与配置方法,下列将逐一介绍这几个文件的配置:
Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。推荐在 $CATALINA_BASEconf/context.xml 中进行独立的配置。因为 server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载,而context.xml 文件则不然。
下面是context.xml文件的配置
1
2
3 WEB-INF/web.xml
4
5 WEB-INF/eml.xml #监控资源文件,如果web.xml || eml.xml改变了,则自动重新加载改应用。
6
7 #表示数据库URL地址
17
18
context.xml的三个作用范围
在$CATALINA_BASE/conf/context.xml 里配置,如果你在这个地方配置、那么这个配置文件将会被所有的webApp共享 。
在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 context.xml,继而进行配置,这个配置将会被这个主机上的所有webapp共享。
在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 ${webAppName}.xml,继而进行配置。
此时,path="",
webAppName 即为 path属性的值,也就是访问的虚拟目录。
另:tomcat 服务器文件中的 $CATALINA_BASE/webapps 目录下的所有文件夹都是一个应用。这个时候不需要自己动手配置,服务器默认将文件夹名映射成虚拟目录名称。还可以通过 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 来配置,这个是在web应用中自己添加的,配置和其它一样。
Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。
1
2
3
4
5
6
7
8
9
1
6
7 SampleFilter
8 mypack.SampleFilter
9
10
11
16
17 SampleFilter
18 *.jsp
19
20
21
30
31 SampleServlet
32 mypack.SampleServlet
33
34 initParam1
35 2
36
37 1
38
39
40
45
46 SampleServlet
47 /sample
48
49
50
51
52 30
53
54
55
56
57 login.jsp
58 index.htm
59
该文件基本不用配置,Tomcat7 支持 Servlet3.0 注解定义,无需配置 web.xml。为了使 Tomcat 能够运行 CGI,必须注释掉
更多细节请参考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357
server.xml是对tomcat的设置,可以设置端口号,添加虚拟机这些的,是对服务器的设置
下面则是server.xml配置文件的详解:
1
2
3
4
5
6
7
8
9
10
11
16
17
18
19
20
21
22
23
24
25
26
28
29 # Realm组件,定义对当前容器内的应用程序访问的认证,通过外部资源UserDatabase进行认证
30
31
32 www.test.com
33
34
35
36
37
38
41
42
43
44
45
46
47
50
51
52
53
54
属性:
className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类;
Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须);
Shutdown:发送到端口上用于关闭Tomcat服务器的命令;
HTTP连接器:
属性:
allowTrace:是否允许HTTP的TRACE方法,默认为false;
emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false;
enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址;
maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152;
protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3;
proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回;
redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理;
scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”;
secure:在SSL连接器可将其设置为true,默认为false;
URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1;
useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false;
xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false;
acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10;
bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节;
compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain;
compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off;
connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒;
disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false;
maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节;
maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100;
maxSpareThreads:允许存在空闲线程的最大数目,默认值为50;
minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4;
port:服务端套接字监听的TCP端口号,默认值为8080(必须);
socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节;
toNoDelay:为true时,可以提高性能。默认值为true;
threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY;
例如:
1
AJP连接器:
用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。
属性:
backlog:当所有可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝;
maxSpareThread:允许存在空闲线程的最大数目,默认值为50;
maxThread:最大线程数,默认值为200;
minSpareThreads:设当连接器第一次启动时创建线程的数目,确保至少有这么多的空闲线程可用,默认值为4;
port:服务端套接字的TCP端口号,默认值为8089(必须);
topNoDelay:为true时,可以提高性能,默认值为true;
soTimeout:超时值;
为特定的Service处理所有的请示。每个Service只能包含一个Engine元素,它负责接收和处理此Service所有的连接器收到的请求,向连接发回响应,并最终显示在客户端。
属性:
className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类;
defaultHost:默认主机名,值必须与
name:指定Engine的逻辑名字(必须);
jvmRoute:在负载匀衡中使用的标识符,必须唯一;
例如:
1
表示一个虚拟主机,为特定的虚拟主机处理所有请求。
属性:
appBase:设定应用程序的基目录,绝对路径或相对于%CATALINA_HOME%的路径名;
autoDeploy:指示Tomcat运行时,如有新的WEB程序加开appBase指定的目录下,是否为自动布署,默认值为true;
className:实现了org.apache.catalina.Host接口的类,标准实现类为org.apache.catalina.core.StandardHost类;
deployOnStartup:Tomcat启动时,是否自动部署appBase属性指定目录下所有的WEB应用程序,默认值为true;
name:虚拟主机的网络名(必须);
标准Host实现类org.apahce.catalina.core.StandardHost支持的附加属性:
deployXML:为false将不会解析WEB应用程序内部的context.xml,默认值为true;
unPackWARs:虚拟主机指定临时读写使用的目录的路径名,不设,Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;
1
2
配置虚拟主机:
3
4
5
一个WEB应用程序,处理当前WEB应用程序的所有请求,每一个
属性:
className:实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类;
cookies:是否将Cookie应用于Session,默认值为true;
crossContext:是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器;默认值为false,调 径用 getContext()返回为null;
docBase:绝对路径或相对于Host的appBase 属性的相对路径;
privileged:为true,允许Web应用程序使用容器的Servlet;
path:指定上下文路径。一个虚拟主机中,上下文路径必须唯一;
reloadable:为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭;
cacheMaxSize:静态资源缓存最大值,以KB为单位,默认值为10240KB;
cachingAllowed:是否允许静态资源缓存,默认为true;
caseSensitive:默认为true,资源文件名大小写敏感,如果为false大小写不敏感;
unpackWAR:默认为true;
workDir:为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;
一个 server 有一个 service,一个 service 里有多个 connector 和一个 engine,不同的 connector 除了端口可能不同,协议也可能不同。多个connector 对应一个 engine。 engine 代表我们应用程序的容器。一个 engine 中有一个到多个 host,一个host 代表我们的一个虚拟主机。host 里又有一个到多个 context,一个 context 代表了一个应用程序的虚拟子站点。
Tomcat Manager是Tomcat自带的、用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。Tomcat是Java领域使用最广泛的服务器之一,因此Tomcat Manager也成为了使用非常普遍的功能应用。
在默认情况下,Tomcat Manager是处于禁用状态的。准确地说,Tomcat Manager需要以用户角色进行登录并授权才能使用相应的功能,不过Tomcat并没有配置任何默认的用户,因此需要我们进行相应的用户配置之后才能使用Tomcat Manager。
Tomcat Manager的用户配置是在Tomcat安装目录/conf/tomcat-users.xml
文件中进行管理的。
Tomcat Manager的用户配置非常简单,下面我们以一个具体的配置为例:
1
2
3
4
5
6
如上所示,我们只需要在tomcat-users
节点中配置相应的role
(角色/权限)和user
(用户)即可。一个user
节点表示单个用户,属性username
和password
分别表示登录的用户名和密码,属性roles
表示该用户所具备的权限。
user
节点的roles
属性值与role
节点的rolename
属性值相对应,表示当前用户具备该role节点所表示的角色权限。当然,一个用户可以具备多种权限,因此属性roles
的值可以是多个rolename
,多个rolename
之间以英文逗号隔开即可。
稍加思考,我们就应该猜测到,rolename
的属性值并不是随意的内容,否则Tomcat怎么能够知道我们随便定义的rolename
表示什么样的权限呢。实际上,Tomcat已经为我们定义了4种不同的角色——也就是4个rolename
,我们只需要使用Tomcat为我们定义的这几种角色就足够满足我们的工作需要了。
以下是Tomcat Manager 4种角色的大致介绍(下面URL中的*为通配符):
manager-gui
允许访问html接口(即URL路径为/manager/html/*)
manager-script
允许访问纯文本接口(即URL路径为/manager/text/*)
manager-jmx
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
manager-status
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
从Tomcat Manager内部配置文件中可以得知,manager-gui
、manager-script
、manager-jmx
均具备manager-status
的权限,也就是说,manager-gui
、manager-script
、manager-jmx
三种角色权限无需再额外添加manager-status
权限,即可直接访问路径/manager/status/*。
配置tomcat的时候遇到了以下问题:
1.刚开始需要用户名密码,不知道用户名和密码是什么,但是输入什么都不正确。
解决办法:
自己在tomcat-users.xml中按格式添加用户 conf文件夹里面
默认是注释掉了的,这主要是考虑到服务器的安全,如果是本地测试,去掉以下这段注释,然后重启动服务器,再输入
用户和密码都一目了然了。
2.进入manager界面之后,显示的是403 Access Denied。
解决办法:
在conf/tomcat-users.xml文件中看到这么一段话:
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary.
也就是说,为了考虑安全,tomcat默认还是没有manager-gui的管理权限的,如果想要使用manager
的话,需要自行加入管理权限(角色)。
需要加一个这样的权限(角色)
然后再加到需要的用户名中去