Как настроить web.xml tomcat с помощью моего Front Controller - PullRequest
0 голосов
/ 07 мая 2011

Я написал простой 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>

Ответы [ 2 ]

2 голосов
/ 06 мая 2012

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

<welcome-file-list>
    <welcome-file>FrontController</welcome-file>
</welcome-file-list>
0 голосов
/ 16 мая 2013

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

...