Tomcat8下将webapps目录与tomcat目录分离

原创 2016年05月30日 14:56:27

引言: 在实际的生产环境中,默认情况下会将tomcat目录和时间部署目录进行分离,而非我们在开发环境下的将其放入$CATALINA_HOME/webapps下,那如何来实现这个功能呢?本文将回答此问题。

1.  环境介绍

    tomcat 8.0.35,  OS:Centos 6.2   JDK 1.8

2.  tomcat下conf目录分析

    我们需要关注的是其下server.xml中的配置信息,其中的Host的配置中默认情况为:

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
  其默认会将首页映射到$CATALINA_HOME/webapps/ROOT, 从官网上下载内容,默认为tomcat的管理控制台。

3.  如何来修改?

   同样关注server.xml配置文件,做如下配置:

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
          <Context path="" docBase="/opt/apps/course/orff" reloadable="true" debug="0" crossContext="true"/>
      </Host>
请注意新增了一个Context及其相应的属性信息:
  •   path:指定访问该Web应用的URL入口
  •   docBase:   指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。(指定项目所在地址)
  •  reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用
  • crossContext: 

       From the javadoc ServletContext.getContext():

This method allows servlets to gain access to the context for various parts of the server, and as needed obtain RequestDispatcher objects from the context. The given path must be begin with "/", is interpreted relative to the server's document root and is matched against the context roots of other web applications hosted on this container.

       So for instance if you want to include a page from a different webapp you need to set crossContext to true.

      You can share sessions between web applications by using a Single Sign-On Valve.

      You would set crossContext=true if you wanted to share some information between different Web Applications in the same Virtual Host.

For example app1 would call:

   setAttribute("name", object);

and another app could call

   getContext("app1").getAttribute("name");

to read the information. If crossContext wasn't set to true, the getContext("app1") would have returned null.

    crossContext用来设置在不同的虚拟目录应用下Session的共享。

   新增的Context节点将覆盖其默认的webapps部署目录,从而将其部署与tomcat目录进行分离。

4.   tomcat中的虚拟目录和主目录

     虚拟目录:  在我们在webapps中部署一个目录之时,会在catalina_home/conf/CATALINA/localhost目录下,默认生成一个ROOT.xml.其默认的内容如下

<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" docBase="/opt/apps/course/orff" path="" reloadable="true">
</Context>
这里设置的虚拟目录的信息。

   使用场景:  在我们在server.xml中删除了相应的context信息之后,如果发现不生效,则需要关注一下conf/Catalina/localhost下的相应文件,删除之后,重新启动即可解决类似问题。

5.  主目录和虚拟目录的解析顺序

    tomcat首先到conf/Catalina/localhost下解析其虚拟目录的信息,如果有则顺利跳转;如果虚拟目录不存在,则进入server.xml中的context部分进行解析,然后正常进行跳转,跳转进入正常的页面流转。

   由此可知:  我们可以在虚拟目录和主目录两个位置来进行配置Context的目录信息,至于哪一个位置更好,大家可以自由选定,默认是server.xml为宜。

6.  总结

    主目录、虚拟目录;Tomcat下部署目录和Tomcat安装目录的分离,都在Context中进行体现。

tomcat中的server.xml中的配置文件中<Host appBase="webaps"修改appBase引起的路问题

为了实现项目访问时可地址以直接通过访问ip和端口号就能直接访问 也就是直接访问http://localhost:8080/   而不用这样:http://localhost:8080/gxedu  项...

Tomcat学习—Tomcat7 修改/webapps/ROOT发布路径(Linux和windows环境)

在web开发中经常使用到的一个容器就是Tomcat,大多数人在本地开发使用的是windows 环境,而当项目真正远行,一般就是在Linux服务器上。下面主要讲解Linux服务器上修改Tomcat部署应...

tomcat 虚拟目录配置appBase和docBase的区别

先看server.xml文件host配置 appBase:这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用,默认为tomcat下webapps目录,如果不想访问默认RO...

tomcat部署web应用的三种方式

1、直接放到Webapps目录下    Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。也可以将JSP程序打包成一个war包放在目录下,服务器...

Tomcat中server.xml中的appBase

appBase="D:\appBase\"             unpackWARs="true" autoDeploy="true"             xmlValidation="f...

tomcat8目录结构

Tomcat8.0的目录结构: /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件,startup.bat,shutdown.bat,tomcat-juli.jar /co...
  • begin27
  • begin27
  • 2016年03月16日 10:48
  • 1859

Tomcat 8(一)Tomcat常用配置

操作系统:win8 Jdk版本:1.7.0_51 Jdk目录:C:\Program Files\Java\jdk1.7.0_51 Tomcat版本:8.0.3  Tomcat目录:D:\Program...

Tomcat8.0 项目部署

本文主要介绍怎么在tomcat8.0下面部署spring mvc项目。 在部署项目之前需要把我们的项目打包一下(war),实际上在点击编辑器运行的时候就一句生成了这个war包,不要额外工作,大概的...

Tomcat8安装, 安全配置与性能优化

一、Tomcat 安装  官网:http://tomcat.apache.org/  Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi...
  • our_sky
  • our_sky
  • 2016年05月10日 14:00
  • 14560

Tomcat7部署项目的四种方法

脱离eclipse将web应用部署到tomcat的四种方法: 1.在tomcat安装目录的conf目录下的service.xml中加入应用: 第一步 打开D:\Program Files\apa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat8下将webapps目录与tomcat目录分离
举报原因:
原因补充:

(最多只允许输入30个字)