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  项...
  • xue_feitian
  • xue_feitian
  • 2010年11月01日 18:41
  • 17383

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

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

tomcat 修改默认访问项目名称和项目发布路径

摘要 本次主要介绍tomcat设置访问的默认项目的名称和项目存放的路径1、修改项目发布路径tomcat默认的而发布路径为 tomcat/webapps/目录,打不死这个目录下有一些默认的项目...
  • qq_24879495
  • qq_24879495
  • 2017年09月28日 11:24
  • 1775

如何实现Java Web项目配置分离

项目配置分离虽不是每家公司都在做的事情,但它也有它的好处,如下 1、保证配置文件内容的安全,和tomcat中的项目分离开,专门的给分离出来的配置文件目录一定的权限,只有专门的人员才有权利访问和修改...
  • dreamsunday
  • dreamsunday
  • 2016年12月07日 20:55
  • 2429

Spring+Tomcat配置文件与项目分离

由于开发和测试需要连接不同的数据库,来回更改配置文件有些麻烦,所以想要把配置文件放到项目外,项目启动时,直接读取本地的配置文件,需要时直接替换文件即可。     如果项目的配置文件是.xml类型的文件...
  • a6960121
  • a6960121
  • 2017年07月10日 11:32
  • 1013

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...
  • flyliuweisky547
  • flyliuweisky547
  • 2014年03月02日 12:04
  • 22452

tomcat8目录结构

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

tomcat的webApps和work目录

用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的jsp没有...
  • tianhenkong
  • tianhenkong
  • 2014年07月17日 09:45
  • 1707

【Java】_tomcat7.0如何修改默认的启动目录webapps

【前言】   最近在敲DRP项目的时候遇到了一个问题那就是在用tomcat启动项目的时候总是用很长的时间,起初我并不是很在意,觉得时间还是可以接受的,好吧,我承受我有一点小小的将就!后来偶然的机会,...
  • changyinling520
  • changyinling520
  • 2017年04月30日 22:28
  • 3185

如何将项目发布到Tomcat的webapps目录下

Eclipse默认发布项目时,Javaweb项目会被发布到Eclipse工作空间下,而不再Tomcat下的webapps下。...
  • baidu_37107022
  • baidu_37107022
  • 2017年06月12日 20:24
  • 706
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat8下将webapps目录与tomcat目录分离
举报原因:
原因补充:

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