为什么 jsp页面获取到的dataurl会变成unknow
Posted ABKing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么 jsp页面获取到的dataurl会变成unknow相关的知识,希望对你有一定的参考价值。
我的一个项目中,是把图片以dataurl的方式存入数据库中的,用户登录后,通过读取数据库中的信息来显示头像等相关信息。
可是,发现一个比较奇特的现象,那就是dataurl会变成unknow
如下图:
src后面直接显示了unknow
首先得明白一点,unknow的意思就是 空 ,也就是说,这里并没有获取到值
可是经过我的debug调试,发现添加入session中的user是有img属性值的!
也就是说,问题绝对出现在jsp页面里
在我的jsp页面中,获取img的写法是这样的:
1 <img class="layui-upload-img" id="picture" src="${user.img}" style="border-radius: 30px;width:60px;height:60px;">
貌似看起来挺正常。。。。
突然,我的脑子里回忆起著名的程序员 ABKing 曾经说过,jsp有四大作用域
- page作用域 (表示当前页面) ----->pageScope (属性范围在EL中的名称)
- request作用域 (表示一次客户端请求) ----->requestScope (属性范围在EL中的名称)
- session作用域 (表示一次会话) ----->sessionScope (属性范围在EL中的名称)
- application作用域 (表示整个Web应用的全局变量) ----->applicationScope (属性范围在EL中的名称)
如果我没有限定作用域的话,会自动从page开始查找,依次向后。。。
按理说,它应该会自动找到session作用域才对。。。问题到底出在哪里?
一番查找,我发现在Controller层中,对于传入的参数,我直接使用了User
1 @PostMapping("auth") 2 public String auth(HttpSession session, User user){ 3 ....... 4 ....... 5 }
也就是说,从登陆页面传入的username和password两个字符串,经过User类的构造方法,自动创建了一个user对象
并且!这个对象在session域之前,也就是page作用域或request作用域中
所以!当我没有指定session作用域时,系统从page域开始查找,已经查找到了user!而此时,img为空!
如何解决这个问题呢?加上作用域即可:
1 <img class="layui-upload-img" id="picture" src="${sessionScope.user.img}" style="border-radius: 30px;width:60px;height:60px;">
至此,问题已经解决。
那么,我想知道,通过构造方法传递的user对象,到底处于什么作用域中
--------------------------------------------
验证的方法很简单,在登陆页面传入的参数多增加一个img即可,参数值赋为123
在主页面中,作用域依次改为pageScope和requestScope
最终发现,它的作用域为requestScope!
以上是关于为什么 jsp页面获取到的dataurl会变成unknow的主要内容,如果未能解决你的问题,请参考以下文章
jsp登录页面,展示错误信息,刷新页面后错误依然存在解决方案