用Servlet完成一个验证码的用户登陆界面

servlet编写验证码程序:

package org.zhou.webhw2;

import org.apache.commons.lang3.RandomUtils;

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 javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;


public class yanzhengmaServlet extends HttpServlet {
    private static final int WIDTH=100;
    private static final int HEIGHT=40;
    public static String ma;

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //获取session
        HttpSession session =request.getSession();
        System.out.println(session.getId());
        //产生一张图片
        BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);

        Graphics g=image.getGraphics();//制图类
        //设置背景色
        g.setColor(Color.WHITE);
        //设置背景填充色
        g.fillRect(0,0,WIDTH,HEIGHT);
        //设置前景色(验证码颜色)
        g.setColor(Color.black);
        //获取一个字体类对象
        Font font=new Font("黑体",Font.BOLD,30);
        //设置图字体
        g.setFont(font);
        //调用随机获取字母的方法
        ma=genRandomString(4,g);

        session.setAttribute("str",ma);

        //画线
        for(int i=0;i<20;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,x2,y1,y2);



        }
        //输出图片
        ImageIO.write(image,"jpg",response.getOutputStream());

    }

    private String genRandomString(int i,Graphics g) {
        String suiji="";

        int k=20;
        int l=0;
        for(int j=0;j<i;j++){
            char c1=(char) RandomUtils.nextInt(48,58);
            char c2=(char) RandomUtils.nextInt(65,91);
            char c3=(char) RandomUtils.nextInt(97,123);
            char ccc[]={c1,c2,c3};
            char cc=ccc[RandomUtils.nextInt(0,3)];
            String str=String.valueOf(cc);
            int x=RandomUtils.nextInt(l,l+k);
             int y=RandomUtils.nextInt(20,40);
            g.drawString(str,x,y);
            l=l+k+2;

            suiji+=cc;
        }
        return suiji;

    }
}

servlet编写服务器反馈界面:

package org.zhou.webhw2;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "UserServlet")
public class UserServlet 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 {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
//        response.getWriter().print("<!DOCTYPE html> <html lang=\"zh-CN\"> <head> <meta charset=\"utf-8\"> <meta http-equiv=\"X-UA-Compatible\" content=\"IE-edge\"> <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"> <title>vue01</title>  </head> <body>");
//        response.getWriter().print("<form name='form1' action='' method='post'>");
//        response.getWriter().print("<p><b>注册:</p>");
//        response.getWriter().print("<p>请输入用户名:<input type='text' name='usename'/></p>");
//        response.getWriter().print("<p>请输入密码:<input type='password' name='password'/></p>");
//        response.getWriter().print("<p>请输入验证码:<input type='text' name='yanzheng'/><img src='./web1'></p>");
//        response.getWriter().print("<button type='submit'>提交</button>");
//        response.getWriter().print("</form>");
        //获取用户输入的验证码值
        String str=request.getParameter("yanzheng");
//        String str2=yanzhengmaServlet.ma;
        HttpSession session2 =request.getSession();
        String str2=String.valueOf(session2.getAttribute("str"));
        if(request.getParameter("r1")!=null){
            if(equals2(str,str2)){
                response.getWriter().print("<p>登录成功!</p>");
                response.getWriter().print(request.getParameter("usename"));
                response.getWriter().print("密码是:"+request.getParameter("password"));
            }else{
                response.getWriter().print("<script>alert('验证码错误1')</script>");
            }
        }else{
            if(str.equals(str2)){
                response.getWriter().print("<p>登录成功!</p>");
                response.getWriter().print(request.getParameter("usename"));
                response.getWriter().print("密码是:"+request.getParameter("password"));
            }else{
                response.getWriter().print("<script>alert('验证码错误2')</script>");
            }



        }








//        response.getWriter().print("</body></html>");
    }


    public boolean equals2(String str1,String str2) {
        String s1=str1.toUpperCase();
        String s2=str2.toUpperCase();
       if(s1.equals(s2)){
           return true;
       }else {
           return false;
       }
    }
}

网页代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form name='form1' action='./web2' method='post'>
    <p><b>注册:</p>
    <p>请输入用户名:<input type='text' name='usename'/></p>
    <p>请输入密码:<input type='password' name='password'/></p>
    <p>请输入验证码:<input  type='text' name='yanzheng'/>
        <input type='checkbox' name="r1"/>不区分大小写



        <img src="./web1"></p>
    <button type='submit'>提交</button>
</form>
</body>
</html>

web.xml文件的配置:

<?xml version='1.0' encoding='UTF-8'?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         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">

<display-name>java web01</display-name>
<description>
    java web01
</description>
<servlet>
    <servlet-name>Servletid</servlet-name>
    <servlet-class>org.zhou.webhw2.yanzhengmaServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Servletid</servlet-name>
    <url-pattern>/web1</url-pattern>
</servlet-mapping>
    <servlet>
        <servlet-name>Servletid2</servlet-name>
        <servlet-class>org.zhou.webhw2.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servletid2</servlet-name>
        <url-pattern>/web2</url-pattern>
    </servlet-mapping>

</web-app>

 运行程序需要的包:

效果图:

 

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值