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中进行体现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Tomcat8.0 项目部署

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

Tomcat配置虚拟路径,使上传文件与服务器分离

遇到问题介绍:项目中头像上传,上传图片到服务器。如果使用tomcat下的目录作为上传图片的路径,则每次重启服务器图片将消失 遇到问题:使用服务器物理磁盘的D:\upload路径存储文件,访问请求路径...

tomcat7和tomcat8 对 资源路径的解析

在jsp中 我们需要引入静态文件 使用下面的方式在META-INF 的context.xml 文件中配置别名 这样就能将/static/path.html 映射到 绝对目录中/mfs/ShareFil...

Tomcat中server.xml中的appBase

appBase="D:\appBase\"             unpackWARs="true" autoDeploy="true&...

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

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

将应用部署到Tomcat根目录

将应用部署到Tomcat根目录的目的是可以通过“http://[ip]:[port]”直接访问应用,而不是使用“http://[ip]:[port]/[appName]”上下文路径进行访问。 ...

Tomcat配置虚拟路径,使上传文件与服务器分离

遇到问题介绍:项目中上传文件到服务器。如果使用tomcat下的目录作为上传图片的路径,则每次重启服务器图片将消失。【因为开发工具的项目中没有该图片,每次重启服务器重新部署的时候将会删除开发工具的项目中...

tomcat8 运行后没有切到app根目录

toncat7的工程war文件复制到 tomcat8后,相关配置也复制过来。 然后启动tomcat8,发现根目录总是 apache 页面,没有切到 app。 网上搜索发现,在 context 里面...
  • zhbpd
  • zhbpd
  • 2016-05-23 14:13
  • 784

tomcat8目录结构

Tomcat8.0的目录结构: /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件,startup.bat,shutdown.bat,tomcat-juli.jar /co...

Tomcat网页应用程序目录webapps详解

webapps/ROOT 为根网站ROOT目录下有:     WEB-INF目录下有:          web.xml: 应用配置文件   ...
  • lennyf
  • lennyf
  • 2011-03-02 09:42
  • 16647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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