2010-01-24 114 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