`

Tomcat配置文件入门

阅读更多

Tomcat配置文件入门

http://www.ai-java.com/entry/81

 

tomcat读取配置文件

首先简单说一下tomcat是如何读取配置文件的。tomcat在启动时,首先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹,从中读取配置文件。

最重要的配置文件:server.xml

要配置tomcat,基本上了解server.xml,context.xml和web.xml就可以了。在Tomcat中,都有这几个文件的默认文件,如server.xml的内容如下:

折叠 XML/HTML 代码复制内容到剪贴板
  1. <Server port=”8005” shutdown=”SHUTDOWN”>  
  2. ...   
  3. <Service name=”Catalina”>  
  4. <Connector port=”8080” protocol=”HTTP/1.1”   
  5. maxThreads=”150” connectionTimeout=”20000”   
  6. redirectPort=”8443” />  
  7. <Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />  
  8. <Engine name=”Catalina” defaultHost=”localhost”>  
  9. <Realm className=”org.apache.catalina.realm.UserDatabaseRealm”   
  10. resourceName=”UserDatabase”/>  
  11. <Host name=”localhost” appBase=”webapps”   
  12. unpackWARs=”true” autoDeploy=”true”   
  13. xmlValidation=”false” xmlNamespaceAware=”false”>  
  14. </Host>  
  15. </Engine>  
  16. </Service>  
  17. </Server>  


The Server Component

<Server port=”8005” shutdown=”SHUTDOWN”>

顶层元素为<server>,这个元素对应着Tomcat结构中的server部分。这一行的意思是让Tomcat在8005端口监听关闭消息,如果使用telnet连接8005端口并输入SHUTDOWN,则tomcat就会关闭。为了安全,tomcat不会接受远程通过这个端口发的消息。
<Server>还有一些其他属性,如果不做配置的话,这些属性将使用默认值,下面是这些属性的介绍。
属性 描述 是否必须?
className 表示server的类,需要实现org.apache.catalina.Server接口。tocmat6默认值使用rg.apache.catalina.core.StandardServer
 
port 用来监听shutdown属性所对应的那个命令,实现关闭tomcat操作的TCP端口。tocmat会检查连接是否来自同一台机器,只有同一台机器(物理地址)发来的消息才被接受。
shutdown tomcat会监听port所规定的端口,来接受这个属性所规定的命令

<Server>还有一些子标签,内容如下:

属性 描述 数量
<Service> 包括一组和一个<Engine>相关联的<Connector>。这些Connector可以并发地接收各种协议的请求,并交给<Engine>来处理 1 or more
<Listener> 用来监听Server生命周期(start, stop, before start, after start, before stop, after stop)信息 0 or more
<GlobalNamingResources> 整个tomcat实例都可以使用的JNDI资源 0 or more

The Service Component

Service component包括一组Connector和一个Engine,这些Connector监听不同端口不同协议的请求,并且这些Connector是并发执行的,Engine则被用来处理这些请求。在默认的server.xml中,service标签的内容如下:
<Service name=”Catalina”>
<service>可以有以下属性:    
属性 描述 必需?
className service compoent所对应的java类,默认实现org.apache.catalina.core.StandServic
name service的name,通常在administration,management和logging中使用
<service>拥有这些子元素:
子元素 描述 数量
Connector 作用为处理外部的连接请求并将其发送给Engine处理。一个Connector拥有几个线程和相应资源来处理这些请求。 1 or more
Engine 常用类型有两种,Catalina和Standalone。Engine是用来处理Connector发过来的请求的。 1

The Connector Component

tomcat6提供了两种Connector,分别为HTTP/1.1和AJP/1.3。这两种Connector在默认的server.xml中的配置为:

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <Connector port=”8080” protocol=”HTTP/1.1”   
  2. maxThreads=”150” connectionTimeout=”20000”   
  3. redirectPort=”8443” />  
  4. <Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />  

 

The Engine Component

Engine在server.xml中的代码如下:

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <Engine name=”Catalina” defaultHost=”localhost”>  
  2. ...   
  3. </Engine>  

 

一个Engine就是一个容器,servlet容器。一个Engine可以处理多个虚拟Host(apache中的概念)的请求。当Engine不知该将请求交给那个host时,Engine则将请求转给defaultHost来处理。
<Engine>的属性如下表所示:
属性 描述 必需?
className Engine所对应的java类,默认使用org.apache.catalina.core.StandardEngine
backgroundProcessDelay
单位为秒,在这个属性所定义的时间之后,此Engine将进入后台处理。如果该值为负,则直接进入后台处理。后台处理一般用于处理低优先级的任务。    
defaultHost 当Engine找不到请求对应的host时,就使用这个host
jvmRoute 这是tomcat6在负载均衡中使用的标识符,
name Engine的名称
作为一个容器,Engine有许多子元素,具体内容如下表:
子元素 描述 数量
Host 每个<Host>元素都表示一个由Engine支配的虚拟主机(virtual host) 1 or more
Context 一组属性-元素的配置集合。在默认的context定义的属性可以被Engine中所有的web应用程序所使用。 0 or 1
Realm 用于身份验证等安全机制,Engine和Context都可以由Realm。如果不指定,则使用Engine的Realm。 0 or 1
Valve Standard Valve用于登陆日志,请求过滤等 0 or more
Listener 用于tomcat生命周期控制 0 or more

The Realm Component

在默认的server.xml中,Engine中的第一个子标签就是<Realm>了,其代码如下:
这段代码是对一个UserDatabase Realm的配置,它让默认的web应用程序(manager)加载tomcat-user.xml来进行用户验证。
Realm可以从很多其他数据源获取验证数据,而这也正是不同的Realm的不同之处。一般地,Realm可以从这些数据源获取用户验证数据:
  • 内存(memory):使用在内存中存放的一个表格进行验证。这个表格时在tomcat启动时从一个xml文件加载到内存中的,在这个表格中的信息格式一般为:用户名/密码/角色。这种方式一般只用于测试和开发阶段,最终产品很少使用这种方式
  • UserDatabase实现了一个可以修改的、持久的memory Realm,可以向后兼容memory Realm。
  • JDBC:使用一个关系数据库存放用户验证数据
  • DataSource:类似于JDBC Realm,使用JNDI的方式来从关系数据库中拿用户验证数据,内容最终还是在一个关系数据库里。
  • JNDI:使用JNDI来获取Realm数据,这些数据一般存放在LDAP目录下。
  • JAAS:  使用JAAS来获取用户验证信息

The Host Component

每个Host Component都是一个容器,每个<Host>标签都表示一个virtual host,在默认的<server.xml>中,Host的配置如下:

折叠 XML/HTML 代码复制内容到剪贴板
  1. <Host name=”localhost” appBase=”webapps”   
  2. unpackWARs=”true” autoDeploy=”true”   
  3. xmlValidation=”false” xmlNamespaceAware=”false”>  

 

这段代码的意思是:定义一个名为localhost的虚拟主机,应用程序存放在CATALINA_HOME/webapps目录中。unpackWARs=“true”让tomcat在webapps文件夹中发现war文件时,自动将其解压。解压的好处是可以使程序运行更快,不解压也可以使用。
下图为virtual host的示意图

<Host>有这些属性:

属性 描述 必需?
className
默认为org.
apache.catalina.core.StandardHost
appBase web应用程序文件存放的位置,相对路径为CATALINA_HOMEM
autoDeploy 设为true,则web.xml发生变化时,tomcat自动重新部署程序。实现这个功能必需允许后台处理
name virtual host的名称
backgroundProcessingDelay 跟Engine中的backgroundProcessingDelay类似
deployOnStartup 若为true,则当这个Engine启动时,tomcat将自动部署这个host,默认为true
deployXML 这个属性的目的是为了提高tomcat的安全性,控制web应用程序是否能使用META-INF/contex.xml。如果设为false,则各应用程序只能访问
$CATALINA_HOME/conf/<engine>/<host>/<app>.xml。默认值为True。
errorReportValveClass 定义host使用的error-reporting Valve,默认值为
org.apache.catalina.valves.ErrorReportValve
unpackWARs tomcat在webapps文件夹中发现war文件时,是否自动将其解压
workdir tomcat使用这个目录来放工作着的servlet和jsp(以servlet形式),这里面的servlet都是是编译好的class文件。默认为$CATALINA_HOME/work
<Host>有这些子标签
子元素 描述 数量
Context 为了实现服务器配置和应用程序配置的分离,一般不会在server.xml中设置这个标签的内容。所有应用程序的配置都可以在$CATALINA_HOME/conf/<engine>/<host>目录下维护,名称为:应用程序名.xml。程序员可以通过在META-INF目录下维护自己的context.xml,这个context.xml会被自动以“应用程序名.xml”放到$CATALINA_HOME/conf/<engine>/<host> 0 or more
DefaultContext 当host不知将请求发给哪个context时,就发给它 0 or 1
Realm 这个Host所使用的Realm 0 or 1

Web Application Context Definitions

在tomcat6中,web应用程序的具体配置是在$CATALINA_HOME/conf/<engine name>/<host name>目录下的“应用程序名.xml”中定义的,在eclipse或netbeans中,用户可以在META-INF/context.xml中做配置,这些IDE会自动在$CATALINA_HOME/conf/<engine name>/<host name>下创建“应用程序名.xml”文件。
在war包(或文件夹)的META-INF中的配置文件叫做嵌入式配置文件(embedded),默认tomcat在部署时使用这些配置文件,管理员可以通过修改deployXML属性来禁止解析这种嵌入式配置文件。

默认context.xml文件

在$CATALINA_HOME/conf目录下的context.xml是tomcat默认的context.xml文件,tomcat下所有的应用程序都使用这个文件的配置。因为它是公共的,因此里面的内容必须是所有web应用程序通用的,默认的context.xml内容只有一行:

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <Context>  
  2. <WatchedResource>WEB-INF/web.xml</WatchedResource>  
  3. </Context>  

 

在这里的web.xml被Context的一个后台程序监视,一旦发生改变,将重新部署这个Context。
context有以下这些属性:
属性 描述 必需?
className Context的java类,默认为org.apache.catalina.core.StandardContext
allowLinking 在像linux这种允许符号链接(symbolic link)的操作系统中,这个选项为True则运行该文件被链接到web应用程序树之外。在windows中,这个选项必需为false。默认值为false
antiJARLocking 使用特殊的类加载器来尽量避免JAR文件的锁定,默认为false。
antiResourceLocking 使用特殊方法来尽量避免文件锁定,默认为false。
backgroundProcessDelay 同其他backgroundProcessDelay
catcheMaxSize 设置资源代码(resource code)的最大值,默认为10240,单位为KB
catcheTTL 验证cache的间隔时间,单位为微秒,默认值为5000
cachingAllowed 决定静态资源(配置文件,图片等)是否可以加载进cache中,默认为true
caseSensitive 决定tocmat是否进行大小写检查,默认为true
cookies 使用cookie来进行session管理,默认为true。如果设为false,则需要使用url重写的方式维护session
crossContext
当使用ServletContext.getContext()方法时,允许同一个virtual host下的程序跨Context访问,默认为false
docBase
在这个Context下运行的web应用程序的文档根目录,通常被称为Context root。如果web应用程序是以war文件的方式部署的,那么这个属性的默认值为webapps/<name of war file>
override 指示本地的context.xml(war中的META-INF/context.xml)是否可以覆盖全局的context.xml(CATALINA_HOME/conf/context.xml),默认值为false
path 表示web应用程序的context路径。如果你想将这个web应用程序作为此host的默认应用程序,使用这个值:“”;默认值为docBase,war包名,或者应用程序Context文件名
privileged 默认值为false,大部分程序这个值设为false就可以了
processTlds 设置当Context启动时对TLD进行预处理,默认为true
reloadable 默认值为false。设置tocmat是否应该监视/WEB-INF/classes和/WEB-INF/lib中的变化,如果有发生改变,则自动重新部署
swallowOutput 默认为false。设置System.out和System.error的内容是否应该记录到日志文件中
tldNamespacheAware 设置tld的处理和验证是否是namespace-aware,默认为false
unloadDelay tomcat等待web应用程序卸载的微秒数,默认为2000
unpackWAR 默认为true。设置tomcat自动解压docBase中的war文件。
useNaming 默认为true。给web应用程序创建一个JavaEE-JNDI兼容的
InitialContext。如果web应用程序使用数据库连接,这个选项是必需的
 
workdir 为在这个host中运行的servlet定义一个工作目录。这个host下的应用程序可以通过javax.servlet.context.tempdir属性来活动这个目录的位置。默认为CATALINA_HOME/work
wrapperClass 设置一个实现了org.apache.catalina.Wrapper接口的类r来包装servlets
<context>有这些子元素:
子元素 描述 数量
Loader 配置用于从一个web应用程序中加载类的ClassLoader 0 or 1
Manager 配置Context的session manager,Session Manager创建,维护并保持服务器端的session。 0 or 1
Realm 这个Context中运行的web应用程序使用的Realm 0 or 1
Resources 用于获取resource。使用实现org.apache.naming.resources.FileDirContext接口的类来实现。 0 or 1
WatchedResource 当特定的资源发生改变时,用于通知AutoDeployer对web应用程序进行重新部署 0 or 1

身份验证和tomcat-users.xml

tomcat-users.xml位于$CATALINA_HOME/conf文件夹下,tomcat6使用这个文件来对使用manager工具的用户(也就是管理员)进行身份验证。tomcat6使用UserDatabase Realm来具体实现这个功能。Realm允许修改加载的数据,并可以通过将这些修改写回xml的方式来使这些修改持久化。

默认的部署配置文件--web.xml

根据servlet2.5的标准,任何一个servlet都必须在web.xml中注册,这个文件必须以web.xml放到web应用程序的WEB-INF目录下。这样可以这个web.xml就只对这个web应用程序有作用。
在$CATALINA_HOME/conf下也有一个web.xml,这个web.xml是这个tomcat实例下所有web应用程序都可以使用的。不过可以在context中修改orverride属性,来决定各web应用程序的web.xml是否可以覆盖全局的web.xml。
下面是默认的全局web.xml:

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <?xml version=”1.0” encoding=”ISO-8859-1”?>  
  2. <web-app xmlns=”http://java.sun.com/xml/ns/j2ee”   
  3. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”   
  4. xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd”   
  5. version=”2.4”>  

 

与server.xml不同,web.xml可以用schema进行验证。

默认Server上静态资源的配置

在下面的<servlet>标签中,定义了一个默认的servlet。这个默认的servlet是用来处理所有web应用程序的静态资源请求的,也可以提供目录展示(directory listing)服务。也就是说,这个servlet相当于一个像apache这样的http web server。
在默认的web.xml中对默认servlet的配置:

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <servlet>  
  2. <servlet-name>default</servlet-name>  
  3. <servlet-class>  
  4. org.apache.catalina.servlets.DefaultServlet   
  5. </servlet-class>  
  6. <init-param>  
  7. <param-name>debug</param-name>  
  8. <param-value>0</param-value>  
  9. </init-param>  
  10. <init-param>  
  11. <param-name>listings</param-name>  
  12. <param-value>true</param-value>  
  13. </init-param>  
  14. <load-on-startup>1</load-on-startup>  
  15. </servlet>  

 

默认目录列表和其他用户自定义配置

如果你不想提供用户列表功能,可以将下面代码段中的true改为false

<param-name>listings</param-name>
<param-value>true</param-value>

默认servlet(default servlet)还有这些属性:
参数 描述
listing 当有到一个目录的请求时,是否显示目录结构,一般设为true。
readonly 控制是否允许PUT,POST等HTTP写命令
input 读取资源时的缓冲区大小,一般为2KB
output 写资源时的缓冲区大小,一般也为2KB
globalXsltFile/localXsltFile 定义一个显示目录列表时使用的xslt。
sendfileSize tomcat6支持基于某个具体操作系统平台的异步sendfile()。这个值用来设置使用sendfile()方法的阀值,默认为48KB。

配置invoker servlet

invoker servlet是可以通过下面这种方式直接访问的servlet(没有参数)
http://<host name>/<context path>/servlet/<servlet name>
因为这种方式可以直接访问servlet,因此存在一定的安全隐患,所以这种方式应该仅在开发和测试阶段使用,也正因为这个原因,在tomcat6的默认web.xml中invoker servlet这段配置被注释了起来:

折叠 XML/HTML 代码复制内容到剪贴板
  1. <!--   
  2. <servlet>  
  3. <servlet-name>invoker</servlet-name>  
  4. <servlet-class>  
  5. org.apache.catalina.servlets.InvokerServlet   
  6. </servlet-class>  
  7. <init-param>  
  8. <param-name>debug</param-name>  
  9. <param-value>0</param-value>  
  10. </init-param>  
  11. <load-on-startup>2</load-on-startup>  
  12. </servlet>  
  13. -->  

 

配置JspServlet(Jasper)

JspServlet的作用是将jsp文件转为servlet。这个servlet一般被人们成为Jasper,Jasper的配置如下:

 

折叠 XML/HTML 代码复制内容到剪贴板
  1. JspServlet的作用是将jsp文件转为servlet。这个servlet一般被人们成为Jasper,Jasper的配置如下:   
  2. <servlet>  
  3. <servlet-name>jsp</servlet-name>  
  4. <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>  
  5. <init-param>  
  6. <param-name>fork</param-name>  
  7. <param-value>false</param-value>  
  8. </init-param>  
  9. <init-param>  
  10. <param-name>xpoweredBy</param-name>  
  11. <param-value>false</param-value>  
  12. </init-param>  
  13. <load-on-startup>3</load-on-startup>  
  14. </servlet>  

 

Jasper还有以下这些启动参数:
参数 描述
development 默认值为true,说明jsp文件还处于开发阶段,因此Jasper应该按modificationTestInterval参数对jsp文件进行检查,当jsp发生更改时,则对其进行重编译
fork 默认值为true。指示使用不同的JVM编译JSP,这样可以消除资源竞争和在开发阶段的类加载器冲突
checkInterval 单位为秒,规定Jasper按这个时间间隔检查jsp是否需要重编译,默认为0,指示使用后台程序处理
modificationTestInterval 主要在development为true时发挥作用,默认值为4。Jasper将按这个频率检查jsp文件是否可以验证是否修改过。
compiler 读取资源时使用的缓存大小,默认为2KB
classdebuginfo 写资源时使用的缓存大小,默认为2KB
keepgenerated 默认值为true。指示Jasper在两次调用servlet之间在工作目录中保留那个servlet,这样可以大大提高tomcat的效率
mappedfilegenStrAsCharArray
dumpSmaptrimSpaces
supressSmap
这些是jsp开发者使用的优化和调试选项。
scratchDir Jasper在编译jsp时使用的临时文件夹,默认为$CATALINA_HOME/work下的一个临时文件夹
xpoweredBy 默认为false。功能为生成X-Power-By头(header)
compilerTargetVM 编译生成的servlet的目标VM
compilerSourceVM 生成servlet的源VM

SSL和CGI Servlet的配置

在默认的web.xml中,这些Servlet的配置被注释起来了,如果你想在Standalone模式下的Tomcat中添加Apache-styleserver-side include(SSI),那么这段注释就应该被移除。

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <!--   
  2. <servlet>  
  3. <servlet-name>ssi</servlet-name>  
  4. <servlet-class>org.apache.catalina.ssi.SSIServletServlet</servlet-class>  
  5. <init-param>  
  6. <param-name>buffered</param-name>  
  7. <param-value>1</param-value>  
  8. </init-param>  
  9. <init-param>  
  10. <param-name>debug</param-name>  
  11. <param-value>0</param-value>  
  12. </init-param>  
  13. <init-param>  
  14. <param-name>expires</param-name>  
  15. <param-value>666</param-value>  
  16. </init-param>  
  17. <init-param>  
  18. <param-name>isVirtualWebappRelative</param-name>  
  19. <param-value>0</param-value>  
  20. </init-param>  
  21. <load-on-startup>4</load-on-startup>  
  22. </servlet>  
  23. -->  


下面的这个配置也是有关使tomcat以Standalone方式处理CGI请求的。

折叠 XML/HTML 代码复制内容到剪贴板
  1. <!--   
  2. <servlet>  
  3. <servlet-name>cgi</servlet-name>  
  4. <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>  
  5. <init-param>  
  6. <param-name>clientInputTimeout</param-name>  
  7. <param-value>100</param-value>  
  8. </init-param>  
  9. <init-param>  
  10. <param-name>debug</param-name>  
  11. <param-value>6</param-value>  
  12. </init-param>  
  13. <init-param>  
  14. <param-name>cgiPathPrefix</param-name>  
  15. <param-value>WEB-INF/cgi</param-value>  
  16. </init-param>  
  17. <load-on-startup>5</load-on-startup>  
  18. </servlet>  
  19. -->  

 

Servlet Mappings

<servlet-mapping>用来说明如何处理相应的URL请求,如:

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

规则是这样的,如果传进来的url符合/模式,则传给名为default的Servlet处理。
例如,如果主机名为www.example.com,并且使用Standalone模式运行的tocmat,则下面这个请求将被传给<servlet-name>为default的Servlet:
www.example.com/<context path>/
如果没在<Context>中明确标明,则<context path>的值为war文件名
根据前面<servlet>中定义的<servlet-name>对应的servlet,可以知道tomcat将使用org.apache.catalina.servlets.DefaultServlet来处理这个模式的请求
下面的这两个<servlet-mapping>标签指示所有包含*.jsp和*.jspx的url都将传给名为jsp的servlet处理。
 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <servlet-mapping>  
  2. <servlet-name>jsp</servlet-name>  
  3. <url-pattern>*.jsp</url-pattern>  
  4. </servlet-mapping>  
  5. <servlet-mapping>  
  6. <servlet-name>jsp</servlet-name>  
  7. <url-pattern>*.jspx</url-pattern>  
  8. </servlet-mapping>  

server.xml,context.xml和web.xml是如何一起协同工作的

下面这幅图是对tomcat处理一个http请求的一个示意

SSI和CGI mappings

在web.xml中,SSI和CGI的<servlet-mapping>的配置被注释掉了,如果tocmat是在Standalone模式下运行,并且要处理SSI和CGI请求,那么这几行注释可以去掉:

<!--
<servlet-mapping>
<servlet-name>ssi</servlet-name>
<url-pattern>*.shtml</url-pattern>
</servlet-mapping>
-->
<!-- The mapping for the CGI Gateway servlet -->
<!--
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
-->

Session的超时配置

<session-config>标签配置tomcat6在服务器端维持一个表示客户端的session的时间,单位为分钟。

<session-config>
<session-timeout>30</session-timeout>
</session-config>

MIME Mapping

 
折叠 XML/HTML 代码复制内容到剪贴板
  1. <mime-mapping>  
  2. <extension>abs</extension>  
  3. <mime-type>audio/x-mpeg</mime-type>  
  4. </mime-mapping>  
  5. <mime-mapping>  
  6. <extension>ai</extension>  
  7. <mime-type>application/postscript</mime-type>  
  8. </mime-mapping>  
  9. <mime-mapping>  
  10. <extension>aif</extension>  
  11. <mime-type>audio/x-aiff</mime-type>  
  12. </mime-mapping>  
  13. <mime-mapping>  
  14. <extension>aifc</extension>  
  15. <mime-type>audio/x-aiff</mime-type>  
  16. </mime-mapping>  
  17. ... more mime mappings...   
  18. <mime-mapping>  
  19. <extension>Z</extension>  
  20. <mime-type>application/x-compress</mime-type>  
  21. </mime-mapping>  
  22. <mime-mapping>  
  23. <extension>z</extension>  
  24. <mime-type>application/x-compress</mime-type>  
  25. </mime-mapping>  
  26. <mime-mapping>  
  27. <extension>zip</extension>  
  28. <mime-type>application/zip</mime-type>  
  29. </mime-mapping>  

模拟Apache Web Server:首页定义

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

catalina.policy:访问控制文件

Tomcat6使用的时内置的Java2安全模型,这个安全模型的核心思想是:
Any access to system resources that is not explicitly allowed is prohibited.
翻译过来是:除非明确授权,否则禁止访问
默认tocmat启动时是不使用这种安全策略的,除非使用这个参数启动:
> startup -security
在这个文件中,授予权限的语法一般是:

grant <security principal> { permission list... };
下面是catalina.policy中的一个片段:
// These permissions apply to javac
grant codeBase “file:${java.home}/lib/-” {
permission java.security.AllPermission;
};
// These permissions apply to all shared system extensions
grant codeBase “file:${java.home}/jre/lib/ext/-” {
permission java.security.AllPermission;
};
// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
grant codeBase “file:${java.home}/../lib/-” {
permission java.security.AllPermission;
};
// These permissions apply to all shared system extensions when
// ${java.home} points at $JAVA_HOME/jre
grant codeBase “file:${java.home}/lib/ext/-” {
permission java.security.AllPermission;
};

这段代码赋予所有资源访问java编译器所有资源的权利

// These permissions apply to the daemon code
grant codeBase “file:${catalina.home}/bin/commons-daemon.jar” {
permission java.security.AllPermission;
};
// These permissions apply to the logging API
grant codeBase “file:${catalina.home}/bin/tomcat-juli.jar” {
permission java.security.AllPermission;
};
// These permissions apply to the server startup code
grant codeBase “file:${catalina.home}/bin/bootstrap.jar” {
permission java.security.AllPermission;
};
// These permissions apply to the servlet API classes
// and those that are shared across all class loaders
// located in the “lib” directory
grant codeBase “file:${catalina.home}/lib/-” {
permission java.security.AllPermission;
};

这段代码将Server code,logging code以及API库的访问权限赋予所有资源。
最后这组代码是有关web应用程序的默认权限的。与前面的不同,这里的限制更加严格,因为它们从没有获得java.security.AllPermission授权。
第一部分是有关JDBC和JNDI的

grant {
// Required for JNDI lookup of named JDBC DataSource’s and
// javamail named MimePart DataSource used to send mail
permission java.util.PropertyPermission “java.home”, “read”;
permission java.util.PropertyPermission “java.naming.*”, “read”;
permission java.util.PropertyPermission “javax.sql.*”, “read”;

第二部分是授予对操作系统信息的读权限

/ OS Specific properties to allow read access
permission java.util.PropertyPermission “os.name”, “read”;
permission java.util.PropertyPermission “os.version”, “read”;
permission java.util.PropertyPermission “os.arch”, “read”;
permission java.util.PropertyPermission “file.separator”, “read”;
permission java.util.PropertyPermission “path.separator”, “read”;
permission java.util.PropertyPermission “line.separator”, “read”;

第三部分代码赋予对一些JVM相关属性的读权限

// JVM properties to allow read access
permission java.util.PropertyPermission “java.version”, “read”;
permission java.util.PropertyPermission “java.vendor”, “read”;
permission java.util.PropertyPermission “java.vendor.url”, “read”;
permission java.util.PropertyPermission “java.class.version”, “read”;
permission java.util.PropertyPermission “java.specification.version”,
“read”;
permission java.util.PropertyPermission “java.specification.vendor”,
“read”;
permission java.util.PropertyPermission “java.specification.name”, “read”;
permission java.util.PropertyPermission “java.vm.specification.version”,
“read”;
permission java.util.PropertyPermission “ja
分享到:
评论

相关推荐

    前端+Tomcat保姆级入门教程

    通过带着读者手从tomcat概述开始,到了解Tomca核心原理 适合人群:适合前端刚入门的小白,也适合具备一定编程基础,工作1-3年的研发人员 ...配置文件详解;高可用集群搭建;Tomcat安全问题;Tomcat原理分析

    Tomcat server.xml的配置

    Tomcat中server.xml的配置,因为很多刚入门的人可能会因为,错误修改或者删除而使Tomcat运行出现异常

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.8 Tomcat5启动流程与配置详解 1.9 HttpServlet详解 1.10 Ant使用入门 1.11 Maven Ant之间的比较 1.12 详解MANIFEST.MF文件 1.13 Maven入门--概念与实例 1.14 Subversion 1.15 jar war ear区别 1.16 如何在...

    基于tomcat配置文件server.xml详解

    该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可。其中大部分都采用了默认设置,只是在engine容器中添加了两个Host容器。 &...

    linux安装tomcat

    Linux 搭建Java + Tomcat 环境,部署项目 内容: ...2、安装并配置Tomcat 环境 3、使用命令上传文件 4、项目打包 5、项目部署到Tomcat 并进行访问 阅读门槛: 1、有一定的Linux 基础 2、Java web 入门

    Linux课程大纲——从入门到精通Linux的教程

    5.2.2 Tomcat配置uviss 5.2.3 Tomcat验证 6 RHEL4安装Oracle 6.1安装前的准备 6.2安装前配置 6.3安装 Oracle 6.4设置服务启动 7 RHEL4部署项目测试 7.1 Mysql安装 7.2 Mysql验证 7.3 OA系统安装 偶还有很...

    Tomcat从入门到放弃(一)

    2,conf:配置文件(server.xml) 3,lib:tomcat依赖的jar文件 4,log:日志文件(记录出错等信息) temp:临时文件 webapps:可执行项目(将我们开发的项目 放该目录) work:存放由jsp翻译成的java,以及编译成的class...

    JBPM5.1入门学习

    4.3.5 Jbpm相关配置文件更新 29 4.3.6 Java服务器端编码 31 4.3.7 Jsp客户端编码 50 4.3.8 Struts和spring的配置 52 4.4 部署和运行 54 4.4.1 启动Demo Human Task Service 54 4.4.2 启动Tomcat 54 4.4.3 运行Demo ...

    ejb3.0入门经典教程及源码

    3个数据库连接配置文件示例。 一、sourcecode sourcecode文件夹下是本书中实例的源代码,共计41个。 二、“软件”文件夹 该文件夹下包括apache-tomcat-5.5.26.zip、eclipse-jee-europa-fall2-win32.zip、 jboss...

    Struts2入门教程(全新完整版)

    3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 4 (5)其它配置文件 4 4.让MyEclipse提示xml信息 4 5.如何...

    Spring MVC 入门实例

    上面, 我们在 web.xml 文件中告诉 ContextLoaderListener, 我们还有另外两个配置文件 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml. applicationContext.xml: 1 2 &lt;!DOCTYPE beans PUBLIC "-//...

    java笔试题算法-secure-tomcat-datasourcefactory:标准TomcatDataSourceFactory的替代品

    java笔试题算法 安全 ...为文件生成一个新的随机加密密钥,例如创建一个新的 128 位 AES 密钥,运行以下命令: $ java -jar secure-tomcat-datasourcefactory-0.2.jar generateKey AES 128 /some/super

    快速搭建移动App服务器 (win+tomcat+轻开平台+access入门版)

    复制webeasy目录到D:\下,然后进入%TOMCAT_HOME%\conf目录,用文本编辑器(如:EditPlus)打开server.xml文件,在“Host”标签下添加一“Context”标签: 保存退出并启动tomcat 5 编辑工具 轻开平台可以用任何网页...

    AppFuse学习笔记(J2EE入门级框架)

    为了简化开发,预定义好了一套目录结构、基类、用来创建数据库、配置Tomcat、测试部署应用的 Ant 任务,帮助快速自动生成源程序和自动维护部分配置文件。 AppFuse2.0重构了AppFuse1.0,转到Maven2和Jdk1.5。

    SpringBoot整合Apache Shiro极简入门实例.zip

    项目描述 SpringBoot整合Shiro,实现菜单权限控制入门简单实例;用户菜单权限来自数据库,简单起见,user用户表中同事配置了用户菜单权限,感兴趣的小伙伴可以...该入门实例为单体应用,资源文件位于resouces文件夹下

    Linux-CentOS7.3-系统从入门到精通Wrod版

    4.17 部署Tomcat服务 108 4.18 部署LAMP网站服务 114 4.19 部署LNAMP网站服务 116 4.20 配置WEB动静分离 121 4.21 部署Squid缓存服务 122 4.22 部署Cacti监控服务 126 4.23 部署Nagios监控服务 129

    Nginx高性能WEB服务器视频.zip

    4 Nginx配置文件精讲一.ts 5 Nginx配置文件精讲二及多站点配置.ts 6 企业实战Nginx+Tomcat动静分离架构.ts 7 企业实战Nginx+PHP(FastCGI)高性能服务器.ts 8 Nginx与Tomcat-PHP架构优化.ts 9 Nginx配置优化及深入...

    jsp从入门到高级编程

    3.4.1 Tomcat的主配置文件:server.xml 3.4.2 Windows下代码保护的问题 3.4.3 Apache、IIS和Tomcat协作时工作 目录的添加 3.4.4 设定Tomcat作为Windows的服务而启动 3.4.5 在Tomcat中建立新的Web应用程序 第4章...

    图文并茂详解Springboot快速入门篇.docx

    SpringBoot默认只有一个.properties的配置文件,不推荐使用xml,后期会采用.java的文件去编写配置信息。 SpringBoot工程在部署时,采用的是jar包的方式,内部自动依赖Tomcat容器,并且提供了多环境的配置。 ...

Global site tag (gtag.js) - Google Analytics