当前位置 : 首页 » 文章分类 :  开发  »  Apache-Tomcat

Apache-Tomcat

Tomcat笔记


概述

http://tomcat.apache.org/

下载版本选择

做JavaEE开发的朋友,无论是学习者还是已经工作的朋友,总是会用到Tomcat这个Servlet容器,那么大家从Tomcat官网上去下载tomcat的时候总会看到下载列表中有如下内容(下面以下载6.0.43版为例):
Binary Distributions

  • Core:
    • zip (pgp, md5)
    • tar.gz (pgp, md5)
    • 32-bit Windows zip (pgp, md5)
    • 64-bit Windows zip (pgp, md5)
    • 64-bit Itanium Windows zip (pgp, md5)
    • 32-bit/64-bit Windows Service Installer (pgp, md5)
  • Deployer:
    • zip (pgp, md5)
    • tar.gz (pgp, md5)

Source Code Distributions

  • tar.gz (pgp, md5)
  • zip (pgp, md5)

看到这里大家知道同一个版本的Tomcat有不同的下载版本,Binary Distributions和Source Code Distributions大家应该能分清楚,分别是二进制版本和源代码本。困惑在于Binary Distributions下面又有Core和Deployer两个,这两个有什么区别?我们到底应该选择哪个呢?
先说这两者的区别。
Core:是Tomcat正式的二进制发布版本,一般大家做开发或者学习的时候应该下载Core下的。具体的,在linux下用,下载zip或tar.gz版本;在windows下用,下载win 32或64 zip版,或Windows Service Installer版,zip为绿色版,免安装,解压后即用,Installer版是exe安装程序,需安装后使用。
Deployer:是基于Tomcat的web应用的发布器,就是在把写好的JavaEE应用发布到Tomcat的时候可以使用Deployer来动态的发布。所以它不是真正的Tomcat二进制版本,它只是一个用以发布基于Tomcat的Web应用的发布工具而已。因此,大家在下载的时候不应该下载这个东西,除非想动态的发布Web应用到Tomcat中去。


启动关闭tomcat

tomcat的启动

  • 在windows下可以通过两种方式启动:
    %CATALINA_HOME%\bin\startup.bat
    %CATALINA_HOME%\bin\catalina.bat start
  • 在linix系统下可以通过下面的方式启动:
    %CATALINA_HOME%\bin\startup.sh
    %CATALINA_HOME%\bin\catalina.sh start

启动后,通过http://localhost:8080可以访问tomcat本地首页。

tomcat的关闭
在windows下可以通过下面方式关闭:

  • %CATALINA_HOME%\bin\shutdown.bat
  • %CATALINA_HOME%\bin\catalina.bat stop
  • 直接关闭启动窗口
    -在linix下可以通过下面的方式关闭:
  • %CATALINA_HOME%\bin\shutdown.sh
  • %CATALINA_HOME%\bin\catalina.sh stop
  • 直接在终端中停止脚本

tomcat目录结构

  • bin:包含启动、关闭tomcat和其他一些脚本。.sh文件是UNIX系统用的,.bat是window系统用的,但功能是相同的。因为WIN32系统缺乏某些功能,因此在该目录下还包含一些辅助文件。
  • lib:tomcat核心类库,即依赖的jar包
  • conf:包含一些配置文件和DTD文件,最重要的文件是server.xml,它是tomcat的主配置文件。
  • logs:日志目录,存放日志文件。
  • webapps:应用目录,web应用部署在这里。
  • work:JVM临时文件目录[java.io.tmpdir]
  • temp:临时文件目录

tomcat配置

tomcat配置文件

conf目录中的配置文件:

  • server.xml:主配置文件;
  • context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp程序目录下的WEB-INF目录中,用于定义会话管理顺、JDBC等;conf/context.xml是为各webapp提供默认配置;
  • web.xml:每个webapp只有在“部署”之后才能够被访问;此文件则用于为各webapps定义默认的部署操作方式;
  • tomcat-users.xml:用户认证的账号和密码配置文件;
  • catalina.policy:当使用-security选项来启动tomcat实例时会读取此配置文件来实现基于安全策略的运行方式;
  • catalina.properties:Java属性的定义文件,用于设定类加载器路径等 ,以及一些与JVM性能相关的调优参数;
  • logging.properties:日志系统相关的配置;

