Domanda

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!

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top