验证码

登录页面

登录页面

<%@ page contentType="text/html; charset=utf-8"%>


<%
  String path = request.getContextPath();
  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


  
    前台登录
    
    
      
  
  
    
用户名:        [用户注册]
密  码:        [返回首页]
       [返回首页]
${errorMessage}
             

生成验证码的servlet类

package com.servlets;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

public class CheckcodeServlet extends HttpServlet {

    private int width;//验证码的宽度
    private int height; //验证码的高度
    private int number;  //验证码的位数
    private String codes;  //验证码的内容     ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
    @Override
    public void init(ServletConfig config) throws ServletException {
        //从servlet的配置参数中获取设定验证码的宽高位数和验证码的内容  
        //比如这里就是从26个字母中随机选择其中的4个
        width = Integer.parseInt(config.getInitParameter("width"));
        height = Integer.parseInt(config.getInitParameter("height"));
        number = Integer.parseInt(config.getInitParameter("number"));
        //codes内容为26个字母   ABCDEFGHIJKLMNOPQRSTUVWXYZ   通过读取配置内容在servlet的xml中
        codes = config.getInitParameter("codes");
    }

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置我输出的格式,是一张图片的格式
        response.setContentType("image/jpeg");
        //创建了一个带缓冲功能的图片对象
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        //Graphics2D这个东西,相当于是一个画笔
        Graphics2D g = image.createGraphics();
        
        //给画笔添加颜色    这里画笔被填上白色墨水  用来画验证码的白色背景
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        
        //给画笔再添加黑色    这里用来画验证码的黑色边框
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, width-1, height-1);
        
        Random random = new Random();
        

        //这里根据验证码的总宽度来确定每个验证码应该占据的位置大小
        //比如一共四个验证码,宽度为13,高为6   x=3 y=2 则 A出现在坐标(1,2) B(4,2) C(7,2) D(10,2)
        int x = (width - 1) / number;
        int y = height -4;
        
        //验证码的内容,用来存在session中与用户登录时输入的验证码进行对比
        StringBuffer sb = new StringBuffer();
        
        //这里来随机生成4个字母
        for(int i=0; i

CheckcodeServlet的xml配置

 
        CheckcodeServlet
        com.servlets.CheckcodeServlet
        
            width
            44
        
        
            height
            20
        
        
            number
            4
        
        
            codes
            ABCDEFGHIJKLMNOPQRSTUVWXYZ
        
    

你可能感兴趣的:(验证码)