这是一个登陆页面,有登陆验证和验证码的功能
(1)生成验证码的servlet:
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.File;
import java.io.IOException;

public class YzmServlet extends HttpServlet {
//设置验证码图片的宽度
private static final int WIDTH = 100;
//设置验证码的高度
private static final int HEIGHT = 80;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                    //产生一张图片
        BufferedImage image=new BufferedImage(Width,Height,BufferedImage.TYPE_INT_RGB);
    response.setHeader("Pragram","no-cache");
    response.setHeader("Cache-Control","no-catch");
    response.setDateHeader("Exprires",0);
    Graphics g=image.getGraphics();
            //设置背景颜色
    g.setColor(Color.WHITE);
            //填充图片
    g.fillRect(0,0,Width,Height);
            //设置验证码颜色
    g.setColor(Color.RED);
            //设置验证码字体及大小
    Font font=new Font("微软雅黑",Font.BOLD,20);
            //获取验证码
    String str=getRandomString(4);
            //获取session
   HttpSession session=request.getSession();
         //给str做标记
   session.setAttribute("str",str);
         //在图片中画出验证码
    g.drawString(str,50,50);
            //在图片中随机划线
    for (int i=0;i<15;i++){
        int x1= RandomUtils.nextInt(0,Width);
        int x2=RandomUtils.nextInt(0,Width);
        int y1=RandomUtils.nextInt(0,Height);
        int y2=RandomUtils.nextInt(0,Height);
                            Color color=new Color(RandomUtils.nextInt(0,255),RandomUtils.nextInt(0,255),RandomUtils.nextInt(0,255));
        g.setColor(color);
        g.drawLine(x1,y1,x2,y2);
    }
            //输出图片
    ImageIO.write(image,"jpg",response.getOutputStream());
}

}

(2)登陆验证的servlet:
import org.apache.commons.lang3.RandomUtils;

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 java.io.IOException;

public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
            //获取输入的验证码的值
    String yzm=request.getParameter("yzm");
            //获取输入的用户名
    String username=request.getParameter("username");
            //获取输入的密码
    String userpassword=request.getParameter("userpassword");
            //获取session
    HttpSession session=request.getSession();
            //获取session标记的值,即服务端生成的验证码的值
    String yzm2=(String) session.getAttribute("str");
   //比较验证码
         if (yzm.equals(yzm2)){
       if(username.equals("zhangsan")&&userpassword.equals("123456")){
           response.getWriter().print("登陆成功");
       }else{
           response.getWriter().print("用户名或密码错误");
       }

    }else{
        response.getWriter().print("验证码错误");
    }

}

}
(3)登陆界面(比较简陋)



登陆










用户名:
密   码:





验证码:

                     
                     
                 
             



(4)配置web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">

Welcome to Tomcat

    Welcome to Tomcat


    LoginServlet
    servlet.LoginServlet


    LoginServlet
    /Login


    YzmServlet
    servlet.YzmServlet


    YzmServlet
    /Yzm

界面还有一些问题,不能更换验证码.