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