SpringMVC访问静态资源(springboot访问webapp下静态资源)

boyanx3天前技术教程4

有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等)。其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径

<servlet>
        <servlet-name>spmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
        
    <servlet-mapping>
        <servlet-name>spmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

上面代码中的<url-pattern>/</url-pattern>相当于拦截项目中所有请求,这样就造成无法访问静态资源文件


解决方法一:在springmvc-web.xml中添加资源映射

<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
  • mapping:映射,两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
  • location:本地资源路径,注意必须是webapp根目录下的路径

这样我们就可以直接访问该文件夹下的静态内容了,如下路径:
http://localhost:8090/firstapp/images/cookie.pnghttp://localhost:8090/firstapp/js/jquery-1.11.2.js

WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

当然,你非要放在WEB-INF中,则必须修改resources映射,配置文件中代码如下

<resources mapping="/js/**" location="/WEB-INF/js/" />


解决办法二:使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

  • 在spring-mvc.xml中启用默认Servlet
<mvc:default-servlet-handler/>
  • 修改web.xml文件,且下面的代码必须在DispatcherServlet的前面
<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>*.js</url-pattern>    
    <url-pattern>*.css</url-pattern>    
    <url-pattern>/assets/*"</url-pattern>    
    <url-pattern>/images/*</url-pattern>    
</servlet-mapping>


解决办法三:将DispatcherServlet的URL映射改成*.do的形式,这样在访问静态资源文件就不会被拦截到


<servlet>
    <servlet-name>spmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc-web.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>
        
<servlet-mapping>
     <servlet-name>spmvc</servlet-name>
     <url-pattern>*.do</url-pattern>
</servlet-mapping>
标签: todomvc

相关文章

太牛了!腾讯T9耗时69天整理出最全架构师进阶核心知识点笔记

俗话说的好:每一个程序员应该都想着如何快速提升自己(反正我是这样想的),从程序员进阶到架构师再到技术专家再到CTO 。当然这其中需要大量的知识储备,是一个不断学习的过程,话不多说下面我直接上图。Jav...

Java单元测试浅析(JUnit+Mockito)

作者:京东物流 秦彪1. 什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1) 单元测试: 针对计算机程序模块进行输出正确性检验工作...

ToDoList 8.3.3.0是一个易于使用但复杂的待办事项列表管理器

ToDoList 8.3.3.0是一个易于使用但复杂的待办事项列表管理器,可以帮助您组织和跟踪常规或项目相关的任务。它支持多级子任务、笔记(纯文本或富文本)、任务图标、文件链接、时间追踪、任务提醒等功...

SpringBoot 自动装配原理详解(spring boot的自动装配原理)

前言使用过 Spring 的小伙伴,一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配置,我们在开启某些 Spring 特性或者引入第三方依赖的时候,还是需要用 XML 或...

Vue3.6 从响应式突破到 Rolldown 未来蓝图,全新体验来袭!

作全球规模领先的免费 Vue.js 线上盛会 ——Vue.js Nation 2025,于 1 月 29 - 30 日盛大开启,超 20,000 名开发者齐聚 “云端”,共探 Vue.js 及其生态的...

DDD四层架构和MVC三层架构的个人理解和学习笔记

DDD的全称为Domain-driven Design,即领域驱动设计,从名字上就可以看出这里的核心就是Domain即领域。与MVC的区别DDD四成架构中的要素与传统三层架构还是挺相似的:用户界面层U...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。