场景:自定义一个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)的机制咋理解?
谢谢!