jsp使用servlet实现用户登录 及动态验证码

在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等...

现在,我将讲述通过servlet实现验证码:

验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢?

<生成图片>

{

  生成图片的类:

  1.BufferedImage图像数据缓冲区

  2.Graphics绘制图片

  3.color获取颜色

  4.Random获取随机数

  5.ImageIO输出图片

}

///////////////////////////////////////////////////////////////////////////

<生成验证码图片>

1.在index.jsp中写入以下代码

<form method="get" action="demo5" onsubmit="return isvalidate();" >
    姓名:<input type="text" placeholder="请输入姓名" name="myname">
    密码:<input type="password" placeholder="请输入密码" name="mypassword">
    验证码:<input type="text" name="checkCode"/>
    <img alt="验证码" id="imagecode" src="demo4"/>
    <a href="javascript:reloadCode()">看不清楚</a><br>
    <input type="submit" value="提交"/>
</form>

2.在src中创建ServletDemo4类

public class ServletDemo4 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //这个方法实现验证码的生成
        BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区

        Graphics g = bi.getGraphics(); //通过缓冲区创建一个画布

        Color c = new Color(255, 255, 255); //创建颜色
         /*根据背景画了一个矩形框
          */
        g.setColor(c);//为画布创建背景颜色

        g.fillRect(0, 0, 68, 22); //fillRect:填充指定的矩形
        // X和Y用于指定矩形左上角也就是相对于原点的位置,width和height用于指定矩形的宽和高。

        char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
        Random r = new Random();
        int len = ch.length;
        int index; //index用于存放随机数字
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            index = r.nextInt(len);//产生随机数字
            g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255)));  //设置颜色随机
            g.drawString(ch[index] + "", (i * 15) + 3, 18);//画数字以及数字的位置
            sb.append(ch[index]);
        }
        request.getSession().setAttribute("piccode", sb.toString()); //将数字保留在session中,便于后续的使用
        ImageIO.write(bi, "JPG", response.getOutputStream());
    }
}

3.在WEB-INF进行配置文件

    <servlet-name>ServletDemo4</servlet-name>
    <servlet-class>com.neunb.servlet.ServletDemo4</servlet-class>
    </servlet>
    <servlet>

    <servlet-mapping>
    <servlet-name>ServletDemo4</servlet-name>
    <url-pattern>/demo4</url-pattern>
    </servlet-mapping>

------华丽分割线-------

<输入信息及验证码与进行校验>

1.创建ServletDemo5类、

public class ServletDemo5 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
    //用于验证验证码
    {
        String name=request.getParameter("myname");
        String password=request.getParameter("mypassword");
        String piccode = (String) request.getSession().getAttribute("piccode");
        String checkCode = request.getParameter("checkCode");  //取值
        //checkCode=checkCode.toUpperCase();  //把字符全部转换为大写的(此语句可以用于验证码不区分大小写)
        response.setContentType("text/html;charset=gbk");//解决乱码问题
        PrintWriter out = response.getWriter();

        Map<String,String> map=new HashMap<>();
        map.put("小红","123");//存入用户名,密码
        map.put("小丽","123");
        map.put("小张","123");
        String html = "<html><head><title></title></head><body><p>登录成功</p><a href=‘index.jsp‘>返回</a></body></html>";//设置登录成功页面
        if (checkCode.equals(piccode)) {
            if(map.containsKey(name)){
                if(map.get(name).equals(password)){
                    out.write(html);//信息验证成功,跳转
                }
                else out.println("密码错误!!!");
            }
            else out.println("用户名不存在!!!");
        } else {
            out.println("验证码输入错误!!!");
        }

        out.flush();//将流刷新
        out.close();//将流关闭
    }

}

2.配置WEB-INF

  

    <servlet-name>ServletDemo5</servlet-name>
    <servlet-class>com.neunb.servlet.ServletDemo5</servlet-class>
    </servlet>
    <servlet>

    <servlet-mapping>
    <servlet-name>ServletDemo5</servlet-name>
    <url-pattern>/demo5</url-pattern>
    </servlet-mapping>

------华丽分割线-----

在点击页面中的看不清楚时,需要进行刷新,在页面中书写一段JS代码

 <script type="text/javascript">
        function reloadCode() {//切换验证码
            var time = new Date().getTime();
            document.getElementById("imagecode").src = "demo4?d=" + time;
        }

        function isvalidate()
        {//对输入信息合格性进行判断
            if(document.getElementsByName("myname")[0].value.length<2||document.getElementsByName("myname")[0].value.length>12)
            {
                alert("用户名不合法(提示:长度在2-12个字符组成)");
                return false;
            }

            if(document.getElementsByName("mypassword")[0].value.length<3)
            {
                alert("密码长度至少为3位");
                return false;
            }
            if(document.getElementsByName("checkCode")[0].value.length!=4)
            {
                alert("验证码为4位");
                return false;
            }
            return true;
        }
    </script>

运行结果截图:

时间: 2024-08-05 15:06:03

jsp使用servlet实现用户登录 及动态验证码的相关文章

使用servlet实现用户登录

本文简单讲述使用servlet实现用户登录,包括用户登录.退出和注册等. 1.关于servlet 1.1概述 Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. Servlet运行于支持Java的应用服务器中.从

登录页面动态验证码的设置

登录页面动态验证码的设置 采用php中创建对象的思想进行动态验证码的设置 1.创建出一个背景图片,用来存放动态码输出位置 1 function createImage(){ 2 // 创建图片对象,并设置图片的宽高 imagecreatetruecolor 3 $this->image = imagecreatetruecolor($this->width, $this->height); 4 // 图片创建背景颜色 5 // rand(下界,上界), php中的随机数 6 $backg

用户登录注册之验证码技术实现

对于一些恶意强暴破解密码的行为(即通过硬性尝试用户名密码进行破解),可以采用验证码对其进行抵御,对于一些程序可以识别验证码,则需要对验证码形式进行多样化设计. 用户登录时设置验证码代码实现: 页面 <script type="text/javascript"> function _change() { var imgEle = document.getElementById("img"); imgEle.src = "${pageContext

JSP小例子——实现用户登录小例子(不涉及DB操作)

实现用户登录小例子用户名和密码都为"admin",登陆成功使用服务器内部转发到login_success.jsp页面,并且提示登陆成功的用户名.如果登陆失败则请求重定向到login_failure.jsp页面.首先,我们需要一个登录页面login.jsp用于登录.login.jsp中的主要代码如下: <form name="regForm" action="dologin.jsp" method="post"> &

Servlet——简单用户登录实例+http协议解析

编写项目,用户登录系统1.0版本 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.ser

编写一个jsp程序,实现用户登录,当用户输入的用户或密码错误时,将页面重定向到错误提示也,并在该页面显示30秒后 自动回到用户登录界面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <

JSP慕课网阶段用户登录小例子(不用数据库)

getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数. Web是请求/响应架构的使用,而request和response就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而response就是给客户端响应相关的页面及信息. request.getRequestDispatcher().forward(request.response)这个语句意思是将客户端的请求转向(forward)到g

Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码

先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.henu.bean(User.java 用户数据库操作)和cn.edu.henu.util(DBConnection.java 数据库的连接操作)这两个包 <?xml version="1.0" encoding="UTF-8"?> <web-app x

JSP实现用户登录样例

业务描述 用户在login.jsp页面输入用户名密码登录: 如果用户名为xingoo,密码为123,则跳转到成功界面login_success.jsp,并显示用户登录的名字: 如果用户名密码错误,则跳转到失败界面login_failure.jsp,并提示返回登录界面. login.jsp代码 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="ut