如何使用我的Front Controller配置tomcat的web.xml

时间:2011-05-07 11:58:35

标签: apache tomcat routing front-controller

我为我的Java EE应用程序编写了一个简单的Front Controller。该控制器拦截所有URL以将它们重定向到正确类中的相应方法。

典型的网址如下所示:http://domain.tld/appName/Controller/method

我现在面临着与tomcat有关的3个问题:

  1. 如果我尝试访问我的基本网址http://domain.tld/appName/(有或没有结尾斜线),我的前控制器没有被调用,而且我有404。
  2. 如果我尝试访问这样的URL:domain.tld / appName / Controller / method /(注释结束斜杠)与点号1相同的东西。但没有结束斜杠它可以正常工作。
  3. 最后,由于我的所有请求都路由到我的前端控制器,我必须在我的web.xml中定义要提供给默认servlet的所有静态文件。一个不那么矛盾和丑陋的解决方案会很好。
  4. 这是我的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 个答案:

答案 0 :(得分:2)

在第一个servlet之前将其添加到web.xml文件中:

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

答案 1 :(得分:0)

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