如何用自定义servlet覆盖Tomcat自己的缺省servlet(default)?

新手上路,请多包涵

场景:自定义一个MyDefaultServlet,其urlPatterns = "/"; 处理请求时,仅用request.getRequestDispatcher("/test.html").forward(request, response);
test.html是存在的。代码的目的是想搞清楚缺省servlet。
问题:
1、此时在容器里,default(容器缺省servlet)和MyDefaultServlet这两个servlet都映射到"/",为什么这是可以的?
2、代码执行时,会抛出java.lang.StackOverflowError,这个好理解,问题是如何避免MyDefaultServlet处理html这些静态资源?我的办法是用context.getNamedDispatcher("default").forward(request,response);交给容器缺省servlet(default)去处理,测试可行。有没有更简洁的办法?在web.xml中

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

经测试:default和MyDefaultServlet都会发生作用,似乎是有顺序,先交给default,如果default能处理,就不会交给MyDefaultServlet,如果default处理不了,就交给MyDefaultServlet。但是,当把web.xml中的default的<servlet-mapping>注释掉,就只有MyDefaultServlet会起作用,似乎是容器缺省servlet(default)需要“激活”。
3、上述测试难以得到一个一致的理解,缺省servlet(default)的机制咋理解?

谢谢!

阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题