JAVAWEB项目如何实现验证码 (转)
<h1>
    <span class="link_title"><a href="/lulei9876/article/details/8365500">
    JAVAWEB项目如何实现验证码        
    </a>
    </span>
</h1>
    <div class="article_manage clearfix">
    <div class="article_r">
        <span class="link_postdate">2012-12-21 21:19</span>
        <span class="link_view" title="阅读次数">56026人阅读</span>
        <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(36)</span>
        <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('JAVAWEB%e9%a1%b9%e7%9b%ae%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e9%aa%8c%e8%af%81%e7%a0%81','8365500');return false;" title="收藏" target="_blank">收藏</a></span>
         <span class="link_report"> <a href="#report" onclick="javascript:report(8365500,2);return false;" title="举报">举报</a></span>
    </div>
</div>    <style type="text/css">
        .embody{
            padding:10px 10px 10px;
            margin:0 -20px;
            border-bottom:solid 1px #ededed;
        }
        .embody_b{
            margin:0 ;
            padding:10px 0;
        }
        .embody .embody_t,.embody .embody_c{
            display: inline-block;
            margin-right:10px;
        }
        .embody_t{
            font-size: 12px;
            color:#999;
        }
        .embody_c{
            font-size: 12px;
        }
        .embody_c img,.embody_c em{
            display: inline-block;
            vertical-align: middle;
        }
         .embody_c img{
            width:30px;
            height:30px;
        }
        .embody_c em{
            margin: 0 20px 0 10px;
            color:#333;
            font-style: normal;
        }
</style>
<script type="text/javascript">
    $(function () {
        try
        {
            var lib = eval("("+$("#lib").attr("value")+")");
            var html = "";
            if (lib.err == 0) {
                $.each(lib.data, function (i) {
                    var obj = lib.data[i];
                    //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                    html += ' <a href="' + obj.url + '" target="_blank">';
                    html += ' <img src="' + obj.logo + '">';
                    html += ' <em><b>' + obj.name + '</b></em>';
                    html += ' </a>';
                });
                if (html != "") {
                    setTimeout(function () {
                        $("#lib").html(html);
                        $("#embody").show();
                    }, 100);
                }
            }
        } catch (err)
        { }
    });
</script>
    <div class="bog_copyright">
        <p class="copyright_p">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
    </div>
