美文网首页
0519-web:静态资源访问

0519-web:静态资源访问

作者: 小咕咕coco | 来源:发表于2020-05-19 11:13 被阅读0次

    maven+jetty/tomcat+spring mvc

    1. 用web服务器的defaultServlet
    • 在web配置中拦截url(写在DispatcherServlet前, 就不进入Spring了
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.jpg</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.js</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.css</url-pattern>
      </servlet-mapping>
      
    • 注意不同的服务器默认servlet名是不一样的,比如resin的默认服务器就是resin-file
    2. spring mvc的mvc:resources
    <mvc:resources mapping="/images/**" location="/images/" />   
    // url"/images /**"映射到 ResourceHttpRequestHandler 进行处理
     // location指定静态资源的位置,默认根目录为src/main/webapp/
    
    3. spring mvc中使用<mvc:default-servlet-handler/>
    • <mvc:default-servlet-handler/>会把 "/**" url,注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource
    • DefaultServletHttpRequestHandler 处理并返回
      (DefaultServletHttpRequestHandler 就是使用各个 Servlet 容器自己的默认 Servlet.
    补充:多个HandlerMapping的执行顺序问题:

    spring按属性值升序执行

    • DefaultAnnotationHandlerMapping 的 order 属性值是:0
    • <mvc:resources/ >自动注册的 SimpleUrlHandlerMapping:2147483646
    • <mvc:default-servlet-handler/>自动注册的 SimpleUrlHandlerMapping :2147483647
    1. 当访问一个 a.jpg 图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,我们没有叫 a.jpg 的 Action。
    2. 再按 order 值升序继续找
    3. 最后一个 SimpleUrlHandlerMapping 是匹配 "/**" 的,所以一定会匹配上,再通过各个 Servlet 容器自己的默认 Servlet响应图片
    卡bug:jetty图片一直显示失败

    jetty加载静态文件一直500,搞半天换了个新版本好了……

    知识点积累:

    • 图片的加载都是静态资源的访问
    • webAppSourceDirectory:静态资源位置,默认src/main/webapp,可以在spring中修改,(WEB-INF/statics

    相关文章

      网友评论

          本文标题:0519-web:静态资源访问

          本文链接:https://www.haomeiwen.com/subject/hgbvohtx.html