2010-01-24 100 views
1

我想讓Groovy在乾淨的URL裏面運行Tomcat。由於我對Tomcat的URL映射和過濾器的瞭解非常有限,所以我遇到了一堵磚牆。Tomcat,Groovy和乾淨的URL

我想創建一個名爲index.groovy的前端控制器來處理所有傳入的請求。問題是,我似乎無法弄清楚如何創建正確的web.xml映射。這是我目前有(這是相當多的標準):

<servlet> 
    <servlet-name>Groovy</servlet-name> 
    <servlet-class>groovy.servlet.GroovyServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Groovy</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

如果我現在嘗試用下面的URL來訪問我的情況下,我得到一個404

http://localhost:8080/GroovyTest/index.groovy/test 

當然,理想情況下,我想執行的index.groovy腳本,我可以拿起路徑的其餘部分。

回答

3

我認爲這裏的主要問題是您對Servlet映射GroovyServlet的工作原理的誤解。所以,下面是一個簡單的解釋:

  • 當你描述這樣的映射時,它表明所有匹配「/ *」模式的URL將被髮送到GroovyServlet類。有了這樣的通用模式,所有的URL都是有效的,這可能會導致一些問題,例如,當試圖訪問圖像,樣式等...
  • GroovyServlet已經是一個調度器。如果你看看它的源代碼,你會看到,由於它是繼承,它會檢查給定的路徑是否存在於「/ WEB-INF/groovy /」目錄下。在您的示例中,這意味着它會查找「/WEB-INF/groovy/index.groovy/test」文件
  • 如果此文件存在,它將作爲Groovy腳本(帶有某個裝飾器)執行,並且結果以「text/html」MIME類型返回。

現在我想你可以清楚地理解爲什麼它不適用於你的例子。我寧願建議你另外兩種方法來實現你的目標:

  • 看看一個Grails,這是最適合做框架常規的網絡發展方向之一。
  • 請參考Gaelyk微框架的來源。這不僅是瞭解調度工作的良好開端,而且它還有一個很好的教程來幫助管理乾淨的URL
+0

感謝您的解釋。現在有道理。我會看看Gaelyk。即使我沒有使用Google App Engine,也可能會有一些有用的信息。 – Luke 2010-01-24 21:08:47