验证码基础
一.什么是验证码及它的作用
:验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录。
二.图文验证码的原理
:在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码。为了增加验证码的安全级别,可以输出图片的同时输出干扰线,最后在用户提交数据的时候,在服务器端将用户提交的验证码和Session保存的验证码进行比较。
三.验证码所需的技术
:i.因为验证码中的文字,数字,应为都是可变的,故要用到随机生成数技术。
ii.如果验证码中包含汉字,则要用到汉字生成技术.
iii.可以使用Ajax技术实现局部刷新
iv.可以使用图片的缩放和旋转技术,
vi.随机绘制干扰线(可以是折现,直线等)
vii.如果考虑到验证码的安全性,可以使用MD5加密.
验证码模块实例
1.编写生成英文,数字,汉字随机生成的Servlet类.源代码如下:
- package com.servlet;
 - import java.awt.*;
 - import java.awt.geom.*;
 - import java.awt.image.*;
 - import java.io.*;
 - import java.util.*;
 - 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.imageio.ImageIO;
 - public class PictureCheckCode extends HttpServlet {
 - private static final long serialVersionUID = 1L;
 - public PictureCheckCode() {
 - super();
 - }
 - public void destroy() {
 - super.destroy();
 - }
 - public void init() throws ServletException {
 - super.init();
 - }
 - /*该方法主要作用是获得随机生成的颜色*/
 - public Color getRandColor(int s,int e){
 - Random random=new Random ();
 - if(s>255) s=255;
 - if(e>255) e=255;
 - int r,g,b;
 - r=s+random.nextInt(e-s); //随机生成RGB颜色中的r值
 - g=s+random.nextInt(e-s); //随机生成RGB颜色中的g值
 - b=s+random.nextInt(e-s); //随机生成RGB颜色中的b值
 - return new Color(r,g,b);
 - }
 - @Override
 - public void service(HttpServletRequest request, HttpServletResponse response)
 - throws ServletException, IOException {
 - //设置不缓存图片
 - response.setHeader("Pragma", "No-cache");
 - response.setHeader("Cache-Control", "No-cache");
 - response.setDateHeader("Expires", 0);
 - //指定生成的响应图片,一定不能缺少这句话,否则错误.
 - response.setContentType("image/jpeg");
 - int width=86,height=22; //指定生成验证码的宽度和高度
 - BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //创建BufferedImage对象,其作用相当于一图片
 - Graphics g=image.getGraphics(); //创建Graphics对象,其作用相当于画笔
 - Graphics2D g2d=(Graphics2D)g; //创建Grapchics2D对象
 - Random random=new Random();
 - Font mfont=new Font("楷体",Font.BOLD,16); //定义字体样式
 - g.setColor(getRandColor(200,250));
 - g.fillRect(0, 0, width, height); //绘制背景
 - g.setFont(mfont); //设置字体
 - g.setColor(getRandColor(180,200));
 - //绘制100条颜色和位置全部为随机产生的线条,该线条为2f
 - for(int i=0;i<100;i++){
 - int x=random.nextInt(width-1);
 - int y=random.nextInt(height-1);
 - int x1=random.nextInt(6)+1;
 - int y1=random.nextInt(12)+1;
 - BasicStroke bs=new BasicStroke(2f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); //定制线条样式
 - Line2D line=new Line2D.Double(x,y,x+x1,y+y1);
 - g2d.setStroke(bs);
 - g2d.draw(line); //绘制直线
 - }
 - //输出由英文,数字,和中文随机组成的验证文字,具体的组合方式根据生成随机数确定。
 - String sRand="";
 - String ctmp="";
 - int itmp=0;
 - //制定输出的验证码为四位
 - for(int i=0;i<4;i++){
 - switch(random.nextInt(3)){
 - case 1: //生成A-Z的字母
 - itmp=random.nextInt(26)+65;
 - ctmp=String.valueOf((char)itmp);
 - break;
 - case 2: //生成汉字
 - String[] rBase={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
 - //生成第一位区码
 - int r1=random.nextInt(3)+11;
 - String str_r1=rBase[r1];
 - //生成第二位区码
 - int r2;
 - if(r1==13){
 - r2=random.nextInt(7);
 - }else{
 - r2=random.nextInt(16);
 - }
 - String str_r2=rBase[r2];
 - //生成第一位位码
 - int r3=random.nextInt(6)+10;
 - String str_r3=rBase[r3];
 - //生成第二位位码
 - int r4;
 - if(r3==10){
 - r4=random.nextInt(15)+1;
 - }else if(r3==15){
 - r4=random.nextInt(15);
 - }else{
 - r4=random.nextInt(16);
 - }
 - String str_r4=rBase[r4];
 - //将生成的机内码转换为汉字
 - byte[] bytes=new byte[2];
 - //将生成的区码保存到字节数组的第一个元素中
 - String str_12=str_r1+str_r2;
 - int tempLow=Integer.parseInt(str_12, 16);
 - bytes[0]=(byte) tempLow;
 - //将生成的位码保存到字节数组的第二个元素中
 - String str_34=str_r3+str_r4;
 - int tempHigh=Integer.parseInt(str_34, 16);
 - bytes[1]=(byte)tempHigh;
 - ctmp=new String(bytes);
 - break;
 - default:
 - itmp=random.nextInt(10)+48;
 - ctmp=String.valueOf((char)itmp);
 - break;
 - }
 - sRand+=ctmp;
 - Color color=new Color(20+random.nextInt(110),20+random.nextInt(110),random.nextInt(110));
 - g.setColor(color);
 - //将生成的随机数进行随机缩放并旋转制定角度 PS.建议不要对文字进行缩放与旋转,因为这样图片可能不正常显示
 - /*将文字旋转制定角度*/
 - Graphics2D g2d_word=(Graphics2D)g;
 - AffineTransform trans=new AffineTransform();
 - trans.rotate((45)*3.14/180,15*i+8,7);
 - /*缩放文字*/
 - float scaleSize=random.nextFloat()+0.8f;
 - if(scaleSize>1f) scaleSize=1f;
 - trans.scale(scaleSize, scaleSize);
 - g2d_word.setTransform(trans);
 - g.drawString(ctmp, 15*i+18, 14);
 - }
 - HttpSession session=request.getSession(true);
 - session.setAttribute("randCheckCode", sRand);
 - g.dispose(); //释放g所占用的系统资源
 - ImageIO.write(image,"JPEG",response.getOutputStream()); //输出图片
 - }
 - }
 
package com.servlet; import java.awt.;
import java.awt.geom.;
import java.awt.image.;
import java.io.;
import java.util.*; 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.imageio.ImageIO; public class PictureCheckCode extends HttpServlet {private static final long serialVersionUID = 1L; public PictureCheckCode() {
super();
} public void destroy() {
super.destroy();
} public void init() throws ServletException {
super.init();
}
/*该方法主要作用是获得随机生成的颜色*/
public Color getRandColor(int s,int e){
Random random=new Random ();
if(s>255) s=255;
if(e>255) e=255;
int r,g,b;
r=s+random.nextInt(e-s); //随机生成RGB颜色中的r值
g=s+random.nextInt(e-s); //随机生成RGB颜色中的g值
b=s+random.nextInt(e-s); //随机生成RGB颜色中的b值
return new Color(r,g,b);
} @Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置不缓存图片
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
//指定生成的响应图片,一定不能缺少这句话,否则错误.
response.setContentType("image/jpeg");
int width=86,height=22; //指定生成验证码的宽度和高度
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //创建BufferedImage对象,其作用相当于一图片
Graphics g=image.getGraphics(); //创建Graphics对象,其作用相当于画笔
Graphics2D g2d=(Graphics2D)g; //创建Grapchics2D对象
Random random=new Random();
Font mfont=new Font("楷体",Font.BOLD,16); //定义字体样式
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height); //绘制背景
g.setFont(mfont); //设置字体
g.setColor(getRandColor(180,200)); //绘制100条颜色和位置全部为随机产生的线条,该线条为2f
for(int i=0;i<100;i++){
int x=random.nextInt(width-1);
int y=random.nextInt(height-1);
int x1=random.nextInt(6)+1;
int y1=random.nextInt(12)+1;
BasicStroke bs=new BasicStroke(2f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); //定制线条样式
Line2D line=new Line2D.Double(x,y,x+x1,y+y1);
g2d.setStroke(bs);
g2d.draw(line); //绘制直线
}
//输出由英文,数字,和中文随机组成的验证文字,具体的组合方式根据生成随机数确定。
String sRand="";
String ctmp="";
int itmp=0;
//制定输出的验证码为四位
for(int i=0;i<4;i++){
switch(random.nextInt(3)){
case 1: //生成A-Z的字母
itmp=random.nextInt(26)+65;
ctmp=String.valueOf((char)itmp);
break;
case 2: //生成汉字
String[] rBase={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
//生成第一位区码
int r1=random.nextInt(3)+11;
String str_r1=rBase[r1];
//生成第二位区码
int r2;
if(r1==13){
r2=random.nextInt(7);
}else{
r2=random.nextInt(16);
}
String str_r2=rBase[r2];
//生成第一位位码
int r3=random.nextInt(6)+10;
String str_r3=rBase[r3];
//生成第二位位码
int r4;
if(r3==10){
r4=random.nextInt(15)+1;
}else if(r3==15){
r4=random.nextInt(15);
}else{
r4=random.nextInt(16);
}
String str_r4=rBase[r4];
//将生成的机内码转换为汉字
byte[] bytes=new byte[2];
//将生成的区码保存到字节数组的第一个元素中
String str_12=str_r1+str_r2;
int tempLow=Integer.parseInt(str_12, 16);
bytes[0]=(byte) tempLow;
//将生成的位码保存到字节数组的第二个元素中
String str_34=str_r3+str_r4;
int tempHigh=Integer.parseInt(str_34, 16);
bytes[1]=(byte)tempHigh;
ctmp=new String(bytes);
break;
default:
itmp=random.nextInt(10)+48;
ctmp=String.valueOf((char)itmp);
break;
}
sRand+=ctmp;
Color color=new Color(20+random.nextInt(110),20+random.nextInt(110),random.nextInt(110));
g.setColor(color);
//将生成的随机数进行随机缩放并旋转制定角度 PS.建议不要对文字进行缩放与旋转,因为这样图片可能不正常显示
/*将文字旋转制定角度*/
Graphics2D g2d_word=(Graphics2D)g;
AffineTransform trans=new AffineTransform();
trans.rotate((45)*3.14/180,15*i+8,7);
/*缩放文字*/
float scaleSize=random.nextFloat()+0.8f;
if(scaleSize>1f) scaleSize=1f;
trans.scale(scaleSize, scaleSize);
g2d_word.setTransform(trans);
g.drawString(ctmp, 15*i+18, 14);
}
HttpSession session=request.getSession(true);
session.setAttribute("randCheckCode", sRand);
g.dispose(); //释放g所占用的系统资源
ImageIO.write(image,"JPEG",response.getOutputStream()); //输出图片
}
}
2.配置Servlet
在web.xml中的配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
 - <web-app version="2.5"
 - 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_2_5.xsd">
 - <servlet>
 - <description>输出验证码</description>
 - <display-name>This is the display name of my J2EE component</display-name>
 - <servlet-name>PictureCheckCode</servlet-name>
 - <servlet-class><SPAN style="COLOR: #ff0000">com.servlet.PictureCheckCode</SPAN></servlet-class>
 - </servlet>
 - <servlet-mapping>
 - <servlet-name>PictureCheckCode</servlet-name>
 - <url-pattern>/<SPAN style="COLOR: #ff0000">PictureCheckCode</SPAN></url-pattern>
 - </servlet-mapping>
 - <welcome-file-list>
 - <welcome-file>index.jsp</welcome-file>
 - </welcome-file-list>
 - </web-app>
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<servlet>
<description>输出验证码</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>PictureCheckCode</servlet-name>
<servlet-class><SPAN style="COLOR: #ff0000">com.servlet.PictureCheckCode</SPAN></servlet-class>
</servlet> <servlet-mapping>
<servlet-name>PictureCheckCode</servlet-name>
<url-pattern>/<SPAN style="COLOR: #ff0000">PictureCheckCode</SPAN></url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.测试验证码
可以编写JSP页面来验证是否可以输出验证码图片,JSP代码如下:
1.index.jsp:显示界面
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
 - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 - <html>
 - <head>
 - <title>验证码</title>
 - <script language="javascript">
 - function myReload() {
 - document.getElementById("CreateCheckCode").src = document
 - .getElementById("CreateCheckCode").src
 - + "?nocache=" + new Date().getTime();
 - }
 - </script>
 - </head>
 - <body>
 - <form action="Check.jsp" method="post">
 - <input name="checkCode" type="text" id="checkCode" title="验证码区分大小写"
 - size="8" ,maxlength="4" />
 - <img src="PictureCheckCode" id="CreateCheckCode" align="middle">
 - <a href="" onclick="myReload()"> 看不清,换一个</a>
 - <input type="submit" value="提交" />
 - </form>
 - </body>
 - </html>
 
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>验证码</title>
<script language="javascript">
function myReload() {
document.getElementById("CreateCheckCode").src = document
.getElementById("CreateCheckCode").src
+ "?nocache=" + new Date().getTime();
}
</script>
</head><body>
<form action="Check.jsp" method="post">
<input name="checkCode" type="text" id="checkCode" title="验证码区分大小写"
size="8" ,maxlength="4" />
<img src="PictureCheckCode" id="CreateCheckCode" align="middle">
<a href="" onclick="myReload()"> 看不清,换一个</a>
<input type="submit" value="提交" />
</form>
</body>
</html>
2.Check.jsp :主要验证提交的数据是否和Session中保存的验证码是否相同
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
 - <html>
 - <head>
 - <title>验证码校验</title>
 - </head>
 - <body>
 - <%
 - String checkcode=request.getParameter("checkCode");
 - if(checkcode.equals("")||checkcode==null){
 - out.print("<script>alert('请输入验证码');window.location.href('index.jsp')</script>");
 - }else{
 - if(!checkcode.equalsIgnoreCase((String)session.getAttribute("randCheckCode"))){
 - out.print("<script>alert('验证码不正确,请重新输入');history.back(-1);</script>");
 - }else{
 - out.print("登录成功");
 - }
 - }
 - %>
 - </body>
 - </html>
 
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
<head>
<title>验证码校验</title>
</head> <body>
<%
String checkcode=request.getParameter("checkCode");
if(checkcode.equals("")||checkcode==null){
out.print("<script>alert('请输入验证码');window.location.href('index.jsp')</script>");
}else{
if(!checkcode.equalsIgnoreCase((String)session.getAttribute("randCheckCode"))){
out.print("<script>alert('验证码不正确,请重新输入');history.back(-1);</script>");
}else{
out.print("登录成功");
}
}
%>
</body>
</html>
4.工程项目结构,及运行截图


    <div id="digg" articleid="8365500">
        <dl id="btnDigg" class="digg digg_disable" onclick="btndigga();">
             <dt>顶</dt>
            <dd>47</dd>
        </dl>
        <dl id="btnBury" class="digg digg_disable" onclick="btnburya();">
              <dt>踩</dt>
            <dd>0</dd>
        </dl>
    </div>
 <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank"> </a>   </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank"> </a></div>
