SpringMVC静态资源引用失效问题解决(不含原理解释)

前言:我自己也是刚学Spring MVC不久,解决方案是自己摸索出来的,原理我也不知道;配置文件中已经有如下配置,但还是失效

<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />

有其他解决方案或者知道原理的大佬欢迎在评论中提出 ~互相学习 ~

问题:

1.绝对路径无效

图片位置截图:
在这里插入图片描述
绝对路径方式:

<img src="C:\Users\w\Desktop\1\1.png" alt="picture">

页面获取不到:(不是在c盘的问题,其他盘我也试过了)
在这里插入图片描述

2.相对路径无效

图片位置截图:
在这里插入图片描述
相对路径方式(该jsp页面在WEB-INF/jsp下,确定路径正确):

<img src="../img/11.png" alt="picture">

页面同样获取不到:
在这里插入图片描述

放在WEB-INF外面也是同样获取不到:

在这里插入图片描述

<img src="../../img/33.png" alt="picture">

在这里插入图片描述

解决方案:

将图片存在这个位置(web/img),注意是在WEB-INF的外面
在这里插入图片描述
将引用的路径改为:/项目名称/img/图片名
或者改为:${pageContext.request.contextPath}/img/图片名

当然你img有没有和叫啥名字无所谓~

<img src="/SpringMVC2_war_exploded/img/33.png" alt="picture">
<img src="${pageContext.request.contextPath}/img/33.png" alt="picture">

页面获取成功:
在这里插入图片描述

补充:

1.css和js

这里只讲了图片显示不出的问题,css和js的引用失效同理。
把包放在web的下面,WEB-INF的外面:
在这里插入图片描述

引用的路径修改为:

<link href="/SpringMVC2_war_exploded/js/.....">
<link href="${pageContext.request.contextPath}/js/.....">

这样的格式就行了。

2.图片的名字最好没有除了"."的特殊字符!

如果你打算把图片在前端使用文件上传,然后把图片名存在数据库中,或者存在哪。而图片名里有特殊字符,文件上传后的fileName:(文件上传这里不做赘述)

String fileName=file.getOriginalFilename();

也是包含了特殊字符的!!!

会有啥问题?

如果直接在前端用这样的代码 直接把 路径和文件名 取出来是获取不到图片的!!(路径后面已经额外加了一个‘/’了,没有问题)

<img src="<%=picture.getPath() + picture.getName()%>" alt="picture" height="100px" width="200px">

原因如下:
如果图片名称为: ]51_P__@`TLJ$165_82Y[PD.png
用上面的代码你得到的是:

/SpringMVC2_war_exploded/img/]51_P__@`TLJ$165_82Y[PD.png

但是!

在url上,部分特殊字符是要转义的!!想了解如何转义的可自行百度。

所以就有两种解决方案:
一:将特殊字符转义后访问
二:不允许图片名含有除了"."的特殊字符

我个人偏向第二种,第一种的方法可以自行查询。这里贴一下我过滤特殊字符的方法:

//正则表达式,过滤除了"."的特殊字符
String regEx = "[ _`~!@#$%^&*()+=|{}':;',\\[\\]<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";
Pattern p = Pattern.compile(regEx);
assert fileName != null;
//fileName为文件名
Matcher m = p.matcher(fileName);

if (!m.find()){
//不含特殊字符
    return true;
}
else {
//含有特殊字符
    return false;
}

如果想要图的话就拿去吧~

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值