tomcat整理备忘

Tomcat分二种组件,一种是可以包含其它组件的容器组件: C-H-E-S(chess),非容器组件包含在容器组件中,最重要的一种非容器组件:Connector

1.Server标签并不是组件.不要把它混淆成S组件.Service组件包含了子组件构成了一个完整的服务器实例.
2.一个JSP/Servlet容器是指一个Engine组件,一个服务器是指一个Service组件
3.per project per tomcat得要多少服务器,所以通常中小公司都会配置多个S组件或多个H组件.
1).配置多个H组件:
可以配置不同的服务器实例,好处是每个实例都单独配置使用Connector这样的连接缓冲队列.缺点是配置麻烦点.
如果想共享Connector,可以在一个Service里面定义多个Host.每个Host组件可以代表不同的域名.这样所有Host可以共享相同的Connector.
Host里面又可以定义这个虚拟主机下面的多个应用.比如有一个abc.com的域名,现想要增加二级域名 " a.abc.com " ,预期通过该二级域名访问一个位于 " D:\a " 文件夹下的项目 ,已在系统的 " hosts " 表中添加 " 127.0.0.1 abc.com",并在tomcat/conf 目录下的 " server.xml "中添加
<Host name="a.abc.com" unpackWARs="true" autoDeploy="true"
          xmlValidation="false" xmlNamespaceAware="false" appBase="webapps">
<Context path="app" docBase="D:\a"/>
</Host>
运行tomcat,访问a.abc.com出现预期的效果(即存放在 " D:\a " 下的网页)
可以在DNS里面指定a.abc.com 127.0.0.1,当没有指定的时候,tomcat根本不知道此host对应的ip地址,就会利用配置的default host(localhost)进行处理
2).配置多个S组件.
另一种配置是使用多个S(Service)组件.每个S组件配置不同的端口的connector即可.比如http协议的connector配置另一个端口8081.

4.reloadable=true的含义

1)reloadable=true表示热加载。热加载一般指Servlet发生改变时,重新加载整个应用.如果单独加载新的类实例就是热部署了 

1.1)WTP的“Auto Reloading Enabled”对应server.xml里面的reloadable值。

1.2)WTP在debug的模式下(注意,run模式不支持),在Tomcat配置界面的module部分可以去掉“Auto Reloading Enabled”选项。因为tomcat对某一个java类的修改本来就不需要重新部署整个app,除非修改的是servlet,这在应用很大的情况下可以节省一些时间。这有些让人迷惑,因为在应用较小的情况下,该值通常都是true.

 

 

2)WTP中的servers中的publish配置:决定使用哪种方式部署,一种是打成war或ear部署的tomcat的webapps目录下,另一种直接通过展开目录进行部署。这个参数与热部署没有关系。

Two new options which affect publishing are now available in the Server Options section of the Tomcat server editor. The Tomcat server must be 5.0.x or later for these options to be enabled. The Serve modules without publishing option does what it says. Web content will be served directly from the "WebContent" folder of the Dynamic Web Project. A customized context is used to make the project's dependencies available in the Web application's classloader. The Publish module contexts to separate XML files option will publish contexts using the preferred method of separate XML files under the "conf/Catalina/localhost" directory, rather than keeping them in the "server.xml" file. A couple of improvements for this option are noted in Bugs 180931 and 180936.



5.tomcat解析Server.xml是通过common-digester工具进行的,它可以把xml文件的元素变成一个类的实例,并建立父子元素间的引用

 

7.tomcat的jvm设置:

    /*------------- linux start ----------------*/  
$cd /usr/local/apache-tomcat-6.0.18/bin //进入你tomcat的bin目录
$vim catalina.sh //编辑你的 catalina.sh 文件
找到里面的

# Set juli LogManager if it is present
if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
fi

把 JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
修改为 JAVA_OPTS="$JAVA_OPTS -Xms5120m -Xmx5120m -Xmn2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=500 -XX:+CMSClassUnloadingEnabled -XX:+CMSClassUnloadingEnabled -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"


--------------------------------------------------------

 

Tomcat的体系结构

图一

 
 
 

   图二

   Tomcat 6.0支持Servlet2.5和Jsp2.1规范,由一系列嵌套的组件组成。

  • Service组件:Tomcat服务器的实例。一个JVM中生成一个,可以在一台服务器上配置不同的端口,从而启动多个Tomcat实例
  • Connector组件:负责连接客户端与应用程序。接受来自客户端的请求以及向客户返回响应的结果。
  • Engine组件引擎组件负责接受和处理来自它所属的Service中的所有的Connection的请求。每个Service中只能包含一个Engine组件。
  • Host组件:一个虚拟主机,允许在一台物理主机上布置多个web应用。
  • Context组件一个web应用。一个虚拟主机上能够运行多个Context,它们通过各自的Context path 进行区分。

其中蓝色字体表示该组件为一个容器组件。容器组件可以包含其它组件。下面介绍一些只能嵌套在容器中的组件。

  • Global Resources全局资源组件:只能嵌套在Server组件中,用于配置Server中其他组件所用到的全局jndi资源。
  • Loader 加载组件:只能嵌套在Context组件中,用于指定一个web应用的类加载器,并将该应用程序的类和资源加载到内存中。
  • Logger 日志组件:能够借助log4j来实现日志。
  • Manager 管理器组件:只能嵌套在Context组件中。管理器组件是会话管理器,负责会话的创建和维护。
  • Realm 域组件:是一个包含用户名、密码和用户角色的数据库。
  • Resources 资源组件:只能嵌套在Context组件中,它代表的是web应用程序中的静态资源,以及它们被允许存放的格式。
  • Valve 阀组件:用请求在到达目的地前,截取该请求,并处理它。有点类似于Servlet规范中定义的过滤器。它是Tomcat专有的、目前不能用于其他的jsp/servlet容器。

 配置Tomcat

