zoukankan      html  css  js  c++  java
  • 第三节:处理静态资源

    一、静态资源访问问题

      当我们在 JSP 页面中引入 CSS文件、JS 文件,但是却不能识别,这是为什么呢?

      页面中引入资源:

    // 引入的文件
    <link rel="stylesheet"  href="${pageContext.servletContext.contextPath  }/css/index_work.css">
    <script type="text/javascript"  src="${pageContext.servletContext.contextPath  }/js/jquery-1.8.2.min.js"></script>

      

       直接从浏览器地址栏访问 jQuery 文件:

    http://localhost:8080/js/jquery-1.8.2.min.js
    

      

      发现jQuery库文件不起作用:

      

       控制台报错:

    二、分析

      为什么会有这样的问题?
        优雅的 REST 风格的资源 URL 不希望带 .html 或 .do 等后缀,若将 DispatcherServlet 请求映射配置为 /,则 SpringMVC 将捕获 WEB 容器的所有请求,包括静态资源的请求,而此时 SpringMVC 会将他们当成一个普通的请求处理,因为找不到对应处理器将导致报错

    三、解决方案

      步骤一:在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler />
      步骤二:配置上面的标签后,对控制器的请求就不好使了,还需要配置 <mvc:annotation-driver />

      SpringMVC 的配置文件:

        <!--
         配置Tomcat中默认的servlet,DefaultServlet
         注意:当DefaultServlet所设置的<url-pattern>的值和开发人员所配置的servlet的<url-pattern>相同,以开发人员所配置的servlet优先
         作用:当客户端发送请求,由于DefaultServlet所设置的<url-pattern>的值和开发人员所配置DispatcherServlet的<url-pattern>都是/
              因此先通过DispatcherServlet处理请求,找该请求是否有相对应的处理器,有则处理,无则交给DefaultServlet处理
        -->
        <!--  默认前端控制器是拦截所有资源(除过jsp),js 文件就404了,要js文件请求是交给Tomcat来处理  -->
        <!--告诉SpringMVC,自己映射的请求就自己处理,不能处理的请求直接交给 Tomcat-->
        <!--静态资源能访问,动态映射的请求就不行-->
        <mvc:default-servlet-handler/>
    
        <!-- mvc驱动 SpringMVC 可以保证动态请求和静态请求都能访问-->
        <mvc:annotation-driven />

    四、关于 <mvc:default-servlet-handler /> 作用

      <mvc:default-servlet-handler /> 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler(Tomcat中的默认的Servlet),它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。
      一般 WEB 应用服务器默认的 Servlet 的名称都是 default
      若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显示指定。
     
      参考:CATALINA_HOME/config/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>
    
    该标签属性  default-servlet-name 默认值是 "default",可以省略。
    <mvc:default-servlet-handler/>
    如果不是,需要指定:
    <mvc:default-servlet-handler default-servlet-name="default"/>

    五、<mvc:annotation-driven /> 的作用后面讲解

  • 相关阅读:
    线性代数:矩阵行列式
    线性代数:逆变换
    线性代数:线性变换
    线性代数:零空间
    线性代数:向量乘法
    线性代数基础:向量组合
    线性代基础理论:向量
    线性代基础理论:矩阵
    SpringBoot 消费NSQ消息
    将Oracle中的数据放入elasticsearch
  • 原文地址:https://www.cnblogs.com/niujifei/p/15620079.html
Copyright © 2011-2022 走看看