1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Servlet中关于Session数据存储遇到的数据转换问题

Servlet中关于Session数据存储遇到的数据转换问题

时间:2020-03-26 15:27:28

相关推荐

Servlet中关于Session数据存储遇到的数据转换问题

首先我们先通过前端jsp传值给后台servlet

代码:

<a href = "servlet/S1?number=1">数据转换</a>

我们向servlet中传一个int类型的名为number值为1的数据

然后我们从servlet中获取

代码:

String number= request.getParameter("number");

注意!

这个是时候我接收的到的是字符串类型的数据,而不是int类型

如果这个时候直接存储到Session中

代码:

session.setAttribute("number", number);

当我们再从Session中拿去该数据,并把其在转换为int类型是会出现问题

代码:

int number = (Integer)session.getAttribute("number");

问题:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

这个时候告诉我们java.lang.ClassCastException: java.lang.String无法强制转换为java.lang.Integer

那么该问题如何解决

有两种解决方法:

第一种:原路返回

注意的是当我们从前端获取数据的时候已经把int类型变成了String类型,然后我们如果直接存储到Session中,再从Session中拿出来时已经变成Object类型,如果这个时候直接强转Integer类型是会出现上述异常的

让我们来简单看一下number都经历了什么样的格式转变:

int —— > String —— > Object

上述过程是从最一开始的前端到我们从Session中获取的过程

而我们如果想获取到的数据还是int类型我们就需要原路返回

注意:原路返回

也就是重新将Object转成String类型才能再转换成int

Object—— > String —— > int

解决方法:

就是在我们获取到Session数据后先转成String类型再转int

代码:

String numberString = session.getAttribute("number").toString();int number = Integer.parseInt(numberString);

这样就可以使用了

第二种:提前转换

通过数据转换经历的过程:

int —— > String —— > Object

实际上还是要用到原路返回的原理

当我们转换成Sting类型的时候也就是我们刚从前端获取数据的后,

可以直接将String类型转变成int类型

代码:

String numberString = request.getParameter("number");int number = Integer.parseInt(numberString);

然后我们在获取Session中数据后可以直接转换成int类型

代码:

int number = (Integer)session.getAttribute("number");

这个过程数据经历过程是这样的:

int —— > String —— > int —— > Object —— > int

我们可以看到实际上当我们从Object类型转换时其实也是原路返回,但是原路返回的时候正好经过int 类型所以可以直接转换

总结:

从Session中获取的数据转换时需要保证数据的严谨性,无法直接跳转任意的数据格式,需要原路返回保证数据的严谨性

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。