我为我的 Java EE 应用程序编写了一个简单的前端控制器。此控制器拦截所有 url 以将它们重定向到正确类中的相应方法。
典型的 url 如下所示:http://domain.tld/appName/Controller/method
我目前面临 3 个关于 tomcat 的问题:
- 如果我尝试访问我的基本 url,http://domain.tld/appName/(带有或不带有结尾斜杠),我的前端控制器不会被调用并且我有一个 404。
- 如果我尝试访问这样的 url:domain.tld/appName/Controller/method/(备注结束斜杠)与第 1 点相同。但没有结束斜杠它可以正常工作。
- 最后,由于我的所有请求都路由到我的前端控制器,我必须在我的 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>