Tomcat, Groovy and Clean Urls
-
22-09-2019 - |
Вопрос
Я пытаюсь пробежать в Tomcat с чистыми URL -адресами. Поскольку мои знания о картировании URL и фильтрах Tomcat довольно ограничены, я сталкиваюсь с кирпичной стеной.
Я хотел бы создать передний контроль под названием 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
Сценарий, который будет выполнен, где я могу выбрать остальную часть пути.
Решение
Я думаю, что главной проблемой здесь является ваше недоразумение в том, как работает оба сервлета. Итак, вот краткое объяснение:
- Когда вы описываете такое отображение, это указывает на то, что все URL -адреса, соответствующие шаблону «/*», будут отправлены в класс GroovyServlet. При таком общем шаблоне все URL -адрес являются действительными, что может привести к некоторым проблемам, например, при попытке получить доступ к изображениям, стилям и т. Д.
- Groovyservlet уже диспетчер. Если вы посмотрите на это исходный код, вы увидите, что из-за его наследования он просто проверит, что заданный путь существует в каталоге «/web-inf/groovy/». В вашем примере это означает, что он ищет файл "/web-inf/groovy/index.groovy/test"
- Если этот файл существует, он выполняется как отличный скрипт (с некоторым декоратором), и результат возвращается с типом MIME «Text/HTML».
Теперь я думаю, что вы можете четко понять, почему это не работает на вас. Я бы предпочел предложить вам два других подхода для достижения цели: