【问题标题】:Deployed Web-App but no folder within webapps已部署 Web-App 但 webapps 中没有文件夹
【发布时间】:2015-11-04 17:33:48
【问题描述】:

我有一个希望部署在 Tomcat 上的 WAR。由于这个文件非常大(大约 150MB),我只是将它放到/usr/share/Tomcat7/webapps 中,以便在服务器重新启动时自动部署它。重新启动 tomcat 后,应用程序已正确部署,我可以使用 http://myhost:8080/myApp 访问该应用程序。但是webapps/myApp 下没有包含构建应用程序的文件的此类文件夹,存档文件仍然存在。

所以我想知道如果相应的文件夹甚至不存在,我如何更改该 web 应用程序中的任何文件(例如 webapps/myApp/WEB-INF 下的配置文件)。或者 webapp 是否在我不知道的任何其他文件夹中解压?

这是我的server.xml-文件:

<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
    <Listener className="org.apache.catalina.core.JasperListener"/>
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase"
            description="User database that can be updated and saved"
            factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
            pathname="conf/tomcat-users.xml"/>
    </GlobalNamingResources>
    <Service name="Catalina">


    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1024"
            minSpareThreads="4"/>

    <Connector executor="tomcatThreadPool" port="80" connectionTimeout="20000"
            redirectPort="443" protocol="org.apache.coyote.http11.Http11NioProtocol"/>

    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https"
            secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/certificate.jks"
            keystoreType="JKS" keystorePass="ciardi25" keyPass="ciardi25"/>

    <Engine name="Catalina" defaultHost="localhost">    
        <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                    resourceName="UserDatabase"/>
            </Realm>

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

                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                    prefix="localhost_access_log." suffix=".txt"
                    pattern="%h %l %u %t &quot;%r&quot; %s %b"/>

            </Host>
        </Engine>
    </Service>
</Server>

编辑:catalina.out 还指出,该应用已成功部署,因为该文件中有许多由我的应用编写的 cmets。

编辑:操作系统是 Amazon Linux AMI

【问题讨论】:

  • 乍一看您的配置似乎是正确的。您检查日志文件是否有任何错误?
  • 考虑 catalina.out 没有任何意义。 webapp 将一些消息写入日志文件,确认它已经设置并且工作正常。我只看到一些警告抱怨An attempt was made to authenticate the locked user "root"(相应地针对adminmanagertomcat)。
  • 不确定您使用的是哪种 Unix,但在 Ubuntu 上,我通常将 war 文件放在 /var/lib/tomcat7/webapps/ 下。我在某处读到该目录有所作为。所以你可以试试。
  • 为此我想我应该首先获取一个目录。但是没有,所以删除 WAR 可能会删除应用程序本身,不是吗?

标签: tomcat war


【解决方案1】:

如果 Tomcat 是通过某个包管理器安装的,它的文件通常分布在多个目录中,例如 /usr/share/tomcatX//var/lib/tomcatX//etc/tomcatX

如果您的软件包已使用apt 部署,您可以尝试dpkg-query -L tomcat7 来查看属于安装的所有路径。对于rpm,它是rpm -ql tomcat7。从输出中,您可以确定哪个目录实际上是安装的一部分,哪个不是。

这里有一个 Debian 安装,它的 webapps 文件夹位于 /var/lib/tomcat7/webapps 中。也许你应该检查这个目录是否也包含你的 webapp。为什么 Tomcat 似乎将 WAR 打包到不同的文件夹但仍然很神秘。您是否使用一些/etc/init.d/tomcat7 来启动/停止它?如果是这样,您可能想查看该脚本以及它在启动时的作用。

【讨论】:

  • 确实 Tomcat 似乎被分隔到不同的目录中。然而,/var/lib/tomcat7/webapps 也只包含档案而不是实际的文件夹。
  • 奇怪。我建议你用艰难的方式搜索它:find /etc /opt /tmp /usr /var -iname myapp -type d.
  • var/cache/tomcat7/work/Catalina/localhost/myApp 下找到了该应用。为什么 Tomcat 部署到那个目录?
  • 高兴得太早了。虽然该文件夹存在于上述路径下,但仅包含其 JSP 文件和应用程序使用的类。没有部署描述符(web.xml)或任何其他文件
  • 毫不奇怪 - work 文件夹在内部用于保存持久会话数据和编译的 JSP 类。我听说 Tomcat 也可以直接从 WAR 文件运行 web 应用程序,而无需解压它,但从未验证它是否可能。如果您 1) 删除 WAR,2) 停止 Tomcat,3) 手动解压到 webapps/,然后 4) 再次启动 Tomcat,会发生什么?
猜你喜欢
  • 2013-09-04
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多