request.getParameter()与session.getAttribute()类型比较

      作为一个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{
。。。
。。。
    注意上面的第二句语句,使用的是(String)类型强转,在接下来的两条输出语句中,输出的内容是完全一致的。但是奇怪的是在

登录的时候一直进入不了系统,一直在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"));

使用上面两种方法的一种酒可以解决。不过最好使用第二种。关于类型转换的详细介绍上一篇日志介绍的很清楚

你可能感兴趣的:(技术学习)