我有一个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
我不确定自己哪里出错了,而且我知道这会是明显的。如果有人可以帮助我,我会非常感激!
答案 0 :(得分:0)
我的猜测是,当您从Netbeans运行时,Tomcat正在/
(根)上下文路径上提供webapp,并且服务器正在/gateway
上下文路径上提供它。
因此,从Netbeans开始,基本webapp路径为:/hostname
但在服务器上它是:/hostname/gateway
由于您的servlet的网址格式为/gateway/*
,因此结果是在服务器上您必须添加额外的/gateway
。
要为服务器修复它,您需要将servlet的网址格式更改为/*
而不是/gateway/*
然后,为了让它再次从Netbeans工作,您需要将上下文路径从/ROOT
更改为/gateway
。我不熟悉Netbeans,但是通过快速谷歌搜索,您需要右键单击您的webapp,转到属性 - &gt;运行,在那里你应该能够改变上下文路径。