第三节:静态资源问题


一、静态资源访问问题

  当我们在 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 的配置文件中配置   步骤二:配置上面的标签后,对控制器的请求就不好使了,还需要配置

  SpringMVC 的配置文件:

    
    
    
    
    <mvc:default-servlet-handler/>

    
    <mvc:annotation-driven />

四、关于  作用

   将在 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>defaultservlet-name>
         <servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
        <init-param>
            <param-name>debugparam-name>
            <param-value>0param-value>
        init-param>
        <init-param>
            <param-name>listingsparam-name>
            <param-value>falseparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>

该标签属性  default-servlet-name 默认值是 "default",可以省略。
<mvc:default-servlet-handler/>
如果不是,需要指定:
<mvc:default-servlet-handler default-servlet-name="default"/>

五、 的作用后面讲解