1

我试图让 Groovy 在 Tomcat 中以干净的 url 运行。由于我对 Tomcat 的 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在我可以拾取路径的其余部分的地方执行脚本。

4

1 回答 1

3

我认为这里的主要问题是您对 servlet 映射和 GroovyServlet 如何工作的误解。所以,这里有一个简短的解释:

  • 当您描述这样的映射时,它表示所有匹配“/*”模式的 URL 都将被发送到 GroovyServlet 类。使用这种通用模式,所有 url 都是有效的,这可能会导致一些问题,例如在尝试访问图像、样式等时......
  • GroovyServlet 已经是一个调度程序。如果你查看它的源代码,你会发现,由于它是继承的,它只会检查给定的路径是否存在于“/WEB-INF/groovy/”目录下。在您的示例中,这意味着它会查找“/WEB-INF/groovy/index.groovy/test”文件
  • 如果该文件存在,它将作为 Groovy 脚本(带有一些装饰器)执行,并以“text/html”mime 类型返回结果。

现在我认为您可以清楚地理解为什么它不适用于您的示例。我宁愿建议您使用其他两种方法来实现您的目标:

  • 看看Grails,它是最适合进行 groovy Web 开发的框架之一。
  • Gaelyk微框架的来源为例。它不仅是了解调度如何工作的一个好的开始,而且它还有一个很好的教程来帮助管理干净的 URL
于 2010-01-24T18:35:47.967 回答