Tomcat基础
http://www.cnblogs.com/carl10086/p/5998706.html

【Tomcat 6.0官方文档翻译】—— 简介
http://www.cnblogs.com/xing901022/p/4412469.html


server.xml

Server

<Server port="8005" shutdown="SHUTDOWN">
这会让Tomcat6启动一个server实例(即一个JVM),它监听在8005端口以接收SHUTDOWN命令。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行。

Server的相关属性:
className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer;
port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;

Service

<Service name="Catalina">
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求并将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。
这定义了一个名为Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当中。

Service相关的属性:
className: 用于实现service的类名,一般都是org.apache.catalina.core.StandardService。
name:此服务的名称,默认为Catalina;

Connector


部署

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的类会找不到)

tomcat共享库

共享文件库放在$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)

在tomcat中部署应用

$CATALINA_BASE 代表应用的基目录,相关的目录以它为根。如果你没有配置运行tomcat的多个实例,CATALINA_BASE将被设置为CATALINA_HOME。
几种在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应用程序的其中一部分)预编译。

Tomcat应用发布
那么Deployer既然是用来发布Web应用到Tomcat中去的,那么它都能做些什么呢?
这里有必要跟大家交代一下Tomcat中的Web应用发布的概念。
发布:指的是把一个Web应用安装到Tomcat服务器中的过程。
在Tomcat中发布Web应用可以有两种方式:

  1. 静态发布:指的是在Tomcat未启动的时候,把做好的Web应用直接复制到Tomcat服务器中。
  2. 动态发布:有两种情况
    1. 指的是在Tomcat已经启动运行的情况下,通过Tomcat的自动部署功能动态操作已经发布的Web应用.
    2. 指的是通过Tomcat Manager这个Web应用通过远程把做好的Web应用发布到正在运行的Tomcat中去。

Deployer的作用就在动态发布Web应用到Tomcat中去的时候体现出来的。
Deployer是一个命令行的工具,它可以编译、验证Web应用,还可以把Web应用的全部资源打包到War文件中。

将应用部署到Tomcat根目录

将应用部署到Tomcat根目录的目的是可以通过“http://[ip]:[port]”直接访问应用,而不是使用“http://[ip]:[port]/[appName]”上下文路径进行访问。
方法一:(最简单直接的方法)
删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。

方法二:修改conf/server.xml配置
删除原 webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    ......
    <Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>
</Host>

注意:

  • path 的值设置为空;
  • 应用不要放到tomcat的webapps目录下(如上述配置是放到自定义的文件夹myapps内的),否则访问时路径很有问题;
  • docBase指定到绝对路径。

如此设置后重启tomcat,如果docBase指向的是war文件,会自动将war解压到 webapps/ROOT 目录;如果docBase指向的是应用已解压好的目录,如 docBase=”C:/apache-tomcat-6.0.32/myapps/bc”,tomcat不会生成webapps/ROOT目录(这种情况下之前可以不用删除webapps/ROOT目录,但webapps/ROOT目录内的内容是无法访问的),访问时将直接使用docBase指定的目录。

方法三:增加conf/Catalina/localhost/ROOT.xml配置
与方法二类似,但不是修改全局配置文件“conf/server.xml”,而是在“conf/Catalina/localhost”目录下增加新的文件”ROOT.xml”(注意大小写哦),文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>

Tomcat Maven Plugin

tomcat-maven-plugin

在pom.xm 加入以下配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>tomcat-maven-plugin</artifactId>
    <version>1.1</version>
    <configuration>
        <path>/wp</path>
        <port>8080</port>
        <uriEncoding>UTF-8</uriEncoding>
        <url>http://localhost:8080/manager/html</url>
        <server>tomcat6</server>
    </configuration>
</plugin>

