STS中使用tomcat部署项目 项目两次加载问题

情况是这样的,在STS中的tomcat配置里server location中选择了tomcat的安装路径,并且按习惯把项目部署路径指定为webapps了。因为默认的配置是部署在STS workspace里面,所以这么一改就可以在自己安装的tomcat里面看到项目部署了

本以为自己这种配置很正确。其实这也是正常的配置方式。然而,but。。。启动的时候这个项目被加载了两遍。

于是懵逼了,,,找了半天资料才找到原因。

先说sts中集成tomcat启动项目究竟是怎么回事

sts中有2种使用tomcat的方式

一种是只用内置tomcat配置,就是tomcat配置文件是独立的,部署的路径可以自己定义。

另一种就是使用自己安装的tomcat,就是直接使用安装好的tomcat,部署路径自定义。

 

默认上面选择的是Use workspace metadata,这个时候Server path:的值大概 是.metadata.plugins\org.eclipse.wst.server.core\tmp0(不可修改)deploy path是wtpwebapps(可修改)
这种情况下,eclipse会调用tomcat的核心组件,内置到eclipse中,此时启动的是eclipse内置的tomcat,跟真正的tomcat毫无关系。项目会部署到tmp0文件夹下的wtpwebapps中。此外在org.eclipse.wst.server.core文件夹下会生成servers.xml文件

我用的是直接使用我们自己安装的tomcat,这种方式下如果Application path也就是访问路径改成了跟项目名不同的时候,问题就出现了。

 

2、Use Tomcat installation:
这里的Server path:自动填充为STS中设置的tomcat路径(不可修改)

就是这个地方配置部署路径的时候导致了问题的产生:下面的deploy path我改成了webapps,认为这样刚好遵循tomcat部署目录。理论上是没有问题的,很nice,这时项目会部署到了真正的tomcat的webapps下,并生成了backup文件夹,org.eclipse.wst.server.core文件夹下也会生成servers.xml文件。

但是问题就在于这个项目配置更改了访问映射名称,也就是启动后访问的话用的根路径不是项目名,这种配置就导致了server.xml中会为项目路径生成一个虚拟路径,如下:

 <Context docBase="D:\DEV\apache-tomcat-7.0.67-2\webapps\sia-ac-web" path="/sia6" reloadable="true" source="org.eclipse.jst.jee.server:sia-ac-web"/>

 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="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" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

      <Context docBase="D:\DEV\apache-tomcat-7.0.67-2\webapps\sia-ac-web" path="/sia6" reloadable="true" source="org.eclipse.jst.jee.server:sia-ac-web"/></Host>

webapps下部署和使用虚拟路径部署是两种部署方式,但是tomcat实现部署的方式就是通过虚拟路径。在使用自己的tomcat时,tomcat的虚拟路径配置,部署目录又定义为webapps下,项目又更改了Application path,所以两种配置都会生效,所以就导致项目两次加载

 

解决办法:要么改掉tomcat默认加载路径appBase="webapps",让tomcat启动时不再加载webapps目录,但是这样就难免有点奇葩了。但是又想把项目部署在自己的tomcat下,既然自动生成的虚拟路径不能去掉,干脆就换一个wtpwebapps目录。这样<Context>标签虚拟路径生效

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值