Grails UrlMappings с .html - PullRequest
       15

Grails UrlMappings с .html

4 голосов
/ 27 мая 2010

Я занимаюсь разработкой веб-приложения Grails (в основном в качестве учебного упражнения). Ранее я написал несколько стандартных приложений 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> 

Цель состоит в том, чтобы выполнять простую бизнес-логику (аудит) каждый раз, когда пользователь щелкает ссылку. Я знаю, что могу сделать это с помощью фильтра (или ряда других методов), однако я подумал, что это тоже должно сработать, и хотел сделать это с помощью инфраструктуры Grails.

Я настроил файл Grail UrlMappings.groovy для сопоставления всех URL-адресов этой формы (/ $ 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)
}

Результаты println в действии showPage для каждой из моих четырех ссылок:

testJsp.jsp
testGsp.gsp
testHtm.htm
testHtml

Почему последний "testHtml", а не "testHtml.html"?

В предыдущем ( запрос переполнения стека ) Olexandr столкнулся с этой проблемой и посоветовал просто объединить значение request.format, которое действительно действительно возвращает "html". Однако request.format также возвращает «html» для всех четырех ссылок.

Мне интересно понять, что делает Grails и почему. Есть ли способ настроить Grails, чтобы переменная params.path в контроллере показывала «testHtml.html», а не удаляла расширение «html»? Кажется, он не удаляет расширение для любого другого типа файла (включая .htm). Есть ли веская причина, по которой он это делает? Я знаю, что немного необычно использовать контроллер для статического HTML, но все же хотел бы понять, что происходит.

1 Ответ

4 голосов
/ 02 июня 2010

Это связано с согласованием контента, о котором вы можете прочитать в разделе 6.8 руководства пользователя Grails. Если Grails распознает расширение как определенный тип, расширение удаляется из URL, а тип добавляется к параметру «format».

Вы можете отключить это поведение, добавив эту запись в grails-app/conf/Config.groovy:

grails.mime.file.extensions = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...