path 是访问应用的路径
port 是tomcat 的端口号
uriEncoding URL按UTF-8进行编码,这样就解决了中文参数乱码。
Server 指定tomcat名称。

启动tomcat插件
在Maven工程上右键->Run As->Maven build,在弹出的对话框中输入命令:
Goals:tomcat:run

常用Goal命令

  • tomcat:deploy,部署一个web war包
  • tomcat:reload,重新加载web war包
  • tomcat:start,启动tomcat
  • tomcat:stop,停止tomcat
  • tomcat:undeploy,停止一个war包
  • tomcat:run,启动嵌入式tomcat,并运行当前项目

tomcat7-maven-plugin

自从版本 2.0-beta-1以后, tomcat mojos 更名为 tomcat6 和 tomcat7,POM配置如下:

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat6-maven-plugin</artifactId>
  <version>2.3-SNAPSHOT</version>
</plugin>
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.3-SNAPSHOT</version>
</plugin>

使用方法基本一样:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <port>9090</port>
        <path>/mgr</path>
        <uriEncoding>UTF-8</uriEncoding>
        <finalName>mgr</finalName>
        <server>tomcat7</server>
    </configuration>
</plugin>

Goal命令
如果使用tomcat7-maven-plugin,所有Goal命令都需要更改为:tomcat7:插件执行点,例如启动命令为:tomcat7:run

tomcat7:run-war
http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/run-war-mojo.html

启动Tomcat的几种方式

启动Tomcat有两种场景,一是部署时启动,二是开发时启动。部署时基本上是通过war包来启动,而开发时的启动方式多种多样,下面拟介绍几种适用于开发时启动Tomcat的方法。
在DOS命令行启动
Apache Tomcat提供了一个名为tomcat7-maven-plugin的插件,该插件提供了多种启动Tomcat的方式。这里我们主要关心的是tomcat7:run 启动方式。
tomcat7:run所启动的是内置的Tomcat,与你本机是否安装了Tomcat无关。该内置的Tomcat会被Maven自动下载,并在执行tomcat7:run时被启动。我们可以在pom.xml里对这个内置Tomcat进行参数配置。使用内置Tomcat的好处是每次启动都是一个干净的环境,如果你长时间没关心某个工程,而突然要进行开发时,这个干净的环境很重要,让你立即还原到以前的工作环境中。
使用tomcat7:run时又有两个场景。如果你只有war工程,并且与其相关的jar文件都已上传到Maven服务器上了(或已安装到本地Maven库中),你可以在war工程的目录下执行下面的命令来启动:
mvn tomcat7:run
该命令将自动地把本地Maven库上的jar文件增加到classpath路径上,同时还会自动编译war工程,但并不打war包,启动较快。
另一个使用场景是,如果你有全部工程的源程序(若干jar工程和一个war工程),并且需要不时地修改程序,你可以在根工程下通过下面的命令来启动:
mvn tomcat7:run -am -pl abc
其中,假设abc是你的war工程名。该命令将自动地把各工程的源程序编译到各自的target/classes目录下,并添加到classpath路径中。同样,该命令也不打war包,减少了启动时间。
需要注意的是,上面的命令只处理根pom.xml里modules中定义的工程,其它所依赖的工程仍直接取本地Maven库中的jar文件。当然,我们也必须把那个war工程(即上面的abc)也定义到modules中才行。
在Eclipse里启动
在Eclipse里安装m2e和m2e-wtp插件后就可以在Servers中启动Tomcat了,这是我们首选的启动方式,此法不再赘述。
此外,我们还可以在Eclipse里执行上面说到的mvn tomcat7:run或mvn tomcat7:run -am -pl abc命令。在Eclipse里执行Maven命令比在DOS窗口里执行的一个好处是复制粘贴更容易,并且在程序抛异常后可以直接点击超链接打开对应的程序,并定位到出错的地方。

参考


上一篇 JBoss-mod_cluster

下一篇 PostgreSQL-常用系统表及SQL

阅读
4,048
阅读预计16分钟
创建日期 2017-01-12
修改日期 2018-06-20
类别
百度推荐