在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署。(在下文中$CATALINA_HOME指的是Tomcat根目录)
一、静态部署
1、直接将web项目文件件拷贝到webapps 目录中
Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。所以可以将JSP程序打包成一个 war包放在目录下,服务器会自动解开这个war包,并在这个目录下生成一个同名的文件夹。一个war包就是有特性格式的jar包,它是将一个web程序的所有内容进行压缩得到。具体如何打包,可以使用许多开发工具的IDE环境,如Eclipse等。也可以用 cmd 命令:jar -cvf mywar.war myweb
webapps这个默认的应用目录也是可以改变。打开Tomcat的conf目录下的server.xml文件,找到下面内容:
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
将appBase修改即可。
2、在server.xml中指定
在Tomcat的配置文件中,一个Web应用就是一个特定的Context,可以通过在server.xml中新建Context里部署一个JSP应用程序。打开server.xml文件,在Host标签内建一个Context,内容如下。
在tomcat中的conf目录中,在server.xml中的,
或者
或者
说明:
path是虚拟路径;
docBase 是应用程序的物理路径;
workDir 是这个应用的工作目录,存放运行时生成的与这个应用相关的文件;
debug 则是设定debug level, 0表示提供最少的信息,9表示提供最多的信息
privileged设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet
reloadable 如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序,实现热部署
antiResourceLocking和antiJARLocking 热部署是需要配置的参数,默认false避免更新了某个webapp,有时候Tomcat并不能把旧的webapp完全删除,通常会留下WEB-INF/lib下的某个jar包,必须关闭Tomcat才能删除,这就导致自动部署失败。设置为true,Tomcat在运行对应的webapp时,会把相应的源文件和jar文件复制到一个临时目录里。
让tomcat只运行conf/server.xml中指定的web应用可以有以下2种办法:
实现一:
1)将要部署的WEB应用放在webapps以外的路径, 并在server.xml相应的Context 中的docBase 指定.
2)删除webapps中的所有文件夹, 以及conf/catalina/localhost下所有xml文件.
注: webapps是server.xml中的Host 元素的appBase 属性的值.
实现二:
修改server.xml中Host 元素的属性, 添加或修改:deployXML ="false"deployOnStartup ="false"autoDeploy ="false"
含义:
deployXML ="false": 不部署conf/catalina/localhost下的xml相应的WEB应用
deployOnStartup ="false":tomcat启动时, 不部署webapps下的所有web应用
autoDeploy ="false" :避免tomcat在扫描改动时, 再次把webapps下的web应用给部署进来.
注:
Tomcat中webapps目录下不能直接存放网页格式的文件,否则无法访问到该文件,必须有子目录才能访问该网页文件。
例如:我们直接将index.html放在webapps目录中,通过浏览器http://localhost:8080/index.html 是无法访问到index.html的。而必须要webapps/xxxxx/index.html才可以通过http://localhost:8080/xxxxxx/index.html 访问到index.html页面。
3、创建一个Context文件
在conf目录中,新建 Catalina\localhost目录,在该目录中新建一个xml文件,名字不可以随意取,要和path后的那个名字一致,按照下边这个path的配置,xml的名字应该就应该是hello(hello.xml),该xml文件的内容为:
tomcat自带例子如下:
privileged="true" antiResourceLocking="false" antiJARLocking="false">
这个例子是tomcat自带的,编辑的内容实际上和第二种方式是一样的,其中这xml文件名字就是访问路径,这样可以隐藏应用的真实名字。
4、注意:
删除一个Web应用同时也要删除webapps下相应的文件夹和server.xml中相应的Context,还要将Tomcat的conf\catalina\localhost目录下相应的xml文件删除,否则Tomcat仍会去配置并加载。。。
二、动态部署
动态部署是指可以在服务器启动之后部署web应用程序,而不用重新启动服务器。动态部署要用到服务器提供的manager.war文件,如果 在$CATALINA_HOME/webapps/下没有该文件,你必须去重新下载tomcat,否则不能完成以下的功能。要想使用该管理程序必须首先编 辑$CATALINA_HOME/conf/tomcat-users.xml文件。
然后在浏览器中键入如下地址:
http://localhost:8080/应该看到一个漂亮的加菲猫了吧。
点击右边的Manager App链接,提示输入用户名和密码,本文都是tomcat,然后可以看到以下页面:
(1)Context Path(requried): 中输入/Pet
(2)XML Configration file URL 中要指定一个.xml文件,比如我们在F:/下建立一个Pet.xml文件,内容如下:
(3)WAR or Directory URL: 输入F:/PetWet或者F:/Pet.war都可以,然后点击Deploy按钮,看看上面是不是已经看到了你web应用程序,名字就是你Context Path(requried):中输入的名字。
(4)如果你部署.war文件还有更加简单的方式,下面还有个Select WAR file upload 点击选择文件按钮选择.war文件,然后点击Deploy也可以
三、tomcat conf目录下文件介绍及作用
/conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml.
Tomcat的配置基于两个配置文件:1.server.xml - Tomcat的全局配置文件 2.web.xml - 在Tomcat中配置不同的关系环境
1、server.xml
server.xml是Tomcat的主配置文件.是配置tomcat的文件,比如我们可以在里面更改8080端口等.还可以在里面添加
完成两个目标:
a、 提供Tomcat组件的初始配置.
b、 说明Tomcat的结构,含义,使得Tomcat通过实例化组件完成起动及构建自身, 如在server.xml所指定的server.xml种的重要元素:元素及其描述
2、web.xml
Tomcat可以让用户通过将缺省的web.xml放入conf目录中来定义所有关系环境的web.xml的缺省值.建立一个新的关系环境时,Tomcat使用缺省的web.xml文件作为基本设置和应用项目特定的web.xml(放在应用项目的WEB-INF/web.xml文件)来覆盖这些缺省值.是配置整个tomcat的jsp和servlet工作中的一些情况,比如我们配置list来不让我们输入一个目录的时候显示出那个目录下的jsp文件,而是显示404错误.还有在一些安全方面也可以做配置.
3、tomcat-users.xml
配置tomcat的用户了信息.可以到tomcat的开始页http://localhost:8080中点tomcat manager就会提示你要用户名和密码了,这里的用户名和密码就可以在这个xml中配置的
4、context.xml
是用来配置环境的.我们开发大项目的时候一般都是配置这个文件的来添加一个项目的而不是把项目拷贝到webapp下去,还有也可以在这里配置JNDI,一般我们都选择在这里而不是server.xml中配置工程和JNDI.