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中获取的数据转换时需要保证数据的严谨性,无法直接跳转任意的数据格式,需要原路返回保证数据的严谨性

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值