Question

I have a Java Servlet that takes the path of a provided URL request and retrieves database resources from it. For example:

www.mydomain.com/gateway/databasename/tablename

Would retrieve information from the specified table, all nice and REST like. This works just fine on a localhost Tomcat7 server on Windows and Netbeans, but I'm having trouble deploying it on an Apache2 web server running Ubuntu.

This is what my VirtualHost file looks like:

<VirtualHost *:80>
    ServerAdmin andrew@mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com

    DocumentRoot /var/www/wordpress
    <Directory />
            Options FollowSymLinks
            AllowOverride all
            Order allow,deny
            Allow from all
    </Directory>

    Alias /manager /usr/share/tomcat7-admin/manager
    <Directory "/usr/share/tomcat7-admin/manager">
            Options FollowSymLinks
            AllowOverride None
            Allow from all
    </Directory>
    JkMount /gateway* ajp13_worker
    JkMount /manager* ajp13_worker
    JkMount /host-manager* ajp13_worker
    ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

I'm able to navigate to www.mydomain.com/gateway and view the index page for the servlet. If I go to www.mydomain.com/gateway/databasename, I get a 404 error from Tomcat saying the requested resource is unavailable.

However! If I go to www.mydomain.com/gateway/gateway, I then get my servlet's response that "gateway" is an invalid database name.

So I think the problem is somewhere in the VirtualHost file and mapping the URL. Anything at www.mydomain.com/gateway/gateway/* works, but www.mydomain.com/gateway/* does not.

Also the servlet mapping for my deployment's web.xml is correct:

<servlet-mapping>
    <servlet-name>Gateway</servlet-name>
    <url-pattern>/gateway/*</url-pattern>
</servlet-mapping>

And the mod-jk's worker.properties file looks right:

worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13

I'm not sure where I'm going wrong, and I know it's going to be something obvious. If anyone can help me out, I'd greatly appreciate it!

Was it helpful?

Solution

My guess is that Tomcat is serving the webapp at the / (root) context path when you run it from Netbeans, and the server is serving it at the /gateway context path.

So from Netbeans the base webapp path is: /hostname

But on the server it is: /hostname/gateway

Since the URL pattern of your servlet is /gateway/*, the result is that on the server you have to add an additional /gateway.

To fix it for the server, you need to change the URL pattern of your servlet to /* instead of /gateway/*

Then to make it work again from Netbeans, you need to change the context path from /ROOT to /gateway. I'm not familiar with Netbeans, but from a quick googling you need to right click your webapp go to Properties -> Run, and there you should be able to change the Context Path.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top