DispatcherServlet中url 配置 和 .地址的区别

DispatcherServlet中url 配置 / 和 *.地址的区别

1.  <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>*.地址</url-pattern>
    </servlet-mapping>
    
    当我们请求后台时,先到tomcat,然后再到DisPatcherServlet,Tomcat中有一个默认的Servlet
     <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>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern> 表示静态资源和未映射的请求都由这个default处理
    </servlet-mapping>
    
    这个DefaultServlet的描述是这样的
    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).
(所有web应用程序的默认servlet,服务静态

资源。它处理所有未映射到其他服务器的请求

带有servlet映射的servlet(在这里或您自己的应用程序中定义

网站.xml文件))  意思是如果我们没在自己的Servlet中配置请求,所有的请求都由tomcat来处理,tomcat不会拦截静态资源



2.<servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/</url-pattern>  
    </servlet-mapping>
      
    当我们配置Url为/,所有请求tomcat中的DefaultServlet不会对发送过来的请求进行处理,交给我们自己配置的Servlet进行处理,但是这样会导致一个问题出现,静态资源会被拦截,我们无法访问静态资源,为什么会出现这种情况呢?因为Tomcat中DefaultServlet对静态资源进行了配置
    
     /**
     * Process a GET request for the specified resource.
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet-specified error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws IOException, ServletException {

        // Serve the requested resource, including the data content
        serveResource(request, response, true, fileEncoding);
        //由于 serveResource方法源码过长,我就不粘贴了
    }
    
    而我们自己的Servlet没有对静态资源进行配置,所以我们访问不到,我们只需要在springmvc的配置文件中加入
    <!--配置静态资源不拦截-->
    <mvc:default-servlet-handler/>
    <!--配置注解驱动-->
    <mvc:annotation-driven/>
    
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值