使用.html Grails UrlMappings

时间:2010-05-27 03:51:38

标签: grails groovy

我正在开发Grails Web应用程序(主要是作为学习练习)。我以前写过一些标准的Grails应用程序,但在这种情况下我想尝试创建一个控制器来拦截表单的所有请求(包括静态html):

<a href="/testApp/testJsp.jsp">test 1</a>
<a href="/testApp/testGsp.gsp">test 2</a>   
<a href="/testApp/testHtm.htm">test 3</a>
<a href="/testApp/testHtml.html">test 4</a> 

每次用户点击链接时,目的是做一些简单的业务逻辑(审计)。我知道我可以使用Filter(或一系列其他方法)来做到这一点,但我认为这也应该有效,并希望使用Grails框架来实现这一点。

我设置了Grail UrlMappings.groovy文件,将该表单的所有网址(/ $ myPathParam?)映射到一个控制器:

class UrlMappings {
    static mappings = {
      "/$controller/$action?/$id?"{
          constraints {
          }
      }
      "/$path?" (controller: 'auditRecord', action: 'showPage')
      "500"(view:'/error')
    }
}

在那个控制器中(在相应的“showPage”动作中)我一直打印出路径信息,例如:

def showPage = {        
    println "params.path = " + params.path
    ...
    render(view: resultingView)
}

我的四个链接的showPage操作中println的结果是

testJsp.jsp
testGsp.gsp
testHtm.htm
testHtml

为什么最后一个是“testHtml”,而不是“testHtml.html”?

在之前的(Stack Overflow query)Olexandr遇到了这个问题,并建议简单地连接request.format的值 - 实际上,它确实返回“html”。但是request.format也为所有四个链接返回“html”。

我有兴趣了解Grails正在做什么以及为什么。有没有办法配置Grails所以控制器中的params.path变量显示“testHtml.html”而不是剥离“html”扩展名?它似乎没有删除任何其他文件类型(包括.htm)的扩展名。它有这么好的理由吗?我知道使用静态html控制器有点不寻常,但仍然想了解发生了什么。

1 个答案:

答案 0 :(得分:4)

这与内容协商有关,您可以在Grails用户指南的第6.8节中阅读。如果Grails将扩展名识别为特定类型,则会从URL中删除该扩展名,并将该类型添加到“format”参数中。

您可以通过将此条目添加到grails-app/conf/Config.groovy

来禁用此行为
grails.mime.file.extensions = false