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)
(12) Security considerations: delete all comments and grant limited priviledge to files and xmls
7. Tomcat 容器层级
(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中
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.