Tomcat Wiki笔记

#######################################

Tomcat wiki学习

#######################################

1. 标准目录格局

(1) *.html, *.jsp, *.js, *.css,etc 存放在根目录下,或者做根的子目录

(2) /WEB-INF/web.xml :描述webApp的servlets和其他component, 也描述init-parameters, 以及container的security limitation

(3) /WEB-INF/classes/:存放java class(and associate resource).none-servlet and servlet classes. package(com.cisco.package.servlet) 需要reflect-> /WEB/INF/classes/com/cisco/packace/servlet.class

(4)/WEB-INF/lib/: 包含Java class(and associate resource)的JAR, 例如JDBC drivers/第三方类库

注意:安装在tomcat的一个web app的/WEB-INF/classes和/WEB-INF/lib对于容器内所有app都是visible

 

2. 共享文件库

(1) $CATALINA_HOME/lib中的jar文件visible to both webapps and internal tomcat code. 如:JDBC Driver(JDBCRealm)

(2) 默认预装了Servlet3.0和JSP 2.2APIs(servlets/Jsp)

 

3. Webapp部署描述符

(1) webapp所需的都定义在WEB-INF/web.xml中。而context path由admin在部属时定义

(2) 描述符都在DTD头中,不能省略

 

4. Tomcat Context描述符

(1)/META-INF/context.xml定义 tomcat特配置,如access log,data sources,session manager configuration..

(2) 必须包含一个Context 元素,作为这个host元素的child, 负责corresponding to Host(to which webapp being deployed)

 

5. 部署在tomcat

webapps 需要在servlet container中运行。 有几种在tomcat中部署的方式

(1) Copy unpacked directory hierachy into a subdirectory in directory $CATALINA_BASE/webapps/.

Tomcat 将assign 你的文件夹名作为context path. 我们将在我们创建的build.xml文件中使用这个技术。

(2) Copy the webapp archive file(WAR) to $CATALINA_BASE/webapps/. tomcat启动时,会解压包。 重新部署,需要同时删除expand文件夹和压缩包

(3) use Tomcat Manager Web application to deploy and undeploy web application 【/manager】

(4) use Manager Ant Tasks in your Build Script

(5) use Tomcat Deployer?

注意:使用其他servlet container 也是一样的,需要兼容Servlet API Specification(2.2+). Required accept archive file

 

6. Tomcat 类加载机制

(1) Java的class loaders 安排在parent-child tree上,先委派给parent class loader,parent class loder can't find requested class/resource. 再在自己的仓库中搜寻

(2) Tomcat的class loadering类似遵循parent-child relationship。Relation tree is:

BootStrap

|

System

|

Common

/ \

Webapp1 Webapp2

(3) 详解:

【Bootstrap】Contains: [basic rumtime classes<provided by JVM>] [any classes from JAR files<System Extensions directory($JAVA_HOME/jre/lib/ext)>]

【System】<both tomcat 内部类和webpps都是visible>normally initialized from CLASSPATH environment variable. 但$CATALINA_HOME/bin/catalina.sh会忽略上述参数。相反的会从以下仓库构建System class loader:

[$CATALINA_HOME/bin/bootstrap.jar<main() to initialize tomcat server, and class loaders it depends on>]

[$CATALINA_BASE|_HOME/bin/tomcat-jui.jar] Logging implementation classes

[$CATALINA_HOME/bin/commones-daemon.jar]

【Common】<both tomcat 内部类和webpps都是visible>

该classloader定义在$CATALINA_BASE/conf/catalina.properties中用[common.loader]定义,默认会查找一下位置:

unpacked classes and resources 在$CATALINA_BASE/lib 以及 $CATALINA_HOME/lib

JAR 在 $CATALINA_BASE/lib以及$CATALINA_HOME/lib

