Tomcat7中文文档

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

Tomcat7中文文档

 

注:本文根据tomcat官网(tomcat.apache.org)tomcat7.0官方文档整理。

 

在开始学习之前,下载和安装 tomcat是必要的。(下载和安装tomcat之后的所有文档按照tomcat官网文档顺序)

(注:Tomcat7需要java6及以上版本,请先安装java sdk。http://www.oracle.com/technetwork/java/javase/downloads/index.html.安装好后设置系统变量 JAVA_HOME)

下载页面:http:// tomcat.apache.org  选7.0版的

以下是下载安装说明:

下载zip (pgp, md5) ,直接解压就可以了,无需安装。(启动tomcat:双击bin目录下的startup.bat文件。如果启动一闪而过,说明tomcat发现系统没安装Java或未正确设置JAVA_HOME系统变量。建议再下载一个tomcat增强的ARP。ARP这是一种让服务器更稳定,效率更高的增强的服务器技术。默认安装没有windows动态链接库tcnative-1.dll。所以tomcat启动时会提示没有找到ARP。下载存放到system32目录下即可。下载地址如下:http://labs.renren.com/apache-mirror/tomcat/tomcat-connectors/native/1.1.20/binaries/win32/)

双击“startup.bat”(注意不是startup.sh,startup.sh是UNIX系统用的)启动tomcat显示的信息就很“干净”了。

(启动显示的首页在tomcat主目录的webapps/ROOT里,ROOT是默认的Context(上下文)。)。关闭tomcat双击“shutdown.bat”。

 

Full docaumentation 是tomcat7说明文档(和官网一样的)

Deployer:  部署应用程序的工具

Extras::  其他一些附加类库文件。

 

以下根据官网文档结构翻译成中文

Docs Home :文档主页

  • 1) Introduction  tomcat总体简要介绍
  • 2) Setup 介绍如何安装tomcat
  • 3) First webapp  第一个应用程序。介绍了Servlet 规范中web应用程序(web application)的概念,web application 的组织,文档机构,部署描述文件 (/WEB-INF/web.xml). 等
  • 4) Deployer  介绍了如何部署web application,预编译,和验证web application。
  • 5) Manager 利用Manager应用程序管理web application部署,以及在tomcat运行时重新部署
  • 6) Realms and AAA  介绍Realms(域)的概念,以及怎么配置权限管理。
  • 7) Security Manager 介绍怎么配置和使用Security Manager(安全管理器)
  • 8) JNDI Resources 介绍JNDI概念及如何定义
  • 9) JDBC DataSources 介绍了如何配置一个JNDI的JDBC数据源,以及一些流行数据库的配置方法。
  • 10) Classloading  介绍了如何加载类,以及怎样放置你的类。
  • 11) JSPs 介绍了Jasper的配置,JSP编译用法
  • 12) SSL  安装配置SSL(安全套接层),使用https协议。
  • 13) SSI  (服务器端包含)在tomcat中使用SSI(一种在HTML文件嵌入一些SSI指令,在网页加载时服务器端再解析这些指令的方法)
  • 14) CGI  通用网关接口。介绍tomcat如何配置CGI。
  • 15) Proxy Support  介绍有关代理的内容
  • 16) MBean Descriptor  介绍有关MBean内容。
  • 17) Default Servlet 默认的Servlet
  • 18) Clustering (集群:是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。
  • 19) Load Balancer  负载均衡
  • 20) Connectors 连接模块,支持集群和负载均衡
  • 21) Monitoring and Management  监视管理tomcat
  • 22) Logging  有关日志的内容
  • 23) APR/Native  tomcat一种实现更好性能,可扩张伸缩、更好集成的服务器技术
  • 24) Virtual Hosting 虚拟主机
  • 25) Advanced IO
  • 26) Additional Components 附加组件
  • 27) Mavenized tomcat中如何利用Maven.
  • 28) Security Considerations 安全化方面的注意事项
  • 29) Windows Service  在Windows系统中将tomcat作为一种后台服务运行
  • 30) Windows Authentication 如何整合Windows系统的身份验证
  • 31) Tomcat's JDBC Pool tomcat的数据库连接池技术,比common_dbcp更优的选择。

 

  • FAQ   常见问题,里面有一些有用的编程经验。包括中文乱码处理,数据库连接等。

 

 

 

1) Introduction 简单的一些介绍

  • Terminology 术语:

Context(一般叫上下文) :简单的说: a Context is a web application.。一个Context就是一个web应用程序。

  • Directories and Files 目录和文件 

文中$CATALINA_HOME 代表你安装tomcat的目录。如果tomcat有多个实例就用$CATALINA_BASE 区分。如果只有一个实例,$CATALINA_HOME 和$CATALINA_BASE的意义是一样的。

  • Tomcat的目录及包含内容

