2011-05-07 47 views
0

我爲我的Java EE應用程序編寫了一個簡單的Front Controller。這個控制器攔截所有的URL,將它們重定向到正確的類中相應的方法。如何使用我的前端控制器配置tomcat的web.xml

一個典型的網址如下:http://domain.tld/appName/Controller/method

我此刻面臨tomcat的3個問題:

  1. 如果我嘗試訪問我的基本URL,http://domain.tld/appName/(帶或不帶結束斜槓),我的前端控制器沒有被調用,我得到了一個404.
  2. 如果我嘗試訪問這樣的url:domain.tld/appName/Controller/method /(註釋結尾斜槓)相同東西比第一點。但沒有結束斜線它工作正常。
  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> 
+0

我找到了解決所有問題的解決方案。我重寫了前端控制器以獲得更好的路由支持,現在一切正常。 web.xml不再包含靜態文件支持。 – DevAntoine 2011-05-08 19:34:21

回答

0

正如評論所說,我FrontController是有點難看。 正確地重寫它使用了相同的web.xml。

1

這個第一個servlet之前添加到您的web.xml文件:

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