我爲我的Java EE應用程序編寫了一個簡單的Front Controller。這個控制器攔截所有的URL,將它們重定向到正確的類中相應的方法。如何使用我的前端控制器配置tomcat的web.xml
一個典型的網址如下:http://domain.tld/appName/Controller/method
我此刻面臨tomcat的3個問題:
- 如果我嘗試訪問我的基本URL,http://domain.tld/appName/(帶或不帶結束斜槓),我的前端控制器沒有被調用,我得到了一個404.
- 如果我嘗試訪問這樣的url:domain.tld/appName/Controller/method /(註釋結尾斜槓)相同東西比第一點。但沒有結束斜線它工作正常。
- 最後,因爲我的所有請求都是路由到我的前端控制器,所以我必須在我的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不再包含靜態文件支持。 – DevAntoine 2011-05-08 19:34:21