/bin   包含启动、关闭tomcat和其他一些脚本。.sh文件是UNIX系统用的,.bat是window系统用的,但功能是相同的。因为WIN32系统缺乏某些功能,因此在该目录下还包含一些辅助文件。

/conf 包含一些配置文件和DTD文件,最重要的文件是server.xml,它是tomcat的主配置文件。

/logs  日志目录,存放日志文件。

/webapps  应用目录,你自己的web应用程序就放在这里。

(其实还包括 /lib(tomcat核心类库)   /work(JVM临时文件目录[java.io.tmpdir]))

  • CConfiguring Tomcat   配置tomcat

所有的配置文件在启动的时候会被读取,如果有配置文件有变动必须重启tomcat,以反映新的配置。

  • CWhere to Go for Help 从哪里获得帮助

 

  • 2) Setup (安装)

Windows环境的安装

Installation as a service 。选择此项,window系统将作为一个windows服务(service)来安装。如果安装过程中选中auto,则在window启动时将自动启动。出于安全考虑,建议为该服务建立一个单独的window账户,减少不必要的一些权限。

Java location: tomcat需要java环境。安装时,Tomcat会去读取window注册表或window的JAVA_HOME系统变量。

Tray icon:  window右下角的托盘图标。如果作为tomcat作为serverice来运行,将不会出现托盘图标(但刚安装好后,选择立即启动时,会显示)。

