小编典典

如何使用我的前端控制器配置tomcat的web.xml

tomcat

我为Java EE应用程序编写了一个简单的Front Controller。该控制器拦截所有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>

阅读 349

收藏
2020-06-16

共1个答案

小编典典

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

2020-06-16