在Tomcat的E:\Tomcat\apache-tomcat-9.0.24\conf
下的web.xml文件有两个类:
一个类是DefaultServlet
,这个类的url-pattern=/
这个类是处理静态资源的(除了jsp和servlet外都是静态资源)
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
另一个类是JspServlet
,这个类的url-pattern=*.jsp
这个类是处理jsp资源的
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
而在我们web.xml中配置的DispatcherServlet
这个类中的url-pattern=/
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
所有的项目的web.xml都继承了Tomcat中的web.xml,如果我们的项目在web.xml中也配置了url-pattern=/
就相当于禁用了Tomcat的web.xml的url-pattern=/
即前端控制器的/
禁用了DefaultServlet中的/
,所以静态资源无效了,不能处理了。
那么为什么jsp
文件能处理呢?
因为我们只是禁用了DefaultServlet,但是并没有禁用JspServlet,所以仍然能处理jsp
文件。