Grails - это структура MVC. Если вы хотите отобразить URL-адрес непосредственно на GSP (без перенаправления через контроллер и действие), вам нужно объяснить это гралям внутри UrlMappings.groovy
. Там вы можете определить свои «ярлыки». E.g.:
static mappings = {
"/$viewName"(view:"/index") {
constraints {
viewName([some constraints])
}
}
}
Который будет рендерить views/index.gsp
без прохождения через контроллер. Если вы НЕ определяете отображение контроллера (или, по крайней мере, отображение представления) для этих URL-адресов, вы НЕ МОЖЕТЕ использовать фильтры grails:
Если вы действительно хотите перехватить ВСЕ запросы, вы можете добавить фильтр сервлетов в ваше приложение Grails, например:
import javax.servlet.*
import org.springframework.web.context.support.WebApplicationContextUtils;
class TestFilter implements Filter {
def applicationContext
void init(FilterConfig config) throws ServletException {
applicationContext = WebApplicationContextUtils.getWebApplicationContext(config.servletContext)
}
void destroy() {
}
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("this filter has been called");
}
}
Здесь вы можете выполнять перенаправление или рендеринг на основе applicationcontext
и текущего request
.
Вам необходимо добавить этот фильтр в web.xml
. О том, как это сделать, рассмотрите: Как мне использовать сервлет в моем приложении Grails?