web.xml中"/"和"/*"的区别

刚开始学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中没有配置,它代表了拦截所有的请求相当于覆盖了DefaultServletJspServlet所以所有的请求都会被拦截了,然后都会交给DispatcherServlet处理, 然后DispatcherServlet发现它什么都处理不了就只好跳转页面404了, 所以说实际上处理动静态资源还是tomcat在处理,DispatcherServlet只是负责中间找到资源告诉tomcat让他来处理

大神们别喷我,我只是一个小白

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值