作为一个Java EE初学者,在给网站添加验证码时,遇到了一个问题,经过几番尝试发现了其中的缘由。
1、问题的提出
编程中验证码类产生的随机数我将其事先存在Session中,接下来在另一个页面中按照验证码图片提示输入验证码中的数字、字母组合。这样以来在登录检验的时候,request.getParameter()与session.getAttribute()中的内容就要做比较。
接下来请大家注意
2、问题的介绍
request.getParameter()中获得的类型是String类型的。
session.getAttribute()中获得的并不是String类型,而是Object类型。
所以这就需要进行类型转换:
String yzm1=request.getParameter("yzm"); String yzm2=(String)session.getAttribute("random"); System.out.println(yzm1); System.out.println(yzm2); if(!yzm1.equals(yzm2)) response.sendRedirect("default.jsp"); else if(uid==null||request.getParameter("password")==null){ response.sendRedirect("default.jsp"); }else{ 。。。 。。。 |
登录的时候一直进入不了系统,一直在default.jsp页面中。即上表代码中的红色字体代码一直被认为是true。yzm1与yzm2的值居然不一样。
3、问题的解决
yzm1与yzm2的长度测试过时一样的,被输出流输出的时候是一样的,这只能说明它们是类型不一样,即session.getAttribute()的类型没有被转换成String类型。
1)方法一:因为此处session中的这个属性值一定不是null,所以可以使用toString()方法。
即:String yzm2=session.getAttribute("random").toString();
2)方法二:还可以使用String.valueOf(Object)方法。
即:String yzm2=String.valueOf(session.getAttribute("random"));
使用上面两种方法的一种酒可以解决。不过最好使用第二种。关于类型转换的详细介绍上一篇日志介绍的很清楚。