Tomcat7 / Apache2 URL通配符映射

时间:2014-01-27 23:40:15

标签: url apache2 tomcat7 wildcard mod-jk

我有一个Java Servlet,它接受提供的URL请求的路径并从中检索数据库资源。例如:

www.mydomain.com/gateway/databasename/tablename

将从指定的表中检索信息,一切都很好,就像REST一样。这在Windows和Netbeans上的localhost Tomcat7服务器上运行得很好,但是我在运行Ubuntu的Apache2 Web服务器上部署它时遇到了麻烦。

这就是我的VirtualHost文件的样子:

<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>

我可以导航到www.mydomain.com/gateway并查看servlet的索引页面。如果我访问www.mydomain.com/gateway/databasename,我会从Tomcat收到404错误,说明所请求的资源不可用。

然而!如果我去www.mydomain.com/gateway/gateway,我会得到我的servlet响应,“gateway”是一个无效的数据库名称。

所以我认为问题出在VirtualHost文件中并映射URL。 www.mydomain.com/gateway/gateway/*上的任何内容都有效,但www.mydomain.com/gateway/*没有。

我部署的web.xml的servlet映射也是正确的:

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

mod-jk的worker.properties文件看起来正确:

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

我不确定自己哪里出错了,而且我知道这会是明显的。如果有人可以帮助我,我会非常感激!

1 个答案:

答案 0 :(得分:0)

我的猜测是,当您从Netbeans运行时,Tomcat正在/(根)上下文路径上提供webapp,并且服务器正在/gateway上下文路径上提供它。

因此,从Netbeans开始,基本webapp路径为:/hostname

但在服务器上它是:/hostname/gateway

由于您的servlet的网址格式为/gateway/*,因此结果是在服务器上您必须添加额外的/gateway

要为服务器修复它,您需要将servlet的网址格式更改为/*而不是/gateway/*

然后,为了让它再次从Netbeans工作,您需要将上下文路径从/ROOT更改为/gateway。我不熟悉Netbeans,但是通过快速谷歌搜索,您需要右键单击您的webapp,转到属性 - &gt;运行,在那里你应该能够改变上下文路径。

相关问题