Tomcat 的配置文件由4个 xml 文件构成,context.xml、web.xml、server.xml、tomcat-users.xml 这4个文件。每一个文件都有本身的功能与配置方法,下列将逐一介绍这几个文件的配置:html
1、context.xml 文件java
Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动从新加载这个文件,而不须要重启服务器。推荐在 $CATALINA_BASEconf/context.xml 中进行独立的配置。由于 server.xml 是不可动态重加载的资源,服务器一旦启动了之后,要修改这个文件,就得重启服务器才能从新加载,而context.xml 文件则否则。mysql
下面是context.xml文件的配置web
1 <Context path="/eml" docBase="eml" debug="0" reloadbale="true" privileged="true"> 2 3 <WatchedResource>WEB-INF/web.xml</WatchedResource> 4 5 <WatchedResource>WEB-INF/eml.xml</WatchedResource> #监控资源文件,若是web.xml || eml.xml改变了,则自动从新加载改应用。 6 7 <Resource name="jdbc/testSiteds" #表示指定的jndi名称 8 auth="Container" #表示认证方式,通常为Container 9 type="javax.sql.DataSource" 10 maxActive="100" #链接池支持的最大链接数 11 maxIdle="40" #链接池中最多可空闲maxIdle个链接 12 maxWait="30000" #链接池中链接用完时,新的请求等待时间,毫秒 13 username="txl" #表示数据库用户名 14 password="123456" #表示数据库用户的密码 15 driverClassName="com.mysql.jdbc.Driver" #表示JDBC DRIVER 16 url="jdbc:mysql://localhost:3306/testSite" /> #表示数据库URL地址 17 18 </Context>
context.xml的三个做用范围sql
1. tomcat server 级别:数据库
在$CATALINA_BASE/conf/context.xml 里配置,若是你在这个地方配置、那么这个配置文件将会被全部的webApp共享 。apache
2. Host 级别:跨域
在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 context.xml,继而进行配置,这个配置将会被这个主机上的全部webapp共享。浏览器
3. web app 级别:缓存
在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 ${webAppName}.xml,继而进行配置。
此时,path="",
webAppName 即为 path属性的值,也就是访问的虚拟目录。
另:tomcat 服务器文件中的 $CATALINA_BASE/webapps 目录下的全部文件夹都是一个应用。这个时候不须要本身动手配置,服务器默认将文件夹名映射成虚拟目录名称。还能够经过 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 来配置,这个是在web应用中本身添加的,配置和其它同样。
<context> 标签是使用,
2、web.xml文件
Web应用程序描述文件,都是关因而Web应用程序的配置文件。全部Web应用的 web.xml 文件的父文件。
1 <web-app > 2 <filter></filter> 3 <filter-mapping></filter-mapping> 4 <servlet></servlet> 5 <servlet-mapping></servlet-mapping> 6 <session-config></session-config> 7 <mime-mapping></mime-mapping> 8 <welcome-file-list></welcome-file-list> 9 </web-app >
1 <!-- 2 filter 配置Servlet过滤器 3 filter-name 定义过滤器的名字。当有多个过滤器时,不能同名 4 filter-class 指定实现这一过滤的类,这个类负责具体的过滤事务 5 --> 6 <filter> 7 <filter-name>SampleFilter</filter-name> 8 <filter-class>mypack.SampleFilter</filter-class> 9 </filter> 10 11 <!-- 12 filter-mapping 设定过滤器负责过滤的URL 13 filter-name 过滤器名。这里的名字必定要和filter中的过滤器名匹配 14 url-pattern 指定过滤器负责过滤的URL 15 --> 16 <filter-mapping> 17 <filter-name>SampleFilter</filter-name> 18 <url-pattern>*.jsp</url-pattern> 19 </filter-mapping> 20 21 <!-- 22 servlet 配置Servlet. 23 servlet-name 定义Servlet的名字 24 servlet-class 指定实现这个servlet的类 25 init-param 定义Servlet的初始化参数和参数值,可有多个init-param。在servlet类中经过getInitParamenter(String name)方法访问初始化参数 26 load-on-startup 指定当Web应用启动时,装载Servlet的次序。 27 当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其余数值大的servlet. 28 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它 29 --> 30 <servlet> 31 <servlet-name>SampleServlet</servlet-name> 32 <servlet-class>mypack.SampleServlet</servlet-class> 33 <init-param> 34 <param-name>initParam1</param-name> 35 <param-value>2</param-value> 36 </init-param> 37 <load-on-startup>1</load-on-startup> 38 </servlet> 39 40 <!-- 41 配置servlet映射(下面代码为SampleServlet指定的相对URL为"/sample": 42 servlet-name 指定servlet的名字,这里的名字应该和<Servlet>元素中定义的名字匹配。 43 url-pattern 指定访问这个servlet的URL。只需给出相对路径。 44 --> 45 <servlet-mapping> 46 <servlet-name>SampleServlet</servlet-name> 47 <url-pattern>/sample</url-pattern> 48 </servlet-mapping> 49 50 <!--配置session session用来设定HttpSession的生命周期。单位(秒)--> 51 <session-config> 52 <session-timeout>30</session-timeout> 53 </session-config> 54 55 <!--配置Wel0come0文件清单--> 56 <welcome-file-list> 57 <welcome-file>login.jsp</welcome-file> 58 <welcome-file>index.htm</welcome-file> 59 </welcome-file-list>
该文件基本不用配置,Tomcat7 支持 Servlet3.0 注解定义,无需配置 web.xml。为了使 Tomcat 可以运行 CGI,必须注释掉<servlet-name> CGI 的那段。
更多细节请参考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357
3、server.xml文件
server.xml是对tomcat的设置,能够设置端口号,添加虚拟机这些的,是对服务器的设置
下面则是server.xml配置文件的详解:
1 <Server port="8005" shutdown="SHUTDOWN"> 2 <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 3 <Listener className="org.apache.catalina.security.SecurityListener" /> 4 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 5 <Listener className="org.apache.catalina.core.JasperListener" /> 6 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 7 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 8 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 9 <GlobalNamingResources> 10 <!-- 全局命名资源,来定义一些外部访问资源,其做用是为全部引擎应用程序所引用的外部资源的定义 --!> 11 <Resource name="UserDatabase" auth="Container" 12 type="org.apache.catalina.UserDatabase" 13 description="User database that can be updated and saved" 14 factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 15 pathname="conf/tomcat-users.xml" /> 16 </GlobalNamingResources> 17 <!-- 定义的一个名叫“UserDatabase”的认证资源,将conf/tomcat-users.xml加载至内存中,在须要认证的时候到内存中进行认证 --> 18 <Service name="Catalina"> 19 <!-- # 定义Service组件,同来关联Connector和Engine,一个Engine能够对应多个Connector,每一个Service中只能一个Engine --!> 20 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 21 <!-- 修改HTTP/1.1的Connector监听端口为80.客户端经过浏览器访问的请求,只能经过HTTP传递给tomcat。还能够设置server与URIEncoding参数 --> 22 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 23 <Engine name="Catalina" defaultHost="test.com"> 24 <!-- 修改当前Engine,默认主机是,www.test.com --> 25 <Realm className="org.apache.catalina.realm.LockOutRealm"> 26 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 27 resourceName="UserDatabase"/> 28 </Realm> 29 # Realm组件,定义对当前容器内的应用程序访问的认证,经过外部资源UserDatabase进行认证 30 <Host name="test.com" appBase="/web" unpackWARs="true" autoDeploy="true"> 31 <!-- 定义一个主机,域名为:test.com,应用程序的目录是/web,设置自动部署,自动解压 --> 32 <Alias>www.test.com</Alias> 33 <!-- 定义一个别名www.test.com,相似apache的ServerAlias --> 34 <Context path="" docBase="www/" reloadable="true" /> 35 <!-- 定义该应用程序,访问路径"",即访问www.test.com便可访问,网页目录为:相对于appBase下的www/,即/web/www,而且当该应用程序下web.xml或者类等有相关变化时,自动重载当前配置,即不用重启tomcat使部署的新应用程序生效 --> 36 <Context path="/bbs" docBase="/web/bbs" reloadable="true" /> 37 <!-- 定义另一个独立的应用程序(虚拟主机),访问路径为:www.test.com/bbs,该应用程序网页目录为/web/bbs --> 38 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs" 39 prefix="www_access." suffix=".log" 40 pattern="%h %l %u %t "%r" %s %b" /> 41 <!-- 定义一个Valve组件,用来记录tomcat的访问日志,日志存放目录为:/web/www/logs若是定义为相对路径则是至关于$CATALINA_HOME,并不是相对于appBase,这个要注意。定义日志文件前缀为www_access.并以.log结尾,pattern定义日志内容格式,具体字段表示能够查看tomcat官方文档 --> 42 </Host> 43 <Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> 44 <!-- 定义一个主机名为man.test.com,应用程序目录是$CATALINA_HOME/webapps,自动解压,自动部署 --> 45 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.16.100.*" /> 46 <!-- 定义远程地址访问策略,仅容许172.16.100.*网段访问该主机,其余的将被拒绝访问 --> 47 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs" 48 prefix="bbs_access." suffix=".log" 49 pattern="%h %l %u %t "%r" %s %b" /> 50 <!-- 定义该主机的访问日志 --> 51 </Host> 52 </Engine> 53 </Service> 54 </Server>
一、<Server>元素:
是整个配置文件的根元素。表示整个Catalina容器。
属性:
className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类;
Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须);
Shutdown:发送到端口上用于关闭Tomcat服务器的命令;
二、<Connector>元素:
链接器,负责接收客户的请求,以及向客户端回送响应的消息。
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 <Connector 2 port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" 3 redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
AJP链接器:
用于将Apache与Tomcat集成在一块儿,当Apache接收到动态内容请求时,经过在配置中指定的端口号将请求发送给在此端口号上监听的AJP链接器组件。
属性:
backlog:当全部可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝;
maxSpareThread:容许存在空闲线程的最大数目,默认值为50;
maxThread:最大线程数,默认值为200;
minSpareThreads:设当链接器第一次启动时建立线程的数目,确保至少有这么多的空闲线程可用,默认值为4;
port:服务端套接字的TCP端口号,默认值为8089(必须);
topNoDelay:为true时,能够提升性能,默认值为true;
soTimeout:超时值;
三、<Engine>元素:
为特定的Service处理全部的请示。每一个Service只能包含一个Engine元素,它负责接收和处理此Service全部的链接器收到的请求,向链接发回响应,并最终显示在客户端。<Engine>至少有一个<Host>元素,必须至少有一个<Host>属性的名字与defaultHost指定的名字相匹配。
属性:
className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类;
defaultHost:默认主机名,值必须与<Service>的name值相匹配;
name:指定Engine的逻辑名字(必须);
jvmRoute:在负载匀衡中使用的标识符,必须惟一;
例如:
1 <Engine name="Cataline" defaultHost="localhst">
四、<Host>元素:
表示一个虚拟主机,为特定的虚拟主机处理全部请求。
属性:
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 <Host name="localhst" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 2
配置虚拟主机: 3 <Hostname="xxx" appBase="/test"> 4 <Contentpath=" " docBase="www/"/> 5 </Hostname>
五、<context>元素:
一个WEB应用程序,处理当前WEB应用程序的全部请求,每个<Context>必须使用惟一的上下文路径。
属性:
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 表明了一个应用程序的虚拟子站点。
4、tomcat-users.xml
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 <tomcat-users> 2 <role rolename="manager-gui"/> 3 <role rolename="manager-script"/> 4 <user username="tomcat" password="tomcat" roles="manager-gui"/> 5 <user username="admin" password="123456" roles="manager-script"/> 6 </tomcat-users>
如上所示,咱们只须要在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中的*为通配符):
从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文件夹里面
默认是注释掉了的,这主要是考虑到服务器的安全,若是是本地测试,去掉如下这段注释,而后重启动服务器,再输入
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
用户和密码都一目了然了。
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
的话,须要自行加入管理权限(角色)。
须要加一个这样的权限(角色)
<role rolename="manager-gui"/>
而后再加到须要的用户名中去
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>
这样OK了。