web验证码实现

1、创建util工具类CheckCodeServlet

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

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

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CheckCodeServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("service...");
		//生成一个消息头content-type,告诉浏览器服务器
		//返回的数据类型是一个jpg格式的图片。
		response.setContentType("image/jpeg");
		// 图片的内存映像
		BufferedImage image = new BufferedImage(60, 20,
				BufferedImage.TYPE_INT_RGB);
		// 获得画笔对象
		Random r = new Random();
		Graphics g = image.getGraphics();
		g.setColor(
				new Color(r.nextInt(255), r.nextInt(255), 
						r.nextInt(255)));
		g.fillRect(0, 0, 60, 20);
		g.setColor(new Color(0,0,0));
		String number = String.valueOf(
				r.nextInt(99999)); 
		//存入session中
		HttpSession session=request.getSession();
		session.setAttribute("checkcode", number);
		g.drawString(number, 5, 15);
		g.drawLine(r.nextInt(60),r.nextInt(20),
				r.nextInt(60),r.nextInt(20));
		g.drawLine(r.nextInt(60),r.nextInt(20),
				r.nextInt(60),r.nextInt(20));
		g.drawLine(r.nextInt(60),r.nextInt(20),
				r.nextInt(60),r.nextInt(20));
		g.drawLine(r.nextInt(60),r.nextInt(20),
				r.nextInt(60),r.nextInt(20));
		
		// 压缩成jpeg格式
		OutputStream os = response.getOutputStream();
		JPEGImageEncoder encoder = 
			JPEGCodec.createJPEGEncoder(os);
		// 把BufferedImage对象中的图像信息编码后
		// 向创建该对象(encoder)时指定的输出流输出
		encoder.encode(image);
		System.out.println(image);
	}

}

2、action实现

 /**
     * 验证用户登录后台
     * @return
     */
    @RequestMapping(value="login")  
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	String path=request.getRequestURL().substring(0,31);
    	System.out.println(path);
    	// 获取存放在session中的验证码
    	//通过session获取图片的值
        HttpSession sessionn=request.getSession();
        String checkcode=(String)sessionn.getAttribute("checkcode");
        // 获取页面提交的验证码
        String inputCode = request.getParameter("code");
        request.setCharacterEncoding("utf-8");
        //接收参数
        String userName = request.getParameter("userName");
        String userPwd =request.getParameter("userPwd");
        if(userName==""||userPwd==""){
        response.getWriter().print("<script>alert('请输入用户名和密码');</script>");
        }else if(!inputCode.equals(checkcode)){
        	System.out.println("验证码错误!请重新输入");
        	//登陆失败,请求重定向
            response.sendRedirect(request.getContextPath());
        }else{
        	 User us=new User();
             if(!userName.equals("")){
             	us.setUname(userName);
             }
             if(!userPwd.equals("")){
             	us.setUpass(userPwd);
             }
             //查询数据库用户是否存在
     		List<User> list=user.findselectAll(us);
             //判断登陆是否成功
             if(list.size()==1) {
                 //登陆成功
                 //创建session对象
                 HttpSession session = request.getSession();
                 //把用户数据保存在session域对象中
                 session.setAttribute("loginName", userName);
                 //跳转到用户主页
                 System.out.println(request.getContextPath()+"/loginOK.do");
                 System.out.println("---------------------------------------");
                 System.out.println(path+"/loginOK.do");
                 System.out.println(request.getContextPath()+"/loginOK.do");
                 System.out.println("---------------------------------------");
                 response.sendRedirect(path+"/loginOK.do");
             } else {
            	  System.out.println("登录失败,请检查用户名、密码是否正确!");
                 //登陆失败,请求重定向
                 response.sendRedirect(request.getContextPath());
             }
        }
       
    }

3、jsp页面调用

<form  id="userAdd" method="post">
				<input id="userName" name="userName" type="text" value="用户名"onfocus="this.value=''" onblur="if(this.value==''){this.value='用户名'}"> 
				<input id="userPwd"  name="userPwd" type="text" value="密码" onfocus="this.value=''" onblur="if(this.value==''){this.value='密码'}"> 
				<input id="code"  name="code" style="width: 50%" type="text" value="验证码" onfocus="this.value=''" onblur="if(this.value==''){this.value='验证码'}">
				<img style="width: 70px;height: 35px;" src="checkcode" id="img1" onclick="document.getElementById('img1').src='checkcode?' + Math.random();"/>
				<input value="登录" style="width:100%;" type="submit" onclick="userAdd()">
			</form>

4、效果图


备注:如有问题,请留言



猜你喜欢

转载自blog.csdn.net/weixin_39559301/article/details/80907139