jsp+Servlet编程实现验证码的方法

本文实例讲述了jsp+Servlet编程实现验证码的方法。分享给大家供大家参考,具体如下:

这里用到两个类,一个用于验证码实现,一个为后台Servlet验证输入是否正确:

CodeUtil.java--------验证码具体实现:

package util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Random;
import javax.imageio.ImageIO;
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 javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.BodyContent;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CodeUtil extends HttpServlet {
 public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //System.out.println("哈哈哈");
  response.setContentType("image/jpeg");
  //设置页面不缓存
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
  //在内存中创建图像
  int width = 90;
  int height = 35;
  BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  //获取图形上下文
  Graphics g = image.getGraphics();
  //随机类
  Random random = new Random();
  //设定背景
  g.setColor(getRandColor(200, 250));
  g.fillRect(0, 0, width, height);
  //设定字体
  g.setFont(new Font("Times New Roman",Font.PLAIN,30));
  //随机产生干扰线
  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < 100; i++) {
   int x = random.nextInt(width);
   int y = random.nextInt(height);
   int xl = random.nextInt(12);
   int yl = random.nextInt(12);
   g.drawLine(x, y, x + xl, y + yl);
  }
  //随机产生4位验证码
  String[] codes = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
  String code = "";
  for(int i=0;i<4;i++){
   String str = codes[random.nextInt(codes.length)];
   code += str;
   // 将认证码显示到图象中
   g.setColor(new Color(50 + random.nextInt(110), 20 + random.nextInt(110), 30 + random.nextInt(110)));
   //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
   g.drawString(str, 18 * i +13, 27); //文字间距*i+距离左边距,上边距
  }
  HttpSession session=request.getSession();
  // 将认证码存入SESSION
  session.setAttribute("code", code);
  // 图象生效
  g.dispose();
  // 输出图象到页面
  ImageIO.write(image, "JPEG", response.getOutputStream());
  //加上下面代码,运行时才不会出现java.lang.IllegalStateException: getOutputStream() has already been called ..........等异常
  response.getOutputStream().flush();
  response.getOutputStream().close();
  response.flushBuffer();
 }
 //获取随机颜色
 private Color getRandColor(int fc,int bc){
  Random random = new Random();
  if(fc>255) fc=255;
  if(bc>255) bc=255;
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r,g,b);
  }
}

CheckCodeUtil.java-----------用户输入验证功能

package util;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CheckCodeUtil extends HttpServlet {
 public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  //从session获取验证码
  HttpSession session=request.getSession();
  String code=session.getAttribute("code").toString();
  System.out.println(code);
  //获取用户输入验证码
  String input=request.getParameter("code");
  System.out.println(input);
  if(code.equalsIgnoreCase(input)){
   //转发数据
   request.setAttribute("result", "true");
   request.getRequestDispatcher("test/regist.jsp").forward(request, response);
//   response.sendRedirect(request.getContextPath()+"/regist/regist.jsp");
  }else{
   request.setAttribute("result", "false");
   request.getRequestDispatcher("test/regist.jsp").forward(request, response);
  }
 }
}

测试页面效果:

测试页面代码:

<%@ page session="true" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert title here</title>
  <script>
   function showResult1(){
   alert('输入正确');
   }
   function showResult2(){
   alert('输入错误');
   }
  </script>
 </head>
 <%
  response.setContentType("text/html;charset=utf-8");
  request.setCharacterEncoding("utf-8");
  String path=request.getContextPath();
  if(request.getAttribute("result")!=null){
  String result=request.getAttribute("result").toString();
  out.print(result);
  if(result.equals("true")){
   out.print("true");
   out.print("<script>showResult1();<script>");
  }else{
   out.print("<script>showResult2();<script>");
  }
  }
 %>
  <body>
  <br>验证码演示
  <form action="<%=path %>/checkCodeUtil" method="post">
  <input type="text" size="10" name="code"/>
  <img src="<%=path %>/codeUtil" id="img"/>
  <a href="javascript:;" onclick="document.
   getElementById('img').src='<%=path %>/codeUtil?'+new Date().getTime();">看不清,换一个</a>
  <input type="submit" value="提交">
  </form>
 </body>
</html>

希望本文所述对大家jsp程序设计有所帮助。

(0)

