Application successfully deployed on Tomcat, but 404 error

14,475

Solution 1

So you have an Apache instance sitting in front of Tomcat. Some/all requests to Apache are forwarded to Tomcat AJP port 8009. Assuming this Apache-Tomcat bridge is working ok, and thus focusing only on your deployed application, you probably need to add some JKMount directives into Apache's httpd.conf file, to ensure that requests to /myApp url are indeed forwarded to Tomcat. Otherwise, they are served by Apache, which means that you get a 404 error when those resources are not found.

Solution 2

The HTTPD/conf.d folder should have various .conf files which contains entries regarding the web applications configured. Either you can create a new .conf file or add the ProxyPass entry to an existing conf file. Adding a ProxyPass entry can route the request received to the tomcat. e.g. ProxyPass /myApp/ ajp://localhost:8009/myApp/. Tomcat should be listening on AJP Connector port 8009 for above example.

Share:
14,475
Marten Sytema
Author by

Marten Sytema

I am a Software Engineer and Enterpreneur, running my small company from The Hague, The Netherlands. I am mainly interested in generating code using Model-driven Engineering techniques. At the moment I am working on, and using my Java/Google Web Toolkit code generator to generate web applications.

Updated on June 30, 2022

Comments

  • Marten Sytema
    Marten Sytema almost 2 years

    I've deployed, after some struggle, a web-app on a (remote) Tomcat 5.5 server (Turnkey Linux comes with that). It is a GoogleWebToolkit web-app with a Java backend.

    Observing the logs everything went fine. The /manager app also shows 'running=true' on my new app.

    But the problem is, going to the /myApp url gives 404. What I've done so far, to no success:

    • Made sure it does run locally using Eclipse, works fine there
    • Checked the logs on the deployment server, it successfully loads Spring, and some other libraries. In fact, it shows the same messages as when I run it in hosted-mode in Eclipse
    • The /manager, /host-manager, /admin applications run fine.
    • Reloading the app on /manager also says 'OK'
    • I have a welcome file specified, one that is actually there, directly hitting that also gives 404
    • I use the default host ('localhost'), just like the /manager, /host-manager and /admin apps
    • Did a lot of searching on the internet, to no avail.
    • Tried a different Tomcat (v6) server (my home ubuntu box, the one I want to deploy on is a VPS somewhere on the net), and there it just works... Reinstall the VPS?

    Any hints on how to fix this, find out what the problem is, or what might cause this? Can there be conflicts? there is another app running in the $CATALINA_HOME/webapps dir, can that conflict with myApp, which is in the same directory deployed?

    Below is my server.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Server>
      <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
      <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
      <GlobalNamingResources>
       <Environment
        name="simpleValue"
        type="java.lang.Integer"
        value="30"/>
       <Resource
         auth="Container"
         description="User database that can be updated and saved"
         name="UserDatabase"
         type="org.apache.catalina.UserDatabase"
         pathname="conf/tomcat-users.xml"
         factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>
      </GlobalNamingResources>
      <Service
      name="Catalina">
       <Connector
        port="8009"
        redirectPort="8443"
        address="127.0.0.1"
        protocol="AJP/1.3">
       </Connector>
       <Engine
        defaultHost="localhost"
        name="Catalina">
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
         <Host
          appBase="webapps"
          name="localhost">
         </Host>
       </Engine>
     </Service>
    </Server>