<script type="text/javascript">
            function btndigga() {
                $(".tracking-ad[data-mod='popu_222'] a").click();
            }
            function btnburya() {
                $(".tracking-ad[data-mod='popu_223'] a").click();
            }
        </script>
<div style="clear:both; height:10px;"></div>
        <div class="similar_article">
                <h4></h4>
                <div class="similar_c" style="margin:20px 0px 0px 0px">
                    <div class="similar_c_t">
                        相关文章推荐
                    </div>
                    <div class="similar_wrap tracking-ad" data-mod="popu_36">
                        <ul class="similar_list fl">
                               <li>
                                   <em>•</em>
                                   <a href="http://blog.csdn.net/luohuaishao/article/details/41211187" title="JAVAWEB项目如何实现验证码" strategy="BlogCommendFromCsdn" target="_blank">JAVAWEB项目如何实现验证码</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://wsql.iteye.com/blog/1824255" title="JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器" strategy="BlogCommendFromCsdn" target="_blank">JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://blog.csdn.net/u014785563/article/details/52893719" title="javaWeb之JAVA实现验证码的制作" strategy="BlogCommendFromCsdn" target="_blank">javaWeb之JAVA实现验证码的制作</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://hongzhguan.iteye.com/blog/1444489" title="PowerShell实现从SVN检出JavaWeb项目并编译" strategy="BlogCommendFromCsdn" target="_blank">PowerShell实现从SVN检出JavaWeb项目并编译</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://blog.csdn.net/qq441568267/article/details/52227929" title="javaweb项目验证码的实现" strategy="BlogCommendFromCsdn" target="_blank">javaweb项目验证码的实现</a>
                               </li>
                        </ul>
                          <ul class="similar_list fr">
                               <li>
                                   <em>•</em>
                                   <a href="http://luanxiyuan.iteye.com/blog/2236958" title="javaweb项目发布到tomcat后无法访问,问题解决方案" strategy="BlogCommendFromCsdn" target="_blank">javaweb项目发布到tomcat后无法访问,问题解决方案</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://blog.csdn.net/w695050167/article/details/17439107" title="《百度云平台验证码实现》-----javaweb" strategy="BlogCommendFromCsdn" target="_blank">《百度云平台验证码实现》-----javaweb</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://wwwlike.iteye.com/blog/871019" title="Javaweb项目参数get传递需要编码" strategy="BlogCommendFromCsdn" target="_blank">Javaweb项目参数get传递需要编码</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://blog.csdn.net/chenchudongsg/article/details/39267721" title="JavaWEb基础之实现验证码" strategy="BlogCommendFromCsdn" target="_blank">JavaWEb基础之实现验证码</a>
                               </li>
                               <li>
                                   <em>•</em>
                                   <a href="http://zretc.iteye.com/blog/1884847" title="JavaWeb中验证码的实现" strategy="BlogCommendFromCsdn" target="_blank">JavaWeb中验证码的实现</a>
                               </li>
                        </ul>
                    </div>
                </div>
            </div>
