session绑定的验证码返回的是null

zhengjianhua7 2014-10-29 11:56:48
else if(action.equals("/login")){
//number1:用户提交的验证码
String number1=request.getParameter("number");
//number2:session对象上绑定的验证码
HttpSession session=request.getSession();
String number2=(String)session.getAttribute("number");
if(!number1.equalsIgnoreCase(number2)){
request.setAttribute("number_error", "验证码错误");
request.getRequestDispatcher("login.jsp")
.forward(request,response);
return;
}
//只有在验证码正确的情况下,才会比较用户名和密码是否正确
String username =
request.getParameter("username");
String pwd =
request.getParameter("pwd");
UserDAO dao = new UserDAO();
try {
User user = dao.findByUserName(username);
// System.out.println(user.getPwd()+",");
try {
if(user != null && user.getPwd().equals(MD5Util.encrypt(pwd.toUpperCase()))){
//绑订数据到session对象上,用于验证
session.setAttribute("user", user);
//登录成功,跳转到主功能页面
response.sendRedirect("list.do");
}else{
//登录失败,提示用户
request.setAttribute("login_error",
"用户名或密码错误");
request.getRequestDispatcher("login.jsp")
.forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
//将系统异常扔给容器来处理
throw new ServletException(e);
}
}





package web;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CheckcodeServlet extends HttpServlet {
private int WIDTH= 80;
private int HEIGHT= 30;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//一、绘图
//step1,创建一个内存映像对象(画布)
BufferedImage image =
new BufferedImage(WIDTH,HEIGHT,
BufferedImage.TYPE_INT_RGB);
//step2,获得画笔
Graphics g = image.getGraphics();
//step3,
Random r = new Random();
//step3,给画笔上一个随机的颜色
g.setColor(new Color(r.nextInt(255),
r.nextInt(255),r.nextInt(255)));
//step4,填充画布
g.fillRect(0, 0, WIDTH, HEIGHT);
//step5,在画布上绘图
// String number = r.nextInt(99999) + "";
String number ="";
// g.setColor(new Color(0,0,0));
for (int i = 0; i < 4; i++) {
g.setColor(new Color(r.nextInt(255),
r.nextInt(255),r.nextInt(255)));
int h=(int)(HEIGHT*0.3+(HEIGHT*0.7)*r.nextDouble());
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,h));
String str=getNumber(1);
number+=str;
g.drawString(str, i*WIDTH/5, h);
}
//将number 绑定到session上
HttpSession session =request.getSession();
session.setAttribute("number", number);

//step6,设置字体的大小、风格
// g.setFont(new Font(null,
// Font.ITALIC|Font.BOLD,20));
// g.drawString(number, 5, 22);
//加干扰线
for (int i = 0; i < 3; i++) {
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT),r.nextInt(WIDTH), r.nextInt(HEIGHT));
}
//二、压缩图片,输出
response.setContentType("image/jpeg");
OutputStream ops =
response.getOutputStream();
//write方法:将原始图片(image)使用
//指定的压缩算法(jpeg)进行压缩,然后
//使用指定的输出流(ops)输出。
ImageIO.write(image, "jpeg", ops);
ops.close();
}/*返回一个指定长度的字符串
要求从A~Z,0~9中随机选取字符
*/

private String getNumber(int size) {
Random r=new Random();
String strs="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"0123456789";
String number="";
for (int i = 0; i < size; i++) {
number+=strs.charAt(r.nextInt(strs.length()));
}

return number;
}

}

...全文
623 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
苹果树9 2014-11-06
  • 打赏
  • 举报
回复
我一般是将 生成的验证码后保存到session中。
zhengjianhua7 2014-11-06
  • 打赏
  • 举报
回复
断点追踪,程序没有跑到CheckcodeServlet中去
zhengjianhua7 2014-11-05
  • 打赏
  • 举报
回复
自己顶一下。。。
zhengjianhua7 2014-11-01
  • 打赏
  • 举报
回复
CheckcodeServlet 类的47行下面写个打印语句,System.out.println(“2222222222223”+number)打印的没有在控制台显示,怎么回事
scmod 2014-11-01
  • 打赏
  • 举报
回复
楼主是不是禁用cookie了?
wyx100 2014-11-01
  • 打赏
  • 举报
回复
引用 2 楼 u011564172 的回复:
你可以在CheckcodeServlet 类的47行下面写个打印语句,System.out.println(number);,看看是否给number赋值成功
zhengjianhua7 2014-11-01
  • 打赏
  • 举报
回复
还是生成的验证码是空的
snailjumpjump 2014-10-31
  • 打赏
  • 举报
回复

你这个地方写的有问题吧,看的方法,是想String str=getNumber(i)生成字符串,然后拼接的,但是寄传进去的是1,这样的话,str的值一直是空的,拼出来的number也是空的,下次要仔细啊
snailjumpjump 2014-10-31
  • 打赏
  • 举报
回复
你在登录页面能看到验证码吗?如果你登录页面能看到验证码,说明验证码生成成功了,是你放置在session中出问题了,或者在其他的地方将session的清掉了;如果登录页面没看到验证码,说明生成验证码的地方又问题,
Mr_JieLQ 2014-10-30
  • 打赏
  • 举报
回复
你可以在CheckcodeServlet 类的47行下面写个打印语句,System.out.println(number);,看看是否给number赋值成功
zhengjianhua7 2014-10-30
  • 打赏
  • 举报
回复
求救啊
zhengjianhua7 2014-10-30
  • 打赏
  • 举报
回复
我在第一个的第六行打印的number2的值是null

java.lang.NullPointerException
	at web.ActionServlet.service(ActionServlet.java:136)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)


1057053095 2014-10-30
  • 打赏
  • 举报
回复
额,你的验证码是个类文件,你的页面调用CheckcodeServlet这个类没有,让他对session里面的验证码初始化应该就有值了把

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