一次性图片验证码

本文介绍了一种基于Java的验证码生成及验证方法,包括验证码图片的生成、在Web页面上显示验证码图片并允许用户刷新,以及如何在服务器端验证用户输入的验证码是否正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1 验证码有啥用

在我们注册时,如果没有验证码的话,我们可以使用URLConnection来写一段代码发出注册请求。甚至可以使用while(true)来注册!那么服务器就废了!

验证码可以去识别发出请求的是人还是程序!当然,如果聪明的程序可以去分析验证码图片!但分析图片也不是一件容易的事,因为一般验证码图片都会带有干扰线,人都看不清,那么程序一定分析不出来。

 

2VerifyCode

现在我们已经有了cn.itcast.utils.VerifyCode类,这个类可以生成验证码图片!下面来看一个小例子。

public void fun1() throws IOException {

// 创建验证码类

VerifyCode vc = new VerifyCode();

// 获取随机图片

BufferedImage image = vc.getImage();

// 获取刚刚生成的随机图片上的文本

String text = vc.getText();

System.out.println(text);

// 保存图片

FileOutputStream out = new FileOutputStream("F:/xxx.jpg");

VerifyCode.output(image, out);

}

 

3 在页面中显示动态图片

我们需要写一个VerifyCodeServlet,在这个Servlet中我们生成动态图片,然后它图片写入到response.getOutputStream()流中!然后让页面的<img>元素指定这个VerifyCodServlet即可。

VerifyCodeServlet

public class VerifyCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

VerifyCode vc = new VerifyCode();

BufferedImage image = vc.getImage();

String text = vc.getText();

System.out.println("text:" + text);

VerifyCode.output(image, response.getOutputStream());

}

}

 

index.jsp

<script type="text/javascript">

    function _change() {

     var imgEle = document.getElementById("vCode");

     imgEle.src = "/day06_6/VerifyCodeServlet?" + new Date().getTime();

     }

    </script>

...  

  <body>

    <h1>验证码</h1>

    <img id="vCode" src="/day06_6/VerifyCodeServlet"/>

    <a href="javascript:_change()">看不清,换一张</a>

  </body>

 

4 在注册页面中使用验证码

    <form action="/day06_6/RegistServlet" method="post">

     用户名:<input type="text" name="username"/><br/>

     验证码:<input type="text" name="code" size="3"/>

     <img id="vCode" src="/day06_6/VerifyCodeServlet"/>

     <a href="javascript:_change()">看不清,换一张</a>

     <br/>

        <input type="submit" value="Submit"/>

    </form>

 

5RegistServlet

 

修改VerifyCodeServlet

public class VerifyCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

VerifyCode vc = new VerifyCode();

BufferedImage image = vc.getImage();

request.getSession().setAttribute("vCode", vc.getText());

VerifyCode.output(image, response.getOutputStream());

}

}

 

 

RegistServlet

public class RegistServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

String username = request.getParameter("username");

String vCode = request.getParameter("code");

String sessionVerifyCode = (String)request.getSession().getAttribute("vCode");

if(vCode.equalsIgnoreCase(sessionVerifyCode)) {

response.getWriter().print(username + ", 恭喜!注册成功!");

else {

response.getWriter().print("验证码错误!");

}

}

}

 

6 总结验证码案例

l VerifyCodeServlet

Ø 生成验证码:VerifyCode vc = new VerifyCode(); BufferedImage image = vc.getImage()

Ø 在session中保存验证码文本:request.getSession.getAttribute(“vCode”, vc.getText())

Ø 把验证码输出到页面:VerifyCode.output(image, response.getOutputStream)

l regist.jsp

Ø 表单中包含usernamecode字段;

Ø 在表单中给出<img>指向VerifyCodeServlet,用来在页面中显示验证码图片;

Ø 提供“看不清,换一张”链接,指向_change()函数;

Ø 提交到RegistServlet

l RegistServlet

Ø 获取表单中的usernamecode

Ø 获取session中的vCode

Ø 比较codevCode是否相同;

相同说明用户输入的验证码正确,否则输入验证码错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值