相关推荐

  • jsp页面验证码demo

    在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的value值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证. 程序结构图: VerifyCodeUtils程序主要内容为通过java生成验证码的图片,以及验证码的value值,程序如下: package utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics

  • jsp实现简单验证码的方法

    本文实例讲述了jsp实现简单验证码的方法.分享给大家供大家参考.具体如下: 这里只有一个文件,可以在<img />的src属性里直接调用显示,适用于各种项目的表单安全验证 jsp页面代码: <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(

  • JSP 制作验证码的实例详解

    JSP 制作验证码的实例详解 验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现

  • jsp页面验证码完整实例

    本文实例为大家分享了sp页面验证码的具体代码,供大家参考,具体内容如下 项目结构如下,MyEclipse中新建一个Web Project,取名servlet 1.src下new一个servlet类 package com.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOExc

  • jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)

    本文实例讲述了jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验).分享给大家供大家参考,具体如下: 前台显示页面: welcome.jsp <%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transiti

  • JSP验证码动态生成方法

    在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以图像形式返回给客户端显示. 另写一个JSP页面,引用此JSP页面生成的验证码: authen.jsp代码如下: <%@ page import="java.awt.*,java.awt.image.*,java.util.*,com.sun.image.codec.jpeg.

  • JSP实用教程之简易图片验证码的实现方法(附源码)

    前言 很多新手对图片验证码不是很了解,所以本文尝试通过一个简单的 JSP 小程序来实现验证码功能.文中给出了详细的示例代码,文末给出了完整实例代码的下载地址,下面话不多说了,来一起看看详细的介绍吧. 效果图 示例代码 前台代码如下: <form action="action.jsp" method="POST"> <label> 用户名: <input type="text" name="name"

  • JSP实现登录功能之添加验证码

    jsp登陆验证,网页登陆验证带验证码校验,登录功能之添加验证码 part_1:专门用于生成一个验证码图片的类:VerificationCode.Java package cn.mike.javase.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.i

  • jsp+Servlet编程实现验证码的方法

    本文实例讲述了jsp+Servlet编程实现验证码的方法.分享给大家供大家参考,具体如下: 这里用到两个类,一个用于验证码实现,一个为后台Servlet验证输入是否正确: CodeUtil.java--------验证码具体实现: package util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.

  • jsp+servlet+javabean实现数据分页方法完整实例

    本文实例讲述了jsp+servlet+javabean实现数据分页方法.分享给大家供大家参考,具体如下: 这里秉着且行且记的心态,记录下学习过程,学得快忘得快,生怕遗忘,以备日后使用. 用到的部分代码是自己在网上查找,并自己修改,加上自己的理解.也不知道算不算原创,只做自己学习记录. 使用相关:PostgreSQL数据库.dom4j.JSP.Servlet 一.首先是工程格局,来个全局视图方便读者与自己查看与使用 思路为: 以config.xml文件记录配置信息,以方便数据库更改,方便移植与重用

  • JSP/Servlet 中的汉字编码问题

    JSP/Servlet 中的汉字编码问题 网上就 JSP/Servlet 中 DBCS 字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合 IBM WebSphere Application Server 3.5(WAS)的解决方法作一些说明,希望它不是多余的.内容: 问题的起源 ??????-80,GBK,GB18030-2000 汉字字符集及 Encoding 中文转码时'?'.乱码的由来 JSP/Servlet 汉字编码问题及在 WAS 中的解决办法 结束语 参考文章 1.

  • jsp编程去除空白行的方法

    本文实例讲述了jsp编程去除空白行的方法.分享给大家供大家参考,具体如下: JSP中由于引入包命令及其他处理,渲染出来的页面源代码很多换行. 以前有很多方法来解决,如 1.在编写源码中注意格式,多行并一行.这个编写比较麻烦,源码不好看. 2.自己写标签,在运行时去除空白行.虽然时间一般很短,但也是耗了时. tomcat 6中天然支持这种功能 1.在工程的web.xml上加上如下配置 <jsp-config> <jsp-property-group> <url-pattern&

  • JSP开发Servlet重写init()方法实例详解

    JSP开发Servlet重写init()方法实例详解 写一个Servlet时,有时需要我们重写该Servlet的初始化方法,然后,究竟是重写init(ServletConfig config),还是重写init(),这是个问题.要明了这一点,首先要知道Servlet的几个类和接口的联系: ServletConfig接口:其中有getServletName();getServletContext();getInitParameter(String name);getInitParameterNam

  • 浅谈jsp的C标签一般使用方法以及js接收servlet中的对象及对象数组

    由于现流行的javaWeb框架提倡前后端分离,比如在SpringMvc中已经很少写servlet的一些东西:目前 前端jsp中大多是一些纯html和js,很少用到jstl的一堆东西,后端也仅仅处理一些前端的post.get请求或页面跳转,无须以往繁琐的xml路径映射和filter过滤. 不过有时也会用到servlet作用域中的一些东西,比如某个固定的值.上下文路径等等~,不过这些东西大多数也仅限于取值而不是设置值(或对象),所以sun给了一个非常简洁的取值方式:C标签! 下面将简述下C标签的一些

  • JSP 开发之THE SERVLET NAME ALREADY EXISTS.解决方法

    The servlet name already exists.解决方法 当我们建立过同名的servlet文件,然后又将其删掉后再用同类名字建一个servlet时就会报错. 解决办法:web.xml里面存有servlet的映射关系,需要自己手动删除web.xml里面的映射关系. 删除,保存刷新即可 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • Servlet输出一个验证码图片的实现方法实例

    什么是Servlet Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. Servlet运行于支持Java的应用服务器中.从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展

  • 使用开源工具制作网页验证码的方法

    开发工具:eclipse.kaptcha-2.3.jar包. 一.创建Web项目: 二.新建一个Jsp页面(内容有,一个文本框,一个图片容器,一个提交按钮) <body> <img alt="random" src="randomcode.jpg" onclick="changeR(this)" style="cursor: pointer;"> <form action="check.

随机推荐