2014-01-27 41 views
0

我有一個Java Servlet,它接受提供的URL請求的路徑並從中檢索數據庫資源。例如:Tomcat7/Apache2 URL通配符映射

www.mydomain.com/gateway/databasename/tablename

將從指定表中檢索信息,所有的美好和REST等。這在Windows和Netbeans上的本地Tomcat7服務器上工作得很好,但是我在將它部署到運行Ubuntu的Apache2 Web服務器時遇到問題。

這是我的虛擬主機文件看起來像:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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的迴應:「網關」是一個無效的數據庫名稱。

所以我認爲問題是在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

我的猜測是,當您從Netbeans運行它時,Tomcat正在爲位於/(root)上下文路徑的webapp提供服務,並且服務器正在/gateway上下文路徑上提供服務。

所以從Netbeans的基礎webapp的路徑爲:/hostname

但在服務器上,它是:/hostname/gateway

因爲你的servlet的URL模式是/gateway/*,其結果是,你必須在服務器上添加額外的/gateway

要解決它的服務器,你需要你的servlet的URL模式更改爲/*,而不是/gateway/*

然後讓它從NetBeans中再工作,需要上下文路徑改變從/ROOT/gateway 。我對Netbeans並不熟悉,但是從Google的快速搜索中,您需要右鍵單擊您的Web應用程序,然後轉到「屬性」 - >「運行」,在那裏您應該可以更改上下文路徑。

+0

謝謝!知道這是簡單的事情 – hotforfeature