JAVAWEB项目如何实现验证码 (转)的更多相关文章
- JAVAWEB项目如何实现验证码
		
验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...
 - JavaWeb项目实现图片验证码
		
一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,调用“动态验证码短信获 ...
 - 手把手教你做JavaWeb项目:登录模块
		
现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...
 - log4j在javaWeb项目中的使用
		
在前边的文章中对log4j的配置文件进行了说明,今天介绍如何在普通的javaWeb项目中使用log4j. 在日常的开发过程中,日志使用的很频繁,我们可以利用日志来跟踪程序的错误,程序运行时的输出参数等 ...
 - Druid使用起步—在javaWeb项目中配置监控   连接池
		
当我们在javaWEB项目中使用到druid来作为我们的连接池的时候,一定不会忘了添加监控功能.下面我们就来看一下,在一个简单的web项目中(尚未使用任何框架)我们是如果来配置我们的web.xml来完 ...
 - (转)一个JavaWeb项目开发总结
		
原文地址:http://www.cnblogs.com/lzb1096101803/p/4907775.html 一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml-&g ...
 - JavaWeb项目前端规范(采用命名空间使js深度解耦合)
		
没有规矩不成方圆,一个优秀的代码架构不仅易于开发和维护,而且是一门管理与执行的艺术. 这几年来经历了很多项目,对代码之间的强耦合及书写不规范,维护性差等问题深恶痛绝.在这里,通过仔细分析后,结合自己的 ...
 - 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
		