Tomcat 6服务器启动后,会读取多个XML配置文件。这些配置文件位于CATALINA_HOME/conf目录下,包含以下配置文件:

catalina.policy:配置安全管理策略。

catalina.properties:配置Tomcat的类加载器。

context.xml:配置上下文,能够所有的web应用使用。

server.xml:Tomcat的基本配置,包括服务、连接器、引擎、域、阀、主机等。

logging.properties:配置日志,指定了日志的输出ConsoleHander和FileHandler。

Tomcat-user.xml:包含用户认证和角色映射配置。Tomcat的admin和manager应用都默认使用该文件。

web.xml:默认的web应用部署描述符文件。用于Tomcat 6中自动部署web应用,如果web应用有自己的部署描述符,则内容覆盖默认部署的设置。

 

Tomcat6 在CATALINA_BASE环境变量指定的目录下找conf目录并加载配置,如果没有指定该环境变量,则在CATALINA_HOME指定的目录下找conf目录并加载配置,可以在同一台机器上配置多个并发的Tomcat只需要指定不同的配置和端口即可。

 

配置server.xml

1、 配置<server>

 

<server>的属性

classname:指定实现org.apache.catalina.Server接口的类。no

port:指定Tomcat服务器监听shutdown命令的端口。yes

shutdown:指定终止tomcat服务器运行时,发给tomcat服务器的shutdown监听端口的字符串。yes

 

<server>的子元素

<GlobalNamingResources>:服务器全局jndi资源。1个

<Service>:服务组件。1个或多个

 

2、配置全局命名资源<GlobalNamingResources>

 

<GlobalNamingResources>的子元素

<Environment>:全局变量。0或多个

<Resource>:全局jndi资源。0或多个

 

  • <Environment>的属性

description:环境入口描述。no

name:环境入口名字,相对于java:comp/env上下文。yes

override:默认为true,如果用户不想web应用部署描述符覆盖值的话,设置为false。no

type:入口类型。必须是在servlet规范中表明的合法的类型。yes

value:入口的值。yes

  • <Resource>的属性

auth:指定是web应用代码本身登录到对应的资源管理器,还是由容器代表web应用 登录到资源管理器。该属性的值必须是Application或者Container。如果在web应用部署描述符中使用<resource- ref>,这个属性是必需的。如果使用<resource-env-ref>,这个属性是可选的。

desprition:资源的描述。no

name:资源的名字。yes

scope:指定通过这个resource manager得到的连接是否共享。该属性的值必须是Shareable或者Unshareable。默认情况下,假定连接是共享的。no

type:当web应用查找该资源的时候,返回java类名的全称。yes

 

Tomcat 6不再使用Tomcat 5和早期版本使用的<ResourceParams>元素。代替的是使用<Resource>元素属性提供信息。

 

 

 3、配置服务<Service>

服务组件是由多个连接器组件和一个引擎组件组成。在日志和错误信息中将会出现服务名称,用于清晰的表明该组件。

 

<Service>元素属性

classname:指定service类使用的java类名,默认是org.apache.catalina.core.StandardService。no

name:定义service名称,用于登录和管理。yes

 

<Service>元素的子元素

Connector:来自用户或其他web服务器的请求。1个或者多个

Engine:负责请求的处理。1个

 

4、配置连接器<Connector>

请求进入Tomcat的两种情况: 连接器的来源

  • 来自前端的web服务器。可能是Apache,IIS或者其他web服务器。
  • 来自web浏览器。

 在一个引擎中可以配置多个连接器,比如一个服务器提供http服务和https服务给用户。这时需要在引擎中配置http连接器和https连接器。

在server.xml中预定义了4个最普通的连接器: 连接器的类型

  • http连接器
  • SSL连接器
  • AJP1.3连接器,用于连接其他web服务器。
  • 代理连接器

 <Connector>元素的共同属性

address:如果服务器上有两个以上IP地址,该属性可以设定端口监听的IP地址。默认情况下,端口会监听服务器上所有IP地址。

alloTrace:布尔值,设置为true,trace http的方法可用。默认为false。

enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名。false表示跳过域名解析,直接把IP地址作为字符串返回。默认为true。

mastPostSize:post请求字节的最大大小。默认为2097152。

redirectPort:指定转发端口,如果当前端口只支持non-ssl请求,在需要安全通信的情况下,自动将把客户请求转发到基于SSL的redirectPort端口。

scheme:连接器使用的协议名称。例如可以为SSL连接器,设置属性为https。默认为http。

secure:如果是SSL连接的话,设置为true,当调用request.getScheme()时,返回该值。默认值为false。

URIEncoding:URI字节的解码字符编码,默认为iso-8859-1

useBodyEncodingForURI:表明如果contentType指定的编码用于URI查询参数,则不用URIEncoding。与Tomcat4.1.x兼容。默认为false

 

 
posted @ 2011-11-06 23:32  highriver  阅读(986)  评论(0编辑  收藏  举报