安装程序将创建快捷方式来启动或配置tomcat,但要启动administration web application (用来管理tomcat配置的应用程序),必须先启动tomcat。

 

 

  • 3) First webapp 通过一个web应用,熟悉tomcat的基本结构
  • Installation

  介绍了tomcat的安装以及一些工具的安装(Ant:一个类似make的工具,用来编译/运行/测试java程序,强烈推荐了解Ant,因为后面很多地方用到它。Ant介绍可见百度http://wenku.baidu.com/view/f21a8deb172ded630b1cb6d8.html.   CVS:编程时的源代码控制工具,Concurrent Version System,方便维护源代码文档,适合多人开发时维护文档,有服务器端和客户端。百度介绍的很清楚:http://baike.baidu.com/view/20982.htm)

  • Deployment

Background 背景

部署web应用到一个特定服务器时,将需要分配一个Context(比如/catalog),这样你就可以通过/catalog/index.html来访问你的网页了。

Standard Directory Layout  一个web应用的标准目录结构

*.html, *.jsp, etc. 放置 HTML and JSP 网页以及css样式、图片等资料,大的项目可以再建立子目录。

/WEB-INF/web.xml web应用的部署文件,是个XML文件。在这个文件你可以你可以定义servlet和一些组件,还能够初始化参数,以及安全上的一些限制设置。

/WEB-INF/classes/ 在这个目录,放置java类文件,这些类文件是没有打包(JAR包)的类文件(servlet或非servlet类文件),放在这里的类必须和你的package目录结构一致。如类com.mycompany.mypackage.MyServlet ,目录就像下面/WEB-INF/classes/com/mycompany/mypackage/MyServlet.class

/WEB-INF/lib/  在这个目录,放置java类文件(用JAR形式),比如第三方的类库和数据库连接用的JDBC驱动类库。

当你将一个应用程序安装到tomcat,WEB-INF/classes/ 和WEB-INF/lib/的类文件对于你特定的web应用程序里的其他类是可见的。 如果你将你所需要的所有类库放在这些位置,这将简化你的web应用程序的安装过程,而不必调整系统的类路径。(否则系统的类路径需要修改,不然import的类会找不到)

上述这些其实是Servlet API Specification, version 2.3章中的内容。

Shared Library Files 共享文件库放在$CATALINA_HOME/lib目录中,共所有web 应用程序共享。JAR文件放在这里对web应用程序和tomcat内部代码都是可见的。web应用程序或tomcat用到的JDBC drivers放在这里是比较合理的。

tomcat预安装的共享类库包括Servlet 3.0 and JSP 2.1 APIs 和XML Parser APIs(一个XML解析器,符合JAXP(Java  API  for  XML  Parsing:用于分析XML的API)),这样你就可以在你的应用程序中用基于DOM-based 或 SAX-based方式处理XML文件。(DOM文档对象模型,SAX The Simple API for XML,一个循序存取XML的API)

Web Application Deployment Descriptor    web 应用部署描述

/WEB-INF/web.xml是部署描述文件。定义应用程序中服务器需要知道的一切东西(Context除外,它是部署的时候由管理员分配的)。

原文提供了一个web文件例子见:basic web.xml file,里面有每个元素的含义解释。Servlet包含了web.xml文件的DTD (文档类型描述),因此你的web.xml必须按照DTD的顺序声明。

Tomcat Context Descriptor       tomcat Context描述文件

/META-INF/context.xml用来定义tomcat特有的一些配置选项,如日志,数据源,session管理等,该文件必须包含一个元素。

This XML file must contain one Context element, which will be considered as if it was the child of the Host element corresponding to the Host to which the The Tomcat configuration documentation contains information on the Context element.(英文看不懂)

Deployment With Tomcat  部署

$CATALINA_BASE 代表应用的基目录,相关的目录以它为根。如果你没有配置运行tomcat的多个实例     ,$CATALINA_BASE将被设置为$CATALINA_HOME。

要配置tomcat的多个实例,见百度。可以放在两个不同目录的tomcat软件,修改其中一个的端口即可,但不方便升级tomcat,因为两个tomcat软件都要升级。较好的做法是在同一个tomcat软件上运行多个实例,新建一个和tomcat目录一样的目录(比如在tomcat安装目录下新建一个web目录),但web目录只包括以下子目录(conf,logs,shared,webapps,work,temp),不包括bin、 lib目录。在/conf/server.xml中新建一个service元素,定义第二个实例,修改端口。然后在这个目录下写一个新的startup.bat文件(在bat文件中设置$CATALINA_BASE),用以启动tomcat。这样就可以启动另外一个tomcat实例了。

web应用要可执行,必须部署到servlet容器中(tomcat),即使是在开发期间。

几种部署的方法。

  • Copy unpacked directory hierarchy into a subdirectory in directory  直接拷贝未打包的程序目录到$CATALINA_BASE/webapps/ ,tomcat将分配一个Context PATH给你(根据你的应用的子目录名),在开发期间,这是最快最容易的方法。安装和更新web应用后必须重启tomcat。   
  • Copy the web application archive file into directory $CATALINA_BASE/webapps/.拷贝打包的web应用程序(war包)到$CATALINA_BASE/webapps/。如果拷贝时tomcat已经启动了,tomcat将自动解包,并且可执行。这种方式比较适合于从第三方来的打包的应用。注意:用这种方法部署,如果你想更新你的web应用,你必须删除tomcat自动解包的目录,并且将新的包覆盖原来的包。然后重启tomcat,反映你的变化。
  • Use the Tomcat "Manager" web application to deploy and undeploy web applications.利用Tomcat "Manager" web application部署。tomcat默认有一个Manager的web应用程序,这个应用程序的Context PATH是/manager.允许你在一个运行tomcat的服务器上部署或卸载应用程序,而不需要重启。
  • Use "Manager" Ant Tasks In Your Build Script. 利用在Ant的部署文件中的“Manager”任务(task)。tomcat包含一组自定义的Ant任务,这些任务被用于tomcat的部署。
  • Use the Tomcat Deployer. tomcat包含一个绑定到ant  tasks的打包工具,可以在部署到服务器之前自动对JSPs(也是web应用程序的其中一部分)预编译。

Directory Structure 目录结构

将源代码目录与原来tomcat部署的目录独立分开是一种很好的做法。它有很多优点,代码更容易管理、控制,部署更方便。你可以根据你喜欢的方式建立目录,下面是一种比较流行的目录结构:

docs/  存放应用程序文档。

src/ 存放你的web应用程序特有的servlets, beans, and other Java classes源文件,如果有package,要注意目录与包名的一致。

web/ 存放一些静态内容,如HTML pages, JSP pages, JavaScript files, CSS stylesheet files, and images。这个目录成了你的web应用的根目录,

web/WEB-INF/ 这个目录包括:web.xml ,自定义的tag 库,已经其他你想放置的资源,虽然这个目录是根目录的子目录,但Servlet的规范不允许客户端直接访问该目录,因此这里是放置一些比较敏感且必要的信息的好地方,比如数据库的用户名和密码。

在开发期间,有两个目录是临时建立的。

build/  当你执行Ant的一个默认build,这个目录将包含你的web应用程序包里文件的镜像。

dist/ 当你执行一个Anttarget目标时,这个目录将被建立,它将创建一个二进制的发行版本,包括你预先准备好的文档,版权等信息。

注意,不要在这两个目录编辑你的源文件,因为它们会被删除和重建。

  • Source Code
  • Source Code
  • Source Code
  • Source Code

External Dependencies 外部的依赖

如何利用一些外部的依赖类库,不同的程序员有不同的方法,有的是拷贝一份外部依赖类库到每个应用程序的源代码控制文档。这会面临重大问题,特别是你要升级时,每个应用程序里你都要升级。

强烈推荐不要采取上面的做法,取而代之的,应该是将外部的依赖类库作为building应用程序的过程的一个部分,在Ant中设置build.xml 文件里的build properties来配置要拷贝的文件目录,而不要担心外部类库升级问题。例子中的build.xml通过定义build properties,在类库修改时也不需要修改build.xml文件。

很多时候,系统管理员已经将这些类库放在了lib目录里,你根本不需要做什么,例子中的build.xml将自动为你建立一个包含这些文件的编译路径。

Source Code Control 源代码控制

涉及到CVS使用的一些问题,不深究。

  • BUILD.XML Configuration File  Processes

  BUILD.XML配置文件

BUILD.XML 被放置在源代码的顶层目录。介绍了build中常见的target

  • Source Code
  • Deployment
  • Source Code

开发过程:建立Ant环境,建立源代码目录,编辑源代码和网页、构建web应用程序、测试应用程序、创建一个发布。

 

 

  • 4) Deployer  部署

两种方式部署:

一、静态安装:在tomcat启动之前就安装好

二、动态安装:通过Tomcat Manager web application 管理程序安装或手工部署

Tomcat Manager 是一个部署应用程序,还有一种叫Client Deployer(客户端部署),这是基于命令行脚本的工具。

Installation

其实部署不需要安装任何东西,但如果你要用Client Deployer部署,则需要安装。Tomcat提供了一个Client Deployer(TCD),这个TCD没有在tomcat的核心包内,你需要单独下载安装(需要Ant)

A word on Contexts

在谈论部署问题时,Context这个概念必须要理解。简单的说一个 Context 就是一个web应用程序。

为了在tomcat中配置Context,Context描述是必须的,这个描述放在一个XML文件里,这个文件里有一些与Context相关的配置,如命名资源,session等。在tomcat早起的版本中,Context描述也被放在tomcat的主配置文件Server.xml文件中,但是现在不推荐这样做(虽然这样它也可以正常工作)。

Context描述一般放在下面两个位置比较合理:

  1. $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml
  2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

第一个文件名是[webappname].xml  ;第二个文件名是context.xml。如果Context描述没有提供,tomcat将使用默认值配置这个Context。

官网接下去介绍了几种部署的方式。

这里重点讲一下Deploying on a running Tomcat server(在一个正在运行的tomcat服务器中部署)

假如Host 的autoDeploy属性是true,Host将会自动部署和更新web应用程序。拷贝WAR文件到web应用的根目录,web应用会自动展开的。假如web应用被更新了,tomcat会再部署,删除原来展开的目录,并重新展开新web应用WAR文件。注意如果unpackWARs属性是false,部署时就不会自动展开WAR文件。web.xml有变动也会重新部署,Context描述文件有变动或者添加到$CATALINA_BASE/conf/[enginename]/[hostname]/目录也会重新部署。

删除一个web应用的根目录就会卸载一个web应用

  • 5) Manager

 

  • 5) Manager(tomcat的一个管理用的web应用程序)

Introduction

在很多生产环境中,不必关闭和重启整个的容器而可以安装(或卸载或重载)一个的应用程序是很有用的。tomcat提供了一个专门管理用的web应用程序Manager.这个应用程序可以部署web应用、显示已经部署的应用、重载web应用、显式OS and JVM属性值、显示JNDI资源、停止或启动一个web应用、卸载一个应用。

tomcat默认安装有这个应用程序,manager.xml文件有这个应用的Context描述,如例子。       

         docBase="/usr/local/kinetic/tomcat7/server/webapps/manager">

有3种方式使用这个管理应用程序:

一是通过在浏览器中的使用管理界面;二是使用http形式的脚本,如http://{host}:{port}/manager/text/{command}?{parameters}

。脚本命令附加在http地址后面。三是通过ant的任务来操作。

Configuring Manager Application Access(配置访问权限)

访问这个应用需要一个manager-script角色的用户并配置用户名和密码。

MemoryRealm     tomcat默认将用户信息存放在$CATALINA_BASE/conf/tomcat-users.xml,如

有manager-script角色的用户才能登录这个应用。

JDBCRealm   如果你的用户信息存放在你自己的数据库中,只要赋予它manager-script角色就可以了。

JNDIRealm   如果你的用户信息存放在目录中(通过LDAP),只要赋予它manager-script角色就可以了。

你还可以通过配置限定登录的IP地址。

官网下面介绍了如何使用Manager,此处不详解了。

 

  • 6) Realms and AAA

Realm 域其实就是一个访问权限的概念,也就是定义某个用户可以访问哪些资源,如网页等。

Realm 定义在代表不同的作用范围。

Digested Passwords(摘要式密码)

这是tomcat为了防止密码明码传输不安全而开发新技术,用某种算法对密码进行摘要,服务器上也对该密码用这种算法进行摘要,再进行比对,若一致就允许登录。

对Manager应用程序来说,tomcat没有给任何人分配manager-gui角色,只有管理员添加了这个角色,这个用户才能登录。

官网介绍了几种域的配置,下面重点讲解JDBCRealm

JDBCRealm 需要一个用户表,存放用户名和密码;还需要一个用户角色权限表,存放用户名和角色。这是一个典型的定义:

      driverName="org.gjt.mm.mysql.Driver"

   connectionURL="jdbc:mysql://localhost/authority?user=dbuser&password=dbpass"

       userTable="users" userNameCol="user_name" userCredCol="user_pass"

   userRoleTable="user_roles" roleNameCol="role_name"/>

其他几种域的配置方式也是大同小异。此处不详解。

 

  • 7) Security Manager(安全性管理)

这章主要讲了tomcat在安全性上的管理。

JAVA的安全性管理可以在你用浏览器访问时阻止不信任的程序访问你的本地系统。Tomcat也可以使用安全管理性来保护你的服务器免受特洛伊网页侵害。

假如你授权他可以发布的人不小心将<% System.exit(1); %>这个指令放在JSP网页中,每次有人访问这个网页,tomcat就会退出。使用Java SecurityManager 就像多了一条防线,系统管理员可以使得tomcat更安全,更可靠。选择运行Java SecurityManager总比没有Java SecurityManager 明智。

Permissions

Permission类被用来定义:在一个类被tomcat加载的时候它有什么权限。

Standard Permissions 所列的是JAVA中的Standard Permissions类。

Tomcat Custom Permissions  

tomcat自定义的一个权限类:org.apache.naming.JndiPermission。用于控制访问JNDI 资源。

这是tomcat自动部署时,自动建立的权限。

permission java.io.FilePermission "** your application context**", "read";

 

permission java.io.FilePermission

  "** application working directory**", "read,write";

permission java.io.FilePermission

  "** application working directory**/-", "read,write,delete";

这个定义允许它去读自己的静态资源,但不允许它使用文件去读取另外的文件。

Configuring Tomcat With A SecurityManager

Tomcat的安全策略文件 $CATALINA_BASE/conf/catalina.policy

Window下你可以通过%CATALINA_HOME%\bin\catalina start -security      (Windows)这个指令启动带安全性管理的tomcat服务器。Configuring Package Protection in Tomcat

现在,你可以配置哪些tomcat的内部包是阻止被定义和访问的。

  • 8) JNDI Resources

Introduction

Tomcat为每一个web应用程序提供了一个InitialContext实例,Java EE 在/WEB-INF/web.xml 文件提供了一组标准的元素,用于引用或定义resource。

web.xml configuration

这些定义的资源,可以被定义于你当前的WEB应用的WEB应用布署描述(/WEB-INF/web.xml)文件中的以下节点使用:

l         :该值用来指定应用运行的环境入口(Environment entry),一个单值参数(a single-value parameter)可以用于配置应用程序如何操作。

l         :资源引用(Resource reference),典型的应用为JDBC DataSource、JavaMail Session,或者配置于Tomcat5中的自定义对象工厂。

l         :资源环境引用(Resource environment reference),增加于Servlet 2.4中的resource-ref校验,这种可以简化资源配置,不需要授权信息。

 

假如tomcat能够识别出使用一个合适的资源工厂创建资源,而不需要更进一步的配置信息,那么tomcat就用/WEB-INF/web.xml中的信息创建资源。

context.xml configuration

假如tomcat不能识别出一个合适的资源工厂去创建资源,或者需要额外的信息,那么tomcat还需要提供特殊的一些配置。Tomcat特殊的配置被放在 元素中,这个元素可以放在$CATALINA_BASE/conf/server.xml 中,也可以放在每个web应用程序的META-INF/context.xml文件中。

 :相当于

 :相当于

 :资源连接,可以指向 元素中定义的  

:为在java:comp/UserTransaction中有效的初使化UserTransaction对象实例增加资源工厂。

假如一个资源被定义在 中就没必要再在/WEB-INF/web.xml定义。然而,推荐保持入口放在/WEB-INF/web.xml。

同一个资源名称同时被定义在/WEB-INF/web.xml中的中的,只要 允许(通过设置override属性为true),/WEB-INF/web.xml中的定义值优先。

Global configuration

Tomcatglobal resources (全局资源)提供了一个单独的命名空间。global resources在$CATALINA_BASE/conf/server.xml中的 被定义。你可以使用这些资源(通过)。

假如一个资源被定义在 就没必要再在/WEB-INF/web.xml定义。然而,推荐放在/WEB-INF/web.xml。

Using resources

InitialContext在一个web应用程序最开始的部署时被配置,它被当作一个可用的组件(只读的)。所有被配置的实体和资源都放在java:comp/env名字空间里。

// Obtain our environment naming context

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

 

// Look up our data source

DataSource ds = (DataSource)

  envCtx.lookup("jdbc/EmployeeDB");

 

// Allocate and use a connection from the pool

Connection conn = ds.getConnection();

... use this connection to access the database ...

conn.close();

Tomcat Standard Resource Factories

Tomcat提供了一系列的标准资源工厂,同时又给你弹性灵活的配置(通过)而不必修改web应用程序或部署描述符文件。      

注意:在标准资源工厂中,只有"JDBC Data Source""User Transaction"工厂可以移植到其它非TOMCAT平台,其它的标准资源工厂,包括你编写的自定义资源工厂,都只可以在TOMCAT下运行,不可以移植到其它的平台。

官网以下介绍了Generic JavaBean ResourcesUserDatabase ResourcesJavaMail SessionsJDBC Data Sources等的配置和使用方法。

 

  • 9) JDBC DataSources

Introduction

JNDI Datasource配置已经在JNDI-Resources-HOWTO中大篇幅的讲到,但从客户反馈的信息看,设置一些个别的细节配置还是很棘手。官网中提醒:下面的例子可能在tomcat7中要对JNDI resource 稍作修改才能用。这个指导文档假设你已经熟知Context and Host 和后面关于自动部署的知识。

Database Connection Pool (DBCP) Configurations

DBCP支持JDBC 2.0.。在运行JVM1.4的系统支持JDBC 3.0.

  • DBCP使用Commons Database Connection Pool,需要以下组件:
  • Commons DBCP
  • Commons Pool

这些类库被包含在$CATALINA_HOME/lib/tomcat-dbcp.jar中,只有connection pooling 需要的类被包含在里面,包名也更换了,以免混淆。

Preventing dB connection pool leaks(防止连接池泄漏)

数据库连接池别用来创建和管理数据库的连接。回收和重用已经存在的连接比新建一个连接的效率更高。

然而,这里有个问题。一个web应用程序应该能够正常的关闭ResultSet's, Statement's, and Connection's。而不能正常关闭这些资源将导致不能被重用,数据库连接池“泄漏”了。这最终将导致web应用程序中无连接可用。

为了配置一个DBCP DataSource,被遗弃的数据库连接被移除回收。

当可用连接不够时,DBCP 将还原和循环利用被遗弃的连接。

官网接着是各种数据库的连接例子。

Common Problems(通常碰到的问题)

关闭连接时要注意,代码如果不注意有可能关闭两次,导致错误。见例子。

 

  • 10) Classloading

介绍了tomcat类的加载机制和原理。

Tomcat类加载的层次:Bootstrap(引导系统)  System  Common   WebappX