1.服务器(Server)响应,浏览器(Brower)请求: 对于B/S的软件,数据的传递体现在,用户利用浏览器请求,以获得服务器响应.在JavaWeb项目中,大致包含.java文件的数据处理模块,和 ...
 - 四、使用Maven和使用Eclipse构建javaWeb项目
		
环境前边已经搭建过了,我们就再弄了. 1.使用Maven构建javaWeb项目 (1).键入以下命令: $ mvn archetype:generate -DgroupId=com.holytax.w ...
 
随机推荐
- 跨域访问之CORS
			
CORS:定义 2014年1月16日,W3C的Web应用工作组(Web Applications Working Group)和Web应用安全工作组(Web AppSec)联合发布了跨源资源共享(Cr ...
 - 2.1 insertion sort 《算法导论》答案
			
2.1 insertion sort <算法导论>答案 答案索引帖 2.1-1 Using Figure 2.2 as a model, illustrate the operation ...
 - 【TOP】top命令的load average的意义
			
一. 怎么查看机器负载 uptime 命令: $uptime 14:32:32 up 108 days, 23:04, 17 users, load average: 0.06, 0.08, 0.0 ...
 - 关于hibernate的缓存使用(转)
			
原文链接:http://blog.csdn.net/woshichenxu/article/details/586361#t0 1. 关于hibernate缓存的问题: 1.1.1. ...
 - HTML5 开发APP(打开相册以及图片上传)
			
我们开发app,常常会遇到让用户上传文件的功能.比如让用户上传头像.我公司的业务要求是让用户上传支付宝收款二维码,来实现用户提现的功能.想要调用相册要靠HTML Plus来实现.先上效果图 基本功能是 ...
 - C#中的ToString格式大全
			
// C# 日期格式 DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString() ...
 - Infer 在 Mac 上的安装和环境配置
			
Infer 在 Mac 上的安装和环境配置 Infer 介绍 Infer 是一个静态分析工具.Infer 可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使 ...
 - 抓取60000+QQ空间说说做一次数据分析
			
对于QQ空间的数据一直来是垂涎不已,老早就想偷过来研究研究,这几天闲下来便开始动手... 整个程序的流程为:登录-->获取cookie-->获取所有的好友qq_number-->根据 ...
 - Android学习笔记-ScrollView(滚动条)
			
本节引言: 本节带来的是Android基本UI控件中的第十个:ScrollView(滚动条),或者我们应该叫他 竖直滚动条,对应的另外一个水平方向上的滚动条:HorizontalScrollView, ...
 - matlab怎么查看已安装哪些工具箱和…
			
问题描述:matlab怎么查看已安装哪些工具箱和它们相应的版本 解决方法:在命令行里敲击der,回车 效果: