• (五)


    SpringMVC项目里, 若在JSP文件的相同目录下创建静态文件(HTML, CSS, JS, img等), 在浏览器中直接访问这些资源是不能像JSP文件一样访问到的:

     

     

     这是因为, 原本在tomcat的全局配置文件中, 是有一个默认servlet(全局servlet)可以来处理关于静态资源的请求的, url-pattern是 / :

     所以普通的servlet项目可以通过这个servlet来访问到静态资源, 但在springMVC中, 我们配置了 DispatcherServlet, 其url-pattern也是 /, 就覆盖了原来的 default servlet:

     而 DispatcherServlet 这个servlet在接收到请求后, 只会去找controller, 而不能处理静态资源请求. 这就导致了默认情况下springMVC不能处理静态资源请求.

    为解决这个问题, 一般有以下三种解决方案:

    一. 修改 DispatcherServlet 的 url-pattern

    比如将 / 修改为 *.action 或 *.do 等, 这样就可以使得 tomcat 的全局 servlet 继续工作从而以此处理静态资源的请求:

     但是如此, 原来能正常访问的 servlet 就不能正常访问了:

     这是因为, 我们修改了项目的前端控制器, 只有请求以 .action 结尾才会被处理, 所以需要修改请求方式:

     显然这样比较麻烦, 所以有了其他解决方案.

    二. DispatcherServlet 的 url-pattern 依然采用 /, 但追加配置

    在 mvc.xml 中追加配置: <mvc:default-servlet-handler/>

     这个配置会额外增加一个handler(controller类中的每一个方法都是一个handler), 且其 requestMapping 为: /**, 可以匹配所有请求, 但是优先级最低(注: /* 匹配任意单级路径, 如/a, /b等, /**匹配任意单, 多级路径, 如/a, /a/b/c..等), 所以如果其他所有的handler都匹配不上, 不会直接返回404, 而是会将请求转向该 /**, 恰好这个 handler 就是处理静态资源的处理方式: tomcat 中的 default servlet.

    由此, 我们可以按原来的方式顺利访问 servlet 和静态资源:

     

    三. 使用配置  <mvc:resources mapping="/html/**" location="/dir/"/>

    其中, mapping是访问路径, location是静态资源存放的路径, 按上例所示, 将会把 /html/** 中 /** 匹配到的内容, 拼接到 /dir/ 后, 即:

    http://.../html/a.html  --->  访问 /dir/a.html

    http://.../html/page/b.html  --->  访问 /dir/page/b.html

    如下例所示:

     配置 mvc:resources:

     访问URL及结果:

     按照这个逻辑, 我们可以把html文件, CSS文件, JS文件等放置到相应的目录下, 并按照相应的规则访问到其静态资源, 从而优化项目的文件结构.

  • 相关阅读:
    使用Docker搭建svn服务器教程
    VirtualBox上Centos7磁盘扩容
    下载CentOS6.5
    Ubuntu 防火墙常用配置操作(ufw)【适用于 Debian 及其衍生版---Linux Mint、Deepin 等】-转
    诺依/RuoYi开源系统搭建总结
    phpMyAdmin报错#1045
    EasyPHP(php集成环境)下载 v5.4.6官方安装版
    详解----memcache服务端与客户端
    linux 下nginx除了首页404的问题
    linux下禁止root远程登录和添加新用户
  • 原文地址:https://www.cnblogs.com/Ryan368/p/14119535.html
Copyright © 2020-2023  润新知