加载顺序:

  • Bootstrap classes of your JVM
  • System class loader classes (described above)
  • /WEB-INF/classes of your web application
  • /WEB-INF/lib/*.jar of your web application
  • $CATALINA_HOME/lib
  • $CATALINA_HOME/lib/*.jar

XML Parsers and JSE 5

Jse5众多的变化中,JSE 5JRE中包含了JAXP APIs和Xerces,这对使用自己的XML parser.是有影响的。

tomcat前面的版本中你可以在$CATALINA_HOME/common/lib简单的替换XML parser。但是,在JSE5中,这样将不起作用。因为通常的类加载器派遣进程将总是选择JDK中指定的。

Tomcat通过Endorsed Standards Override Mechanism 机制可以使用自己的XML parser. -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS

 

  • 11) JSPs

Introduction

Tomcat 7.0使用Jasper 2 Engine来实现JavaServer Pages 2.1(JSP 2.1规范)

Jasper 2被重新设计了。相比原版本提升了性能。

Configuration

默认,Jasper在开发web应用程序的时候被配置。

Jasper的servlet初始化参数在$CATALINA_BASE/conf/web.xml定义。

Known issues(目前已知存在的问题BUG

在编译大的JSP文件时,有可能会出现java.lang.InternalError: name is too long to represent异常,你可以缩小JSP文件,也可以禁用SMAP,通过JSR-045支持的suppressSmap(true)属性。

Production Configuration

JSP主要的优化就是预编译JSP,然而有时是不可能的或不实际的,在这种情况,配置Jasper servlet就很关键了。

当你在生产机上使用Jasper 2时,你应该考虑作些改变。

Web Application Compilation

development (设置为开发模式)

Web Application Compilation

对于用JSPC(Apusic提供了jspc工具对JSP文件进行预编译,它的工作原理是首先对JSP源文件进行解析生成java文件,然后使用标准的Java编译器编译。)来编译web applications,用Ant是首选的方法。JSR-45 是这样规定的:JSP 被编译成 JAVA 代码时,同时生成一份 JSP 文件名和行号与 JAVA 行号之间的对应表(SMAP)。

Hints:

当你更换tomcat版本时,重新编译你的JSP文件。在server runtime让PageContext pooling不可用。限制缓冲buffering。

  • 12) SSL
  • 12) SSL
  • 12) SSL
  • 12) SSL
  • 12) SSL(讲解如何配置安全套接层,实现加密传输)
  • 13) SSI
  • 12) 12) 12) 12) 12) 12) 12) 13) SSI

 

  • 13) SSI13) SSI
  •  
  • 13) SSI
  • 14) CGI

SSI是嵌入HTML里的一些指令,在这些网页被请求的时候,由服务器端求值。它们允许你在HTML里增加动态生成的内容,而不必使用CGI程序,或其他技术。

SSI可以作为ServletFilter的支持,你只能选择其一,不能两者同时用。

org.apache.catalina.ssi.SSIServlet ,匹配的URL是*.shtml。

org.apache.catalina.ssi.SSIFilter,匹配的URL是*.shtml。

tomcat默认不支持SSI。

Installation

为了使用SSI Servlet或Filter,你只需去掉$CATALINA_BASE/conf/web.xml.中这些元素周围的注释标记即可。

Servlet Configuration 配置SSI Servlet 参数

Filter Configuration配置SSI Filter 参数

Directives

SSI用HTML的注释的形式出现。这些指令在发送网页给客户端浏览器前被解释。

  • config - Used to set the format of dates and other items processed by SSI
  • echo - will be replaced by the value of the variable.
  • exec - Used to run commands on the host system.
  • include - inserts the contents
  • flastmod - Returns the time that a file was lost modified.
  • fsize - Returns the size of a file.
  • printenv - Returns the list of all the defined variables.
  • set - is used to assign a value to a user-defind variable.
  • if elif endif else - Used to create conditional sections. For example:

    Meeting at 10:00 on Mondays



    Turn in your time card



    Yoga class at noon.


 

  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI
  • 14) CGI

 

  • 14) CGI

CGI(Common Gateway Interface 通用网关接口)为一个web服务器定义了一种和外部程序(能够生成内容)交互的方式。通常是指CGI 程序 or  CGI 脚本。

Tomcat's CGI多数兼容Apache httpd's,但有一些限制(比如只有一个cgi-bin目录)。

org.apache.catalina.servlets.CGIServlet.  URL :"/cgi-bin/*".

tomcat默认不支持CGI.

Installation

要使用CGI,只需在$CATALINA_BASE/conf/web.xml.去掉相应的注释符(默认被注释掉了)。

Configuration

  • 15) Proxy Support
  • 15) Proxy Support
  • 15)Proxy Support(下面的翻译来自网络)。

介绍 
使用标准的Tomcat配置,web程序可以询问处理请求的服务器的名字和端口。当Tomcat使用 Coyote HTTP/1.1 Connector独立运行的时候,它能够报告包含在请求中的服务器名称和连接器监听的端口号。我们感兴趣的用于这个目的的API如下: 

ServletRequest.getServerName(): 返回请求发送的服务器名称。 
ServletRequest.getServerPort(): 返回请求发送的服务器端口。 
ServletRequest.getLocalName(): 返回请求接收的IP接口的主机名。 
ServletRequest.getLocalPort(): 返回请求接收的IP接口的端口号。 

如果运行在一个代理服务器后,你也想通过这些函数取得这些值。特别,你想知道原始请求的端口,而不是连接器正在监听的端口。你可以使用中的proxyName和proxyPort属性来配置这些值。 
代理可以采用多种方式,下面将说明在几个通用情况下的代理配置。 

Apache 1.3 代理支持 

Apache 1.3 支持一个可选模块 (mod_proxy) ,可以把web服务器配置成代理服务器。这个可以用来传送一个特定应用程序的request到一个tomcat 6实例,没必要配置一个web连接器,例如mod_jk。为了实现这个目的,你需要执行下面的一些步骤: 

1. 配置你的Apache包含mod_proxy模块. 如果你正在通过源代码建构apache,最好是在./configure命令行包含 --enable-module=proxy 指令. 
2. 如果httpd.conf中还没添加,加入如下指令,确保Apache启动时加载mod_proxy模块。

  1. LoadModule proxy_module   {path-to-modules}/mod_proxy.so  
  2. ddModule   mod_proxy.c      

LoadModule proxy_module {path-to-modules}/mod_proxy.so AddModule mod_proxy.c 
3. 为你的Tomcat的web应用程序包含类似下面的两条指令到httpd.conf文件中。例如你的程序的上下文路径是/myapp:

  1. ProxyPass       /myapp   http://localhost:8081/myapp  
  2. ProxyPassReverse   /myapp   http://localhost:8081/myapp

ProxyPass /myapp http://localhost:8081/myapp ProxyPassReverse /myapp http://localhost:8081/myapp 
这个告诉Apache传送http://localhost/myapp/*形式的URLs 到Tomcat连接器监听的端口8081. 
4. 给你的Tomcat添加一个特定的适当代理的连接器, 例如:

  1.         proxyName="www.mycompany.com"  
  2.     proxyPort="80"/>  

这个使web程序中的servlets把所有的代理请求发送到www.mycompany.com的80端口。 
5. 忽略中的proxyName 属性是可以的. 如果你这样做了, request.getServerName()返回值将是运行Tomcat的主机名. 在这个例子中, 是localhost. 
6. 如果你也有一个监听8080的连接器, 到那个端口的请求都共享相同的虚拟主机名和web程序。 
7. 你可能希望使用IP过滤功能让操作系统限制到8081的连接仅能来自Apache。 
8. 另外, 你可以设置一系列应用程序仅能通过代理访问, 如下: 
*配置另一个 仅包含一个 ,设置了代理端口. 
*为虚拟主机和程序配置适当的Engine, Host, and Context元素. 
*可选地, 使用IP过滤保护8081端口. 
9. 当请求被Apache代理后,web服务器能够记录请求的存取日志。 因此,你通常应该禁止Tomcat中的存取日志。 
当请求以这种方式被代理,所有到符合配置的应用程序的请求将交给Tomcat处理,包括静态内容。你可以使用mod_jk来提升性能,而不是使用代理。mod_jk可以配置成web服务器处理静态内容,而又不能处理在web应用程序描述符中 (/WEB-INF/web.xml)被过滤和安全限制的内容。 

Apache 2.0 代理支持 

和Apache1.3相同的指令,除了在Apache2.0中你可以忽略 AddModule mod_proxy.c 指令。

 

  • 16) MBean Descriptor
  • 16) MBean Descriptor
  • 16) MBean Descriptor

JMX:Java Management extensions(JMX)是SUN公司提出的一套管理框架。它定义了完整的框架体系、设计模式、API接口、基于网络的管理和监控服务等,通过这些可以对你的Java程序进行管理控制。

JMX管理框架依赖于核心的管理服务器。所谓管理服务器类似于代理,我们通过它去管理所有的受控对象。这样我们能够作最小的改动就使程序变得可管理。你的Java应用程序甚至可以简单到只增加几个方法然后作为可管理的对象(MBean)注册到JMX管理服务器上。这样你就可以利用JMX管理框架提供的标准接口去管理你的Java应用程序(例如你的EJB一样可以被JMX管理)。

  • 17) Default Servlet

 

17) Default Servlet

默认Servlet是服务于静态资源和目录列表的。

18) Clustering(集群)

19) Load Balancer(负载均衡)

20) Connectors

AJP: AJP是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过TCP连接和SERVLET容器连接。为了减少进程生成socket的花费,WEB服务器和SERVLET容器之间尝试保持持久性的TCP连接,对多个请求/回复循环重用一个连接。一旦连接分配给一个特定的请求,在请求处理循环结束之前不会在分配。换句话说,在连接上,请求不是多元的。这个使连接两端的编码变得容易,虽然这导致在一时刻会有很多连接。

  • 21) Monitoring and Management

21) Monitoring and Management

  • 22) Logging

。。。

。。。

。。。

24) Virtual Hosting

虚拟主机,就是在一个服务器上,定义多个主机名,但在DNS上对应的是同一个IP,浏览器访问时只能输入主机名(如:www.baidu1.com,www.baidu2.com),而不能输入IP访问。www.baidu1.com和www.baidu2.com就能对应到同一个服务器上的两个独立的web应用程序了。

25) Advanced IO

26) Additional Components

27) Mavenized

28) Security Considerations

29) Windows Service

30) Windows Authentication

26) Additional Components

  • 31) Tomcat's JDBC Pool

Introduction

TomcatJDBC Poolorg.apache.tomcat.jdbc.pool)除DBCP外的另一种选择。

TomcatJDBC Pool有很多优点,12) 12) 如支持多线程,速度快等。

How to use

Tomcat connection pool已经做的尽可能简单了。对熟知commons-dbcp的人来说,转变很容易。

Additional features

initSQL validationInterval fairQueue

Inside the Apache Tomcat Container

工厂类:org.apache.tomcat.jdbc.pool.DataSourceFactory

Standalone

作为一个BEAN实例化。

JMX

Attributes

JNDI Factory and Type

Common Attributes(共同的属性,dbcp也有的)

Tomcat JDBC Enhanced Attributestomcat增强的属性)

Advanced usage(一些高级用法)

JDBC interceptors

 

Example:
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
相当于(会自动加前缀)
jdbcInterceptors="ConnectionState;StatementFinalizer"

还可以加属性。jdbcInterceptors="ConnectionState;StatementFinalizer(useEquals=true)"

 

Code Example(代码示例)

 

以下是tomcat  Configuration中一些Configuration

元素解释。

filter:

它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链).

一个filter 包括:

  1. 在servlet被调用之前截获;

  2. 在servlet被调用之前检查servlet request;

  3. 根据需要修改request头和request数据;

  4. 根据需要修改response头和response数据;

  5. 在servlet被调用之后截获.

  你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用.几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等.

  一个filter必须实现javax.servlet.

  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Source Code
  • Processes
  • Processes
  • Processes
  • Processes
  • Processes
  • Processes

转载于:https://my.oschina.net/coder1234/blog/1553084

你可能感兴趣的:(java,web.xml,数据库)