为什么 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登录页面,展示错误信息,刷新页面后错误依然存在解决方案

jsp中登陆成功后怎样在主页中显示用户,又在主页登陆两个字变成用户名的

servlet获取jsp页面的日期值

为啥在jsp中提交数据后会显示的是问号

jsp页面中,如何使用jquery拼接json格式的数据

jsp中怎么去掉url中自己的项目名字