jsp页面验证码源代码
jsp页面验证码源代码
在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的v alue值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证。
程序结构图:
VerifyCodeUtils程序主要内容为通过Java生成验证码的图片,以及验证码的value值,程序如下:
package utils;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
publicclass VerifyCodeUtils {
privatestatic BufferedImage image = null;
privatestatic Random random = new Random();
//在自己定义的一些数中,生成4位随机数
publicstatic String getVerifyCode() {
String str = "";
char[] code = newchar[]{'A','B','C','D','E','F','G','H','I ','J','K','L','M','N','P','Q','R','S','T','U',
'V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',' j','k','m','n','p','q','r','s','t',
'u','v','w','x','y','z','2','3','4','5','6','7','8','9'};
Random random = new Random();
for(int i = 0; i <4; i++) {
str += String.valueOf(code[random.nextInt(code.length)]);
}
return str;
}
//生成验证码图像
publicstatic Map getVerifyCode(int width, int heigth) {
VerifyCodeUtils.image = new BufferedImage(width, heigth, Bu fferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) VerifyCodeUtils.image.g etGraphics();
String verifyCode = getVerifyCode();
Map map = new HashMap();
map.put("verifyCode", verifyCode);
//将图像填充为白色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, heigth);
//设置字体
g.setFont(new Font("宋体", Font.BOLD + Font.ITALIC, heigth-
10));
//画边框。
g.setColor(VerifyCodeUtils.getColor());
g.drawRect(0, 0, width, heigth);
//随机产生干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(Color.BLACK);
for (int i = 0; i <50; i++) {
int x = VerifyCodeUtils.random.nextInt(width);
int y = VerifyCodeUtils.random.nextInt(heigth);
int xl = VerifyCodeUtils.random.nextInt(5);
int yl = VerifyCodeUtils.random.nextInt(5);
g.setColor(getColor());
g.drawLine(x, y, x + xl, y + yl);
}
char c;
for(int i = 0; i <4; i++) {
c = verifyCode.charAt(i);
g.drawString(c+"", i*20+40, heigth-10);
}
map.put("image", VerifyCodeUtils.image);
return map;
}
//随机化颜色
publicstatic Color getColor() {
int red = 0, green = 0, blue = 0;
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。red = VerifyCodeUtils.random.nextInt(255);
green = VerifyCodeUtils.random.nextInt(255);
blue = VerifyCodeUtils.random.nextInt(255);
returnnew Color(red,green,blue);
}
}
VerifyCodeServlet把VerifyCodeUtils生成的验证码图片通过io流传入前端显示,代码如下:
package Servlet;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Map;
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 utils.VerifyCodeUtils;
/**
* Servlet implementation class VerifyCodeServlet
*/
@WebServlet("/")
publicclass VerifyCodeServlet extends HttpServlet { privatestaticfinallong serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public VerifyCodeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, Ht tpServletResponse response)
*/
protectedvoid doGet(HttpServletRequest request, HttpServlet Response response) throws ServletException, IOException {
response.setHeader("Expires", "-1");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-type", "image/jpeg");
Map map = VerifyCodeUtils.getVerifyCode(223, 50);
//把verifyCode的数值传入session中用于验证用户输入的验证码是否正确
request.getSession().setAttribute("verifyCode", map.get(" verifyCode").toString().toUpperCase());
//通过IO流传入前端显示
ImageIO.write((BufferedImage) map.get("image"), "jpg", res ponse.getOutputStream());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, H ttpServletResponse response)
*/
protectedvoid doPost(HttpServletRequest request, HttpServle tResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
页面jsp代码如下:
<%@ pagelanguage="java"contentType="text/html; charset=utf -8"
pageEncoding="utf-8"%>
div{float:left;}
input{width:223px;height:31px;margin-right:20px;}
img{width:223px;height:35px;}
p{margin:10px;}
js实现ajax代码如下:
/**
*
*/
function check_verifyCode(){
var XMLHttpReqVerifyCode = null;
var url =document.getElementById("base").href +"/servlet/Te stVerifyCodeServlet";
var verifyCode = document.getElementById("verifyCode").valu e;
var tip = document.getElementById("tip");
var errorTip = "输入的验证码不正确";
var successTip = "输入的验证码正确";
tip.innerHTML=errorTip;
if(verifyCode==null || verifyCode==""){
tip.innerHTML=errorTip;
tip.style.color = "red";
}else{
if(window.XMLHttpRequest) {
//DOM2浏览器
XMLHttpReqVerifyCode = new XMLHttpRequest();
} elseif(window.ActiveXObject) {
//使用json语法创建数组
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', ' MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP '];
for(var i = 0; i try{ XMLHttpReqVerifyCode = new ActiveXObject(MSXML[i]); } catch(e) { } } } XMLHttpReqVerifyCode.open("POST",url, true); XMLHttpReqVerifyCode.setRequestHeader("Content-Type", "ap plication/x-www-form-urlencoded"); XMLHttpReqVerifyCode.onreadystatechange = function testVeri fyCodeServletResponse(){ if(XMLHttpReqVerifyCode.readyState == 4&& (XMLHttpReqVerif yCode.status == 200 || XMLHttpReqVerifyCode.status == 304)) { if(XMLHttpReqVerifyCode.responseText == 1){ tip.innerHTML = successTip; tip.style.color = "green"; }elseif(XMLHttpReqVerifyCode.responseText == 0){ tip.innerHTML = errorTip; tip.style.color = "red"; } } } XMLHttpReqVerifyCode.send("code="+verifyCode); } //ajax前后台交互 function createXMLHttpRequest(XMLHttpReq) { if(window.XMLHttpRequest) { //DOM2浏览器 XMLHttpReq = new XMLHttpRequest(); } elseif(window.ActiveXObject) { //使用json语法创建数组 var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', ' MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP ']; for(var i = 0; i try{ XMLHttpReq = new ActiveXObject(MSXML[i]); } catch(e) { } } return XMLHttpReq; } } } TestVerifyCodeServlet与js交互代码为: package Servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class TestVerifyCodeServlet */ @WebServlet("/TestVerifyCodeServlet") publicclass TestVerifyCodeServlet extends HttpServlet { privatestaticfinallong serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestVerifyCodeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, Ht tpServletResponse response) */ protectedvoid doGet(HttpServletRequest request, HttpServlet Response response) throws ServletException, IOException { // TODO Auto-generated method stub String codeTrue = (String) request.getSession().get Attribute("verifyCode"); String codeInput = request.getParameter("code"); System.out.println(codeInput); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter();//打印流 if(codeInput!=null){ if(codeInput.toUpperCase().equals(codeTrue)){ out.println("1"); }else{ out.println("0"); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, H ttpServletResponse response) */ protectedvoid doPost(HttpServletRequest request, HttpServle tResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } xml代码为 结果显示: 如何在JSP中使用MYSQL中的登录界面 1.和创建登录的JSP界面,action指向servlet中的方法 2.创建一个新的字符用于存储新的数字和字符String msg=""; 3.获取JSP中输入的数据。String account = request.getParameter("name"); 4.Try语句调用后面的方法。先写方法 方法: 连接数据库和MYSQL中方法一样 try{ String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="123456"; //数据库名 String dbName="xueshenbiao"; //表名 String tableName="nima"; //联结字符串 String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+u serPasswd; Class.forName("com.mysql.jdbc.Driver").newInstance(); java.sql.Connection connection=DriverManager.getConnection(url); Statement statement = connection.createStatement(); 重点如下: 之前习惯了用select去巡查SQL中数据,现在因为是验证登录所以只要比对是否有一样的数据即可,现在采用SELECT count(*)用于计数,如果返回是0说明不存在登录的用户,返回1说明存在,返回>1说明不止一个。 5.接下来寻找个数用while(rs.next())寻找个数 6.和删除一样用result返回参数. 7.此时的result有了自己的判断力用于前面的判断。 跳回前面的try语句 用If()else语句来判断登录的界面 jsp验证码实现源代码 (2011-10-16 11:11:40) 验证码原理:①首先随机生成数字或字母;②把生成的数字或字母保存在Session这次会话中;③最后,在登陆页面上把接收用户输入的验证码与生成的验证码相匹配,成功返回TRUE,失败则返回FALSE; 演示程序包括三个文件: 1.login.jsp:登录页面 2.code.jsp:生成验证码图片页面 3.check.jsp:验证结果 code.jsp <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <% // 在内存中创建图象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 设定背景色 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, width, height); //画边框 g.setColor(Color.black); g.drawRect(0,0,width-1,height-1); // 随机产生的认证码(4位数字) String rand =""+ (Math.random()*10000); rand = rand.substring(0,rand.indexOf(".")); switch(rand.length()) { case 1: rand = "000"+rand; break; case 2: rand = "00"+rand; break; case 3: rand = "0"+rand; break; default: rand = rand.substring(0,4); break; } 关于jsp验证码生成,显示,验证和刷新: 1:四位数据的验证图片生成,用servlet实现 2:在web.xmlli配置servlet 3:页面上显示servlet生成的图片 4:关于验证码输入数据的验证 5:验证码的刷新 ——————————————————————– 1:四位数据的验证图片生成,用servlet实现,servlet代码如下: import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import java.util.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; public class vImage extends HttpServlet { public void init(ServletConfig conf) throws ServletException { super.init(conf); } public void doGet(HttpServletR equest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType(‖image/jpeg‖); res.setHeader(‖Pragma‖, ―No-cache‖); res.setHeader(‖Cache-Control‖, ―no-cache‖); res.setDateHeader(‖Expires‖, 0); HttpSession session = req.getSession(); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 生成随机类 Random random = new Random(); jsp页面验证码源代码 在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的v alue值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证。 程序结构图: VerifyCodeUtils程序主要内容为通过Java生成验证码的图片,以及验证码的value值,程序如下: package utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import java.util.Random; publicclass VerifyCodeUtils { privatestatic BufferedImage image = null; privatestatic Random random = new Random(); //在自己定义的一些数中,生成4位随机数 publicstatic String getVerifyCode() { String str = ""; char[] code = newchar[]{'A','B','C','D','E','F','G','H','I ','J','K','L','M','N','P','Q','R','S','T','U', 'V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',' j','k','m','n','p','q','r','s','t', 'u','v','w','x','y','z','2','3','4','5','6','7','8','9'}; Random random = new Random(); for(int i = 0; i <4; i++) { str += String.valueOf(code[random.nextInt(code.length)]); } return str; } //登入页面 $conn=mysql_connect('127.0.0.1','root','')or die("连接失败"); mysql_select_db('tujian',$conn)or die("未找到该数据库"); define(ALL_PS,"vivid");mysql_query("set names GBK"); if($_POST[submit]){ $postcode=strtolower($_POST["code"]); $postcode=strtoupper($_POST["code"]); $uid=str_replace(" ","",$_POST[uid]); $sql="select * from users where `uid`='$_POST[uid]'"; $query=mysql_query($sql); $user=is_array($row=mysql_fetch_array($query)); $mi=$user?md5($_POST[pass].ALL_PS)==$row[pass]:FALSE; if($mi){ $_SESSION[uid]=$row[uid]; $_SESSION[name]=$row[name]; $_SESSION[id]=$row[id]; $_SESSION[user_shell]=md5($row[uid].$row[pass].ALL_PS); if( $_SESSION["code"]==$postcode){ echo""; }else{ echo"如何在JSP中使用MYSQL中的登录界面(内涵完整代码)
JSP生成验证码_源代码
jsp验证码生成以及刷新
jsp页面验证码源代码
php用户登录页面代码源代码