刚开始学springmvc的时候老是弄不清楚为什么写"/“和”/※"的区别,只听说要用 / ,然后访问静态资源又出现页面404, 这到底是怎么回事啊, 为什么jsp能访问了,而我的html不能访问(这里先不讲springmvc配置一下就可以访问静态资源) 就这样过了没多久出现的事情就越来越多,于是就想起了还是去看看 / 和 /※到底有什么区别把
首先先看一 /和 /*程序运行之后效果
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这是访问/的样子,成功访问了jsp
||
||
\ /
下面来访问一下静态资源以html为例子吧:
意料之中,出现了404
*==========================================
**
再来看一下拦截/
可以看见/*不仅拦截 静态资源而且还要拦截jsp,那么这是怎么回事?
接下来就让我们一起看看为什么吧
这还要从tomcat的web.xml说起我把它主要的配置截取一下
<!-- The default servlet for all web applications, that serves static -->
<!-- resources. It processes all requests that are not mapped to other -->
<!-- servlets with servlet mappings (defined either here or in your own -->
<!-- web.xml file). This servlet supports the following initialization -->
<!-- parameters (default values are in square brackets): -->
/**以上是对这个DefaultServlet的说明,意思就是它用来处理静态请求,它将处理你自己写的web.xml中没有映射到的请求,自然静态资源归他处理了*/
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
//这里是拦截/的那么我们在自己的web.xml中也是拦截/,那么这里的就会失效了为什么jsp还可以访问呢?
//不急继续看下面它还有一个配置:
<!--this servlet is mapped to the URL pattern "*.jsp".-->
//就是说它用来映射*.jsp的
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
//这里就可以解释为什么我们拦截了/但是他的jsp还能正常访问了,因为它的JspServlet还可以映射到jsp所以就在我们自己的web.xml中就可以访问jsp了
**至于/*请求在tomcat中没有配置,它代表了拦截所有的请求相当于覆盖了DefaultServlet和JspServlet所以所有的请求都会被拦截了,然后都会交给DispatcherServlet处理, 然后DispatcherServlet发现它什么都处理不了就只好跳转页面404了, 所以说实际上处理动静态资源还是tomcat在处理,DispatcherServlet只是负责中间找到资源告诉tomcat让他来处理
大神们别喷我,我只是一个小白