默认情况下包含:

  • annotations-api.jar — JavaEE annotations classes.
  • catalina.jar — Implementation of the Catalina servlet container portion of Tomcat.
  • catalina-ant.jar — Tomcat Catalina Ant tasks.
  • catalina-ha.jar — High availability package.
  • catalina-storeconfig.jar — Generation of XML configuration files from current state
  • catalina-tribes.jar — Group communication package.
  • ecj-*.jar — Eclipse JDT Java compiler.
  • el-api.jar — EL 3.0 API.
  • jasper.jar — Tomcat Jasper JSP Compiler and Runtime.
  • jasper-el.jar — Tomcat Jasper EL implementation.
  • jsp-api.jar — JSP 2.3 API.
  • servlet-api.jar — Servlet 3.1 API.
  • tomcat-api.jar — Several interfaces defined by Tomcat.
  • tomcat-coyote.jar — Tomcat connectors and utility classes.
  • tomcat-dbcp.jar — Database connection pool implementation based on package-renamed copy of Apache Commons Pool 2 and Apache Commons DBCP 2.
  • tomcat-i18n-**.jar — Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed.
  • tomcat-jdbc.jar — An alternative database connection pool implementation, known as Tomcat JDBC pool. See documentation for more details.
  • tomcat-util.jar — Common classes used by various components of Apache Tomcat.
  • tomcat-websocket.jar — WebSocket 1.1 implementation
  • websocket-api.jar — WebSocket 1.1 API

【WebappX】用于每个单独部署在单一tomcat实例的类加载。 unpack classess和resources在/WEB-INF/classes中, JAR在/WEB-INF/lib中。仅对该web app可见

(4) 顺序

默认条件下的类加载顺序是:

Bootstrap classes of your JVM -> /WEB-INF/classes of your webapp -> /WEB-INF/lib/*.jar of your webapp -> System class loader classes -> Common class loader classes

如果change the configure to <loader delegate="true">,顺序变为(JVM默认加载机制):

Bootstrap classes of your JVM -> System class loader classes -> Common class lorder classes -> WEB-INF/classes of you webapp -> WEB-INF/lib/*.jar of your web app

(5) Advanced Configuration

可以增加class loader的层级关系 server 和share, 配置后的 parent-child tree如下:

Bootstrap

|

System

|

Common

/ \

Server Shared

/ \

webapp1 webapp2

【Server】仅对tomcat internal class 可见

【shared】对所有web app实例均可见,共享位置

 

6. Tomcat Advanced knowledge

(1) SSI(Server Side Include)

(2) CGI(Common Gateway Interface)

(3) HTTPS-> config connector + enabledSSL

(4) Apache proxy VS ngnix反向代理

【Apache】主要三种处理模块, 拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。

mpm_prefork: fork出子进程,每个子进程单线程,处理一个连接请求,处理速度慢

- 子进程--单线程--> 用户请求

mpm_prefork - 子进程--单线程--> 用户请求

- 子进程--单线程--> 用户请求

mpm_worker: fork出的子进程都是多线程处理连接请求

--多线程--> 用户请求

mpm_worker-- 子进程 --

--

mpm_event: 可以处理长长连接(keep-alive),需要linux服务器支持epoll

-- 多线程-- 管理分配-- 用户请求

mpm_event -- 子进程-- 多线程-- 管理分配-- 用户请求

-- 多线程-- 管理分配-- 用户请求

跟tomcat负载均衡主要有三种方式:JK, Http_proxy, ajp_proxy

【ngnix】异步非阻塞线程模型: to be continue轻量级,占用资源少,负载均衡,高并发处理强,静态内容处理高效。

(5) MBean/ JMX

(6) Default Servlet:

I. serves static resources & directory list

II. declared in $CATALINA_BASE/conf/web.xml

III. initParameters: see reference

IV. secure: use web.xml in each individual webapp

(7) Cluster, load balance, connectors, APR(默认tomcat使用nio,其他还有bio,apr)

(8) Monitoring and Managing: Enabling JMX Remote

(9) Logging in Tomcat:

I. access log

||. Globally: ${catalina.base}/conf/logging.properties

|||. In Web App. path is in /WEB-INF/classes/logging.properties

(10) Virtual hosting with tomcat

(11) Send file (Async)

Tomcat Wiki笔记

(12) Security considerations: delete all comments and grant limited priviledge to files and xmls

 

7. Tomcat 容器层级

Tomcat Wiki笔记

(1) Server

(2) Service: n+ Connectors + 1 Engine的组合

(3) Engine: 特定service所有处理任务处:可包含n+ Host

I. 可配置Access logs, lifecycle Listeners, request filters

(4) Host: 一个Engine可能有多个hostname,一个Engine必须有个default Engine。内部有n+个context

(5) Context: 代表Web app,运行在特定的virtual host中

Tomcat Wiki笔记

Config Context path:

/META-INF/context.xml inside the application 

$CATALINA_BASE/conf/[enginename]/[hostname]/ 

inside a Host element in the main conf/server.xml

  • In the $CATALINA_BASE/conf/context.xml file: the Context element information will be loaded by all web applications.
  • In the$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.defaultfile: the Context element information will be loaded by all web applications of that host.