【问题标题】:How to configure tomcat's web.xml with my Front Controller如何使用我的前端控制器配置 tomcat 的 web.xml
【发布时间】:2011-08-20 17:20:45
【问题描述】:

我为我的 Java EE 应用程序编写了一个简单的前端控制器。这个控制器拦截所有的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 中定义所有要提供给默认 servlet 的静态文件。一个不那么限制和丑陋的解决方案会很好。

这是我的 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>

【问题讨论】:

  • 我找到了所有问题的解决方案。我重写了前端控制器以获得更好的路由支持,现在一切正常。 web.xml 不再包含静态文件支持。

标签: apache tomcat routing front-controller


【解决方案1】:

将此添加到您的 web.xml 文件中,在第一个 servlet 之前:

<welcome-file-list>
    <welcome-file>FrontController</welcome-file>
</welcome-file-list>

【讨论】:

    【解决方案2】:

    正如评论中所说,我的 FrontController 有点丑。 用相同的 web.xml 正确地重写它就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 2017-01-27
      • 1970-01-01
      • 2014-02-12
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多