Как настроить tomcat web.xml с моим передним контроллером

Я написал простой Front Controller для своего приложения Java EE. Этот контроллер перехватывает все URL-адреса, чтобы перенаправить их на соответствующий метод в нужном классе.

Типичный URL-адрес выглядит следующим образом: http://domain.tld/appName/Controller/method.

На данный момент я столкнулся с 3 проблемами с tomcat:

  1. Если я попытаюсь получить доступ к моему базовому URL-адресу, http://domain.tld/appName/ (с или без косая черта в конце), мой фронт-контроллер не вызывается, и у меня ошибка 404.
  2. Если я попытаюсь получить доступ к URL-адресу, подобному этому: domain.tld/appName/Controller/method/ (обратите внимание на косую черту в конце), то же самое, что и в пункте номер 1. Но без косой черты в конце все работает нормально.
  3. Наконец, поскольку все мои запросы направляются на мой передний контроллер, я должен определить все статические файлы, которые будут обслуживаться сервлетом по умолчанию, в моем файле web.xml. Менее сдерживающее и уродливое решение было бы неплохо.

Вот мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <servlet>
        <servlet-name>FrontController</servlet-name>
        <servlet-class>controllers.FrontController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FrontController</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
</web-app>

person DevAntoine    schedule 07.05.2011    source источник
comment
Я нашел решение всех своих проблем. Я переписал фронт-контроллер, чтобы он лучше поддерживал маршрутизацию, и теперь все работает нормально. Web.xml больше не поддерживает статические файлы.   -  person DevAntoine    schedule 08.05.2011


Ответы (2)


Добавьте это в свой файл web.xml перед первым сервлетом:

<welcome-file-list>
    <welcome-file>FrontController</welcome-file>
</welcome-file-list>
person jhon qco    schedule 06.05.2012

Как сказано в комментарии, мой FrontController был довольно уродливым. Правильное переписывание сделало свое дело с тем же web.xml.

person DevAntoine    schedule 16.05.2013