当前位置:  互联网>综合
本页文章导读:
    ▪怎样用java实现验证码      现在许多系统的注册、登录或者发布信息模块都添加的随机验证码功能,就是为了避免自动注册程序或者自动发布程序的使用。  验证码实际上就是随机选择一些字符以图片的形式展现在.........
    ▪为什么网页不显示验证码       本来验证码是为了对付大量的自动注册机、自动回贴机而出现的,这种技术一出现,那些自动化软件马上就没有了立足之地,但是有矛必有盾,为了破解验证码,验证码识别的技术也随之出.........
    ▪android开发之AsyncTask的用法       在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个.........

[1]怎样用java实现验证码
    来源: 互联网  发布时间: 2013-10-25
现在许多系统的注册、登录或者发布信息模块都添加的随机验证码功能,就是为了避免自动注册程序或者自动发布程序的使用。 
验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别验证码的难度。 

在这里,我们使用java实现验证码。 

<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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);
         }
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width=60, height=20;
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,18));


// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;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 codeList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";

String sRand="";


for (int i=0;i<4;i++){
  int a=random.nextInt(codeList.length()-1);
      String rand=codeList.substring(a,a+1);
      sRand+=rand;
     // 将认证码显示到图象中
     g.setColor(new Color(20+random.nextInt(110),20+random.next
    
[2]为什么网页不显示验证码
    来源: 互联网  发布时间: 2013-10-25

本来验证码是为了对付大量的自动注册机、自动回贴机而出现的,这种技术一出现,那些自动化软件马上就没有了立足之地,但是有矛必有盾,为了破解验证码,验证码识别的技术也随之出现了,作为验证码的对立面,它对网络安全有没有促进作用呢?当然有。但是很多时候网页也会有不显示验证码是情况,遇到这种情况该怎么处理呢?我们来看看一下方案吧。。

针对
XP SP2
系统的解决办法
 
  
一、情况一:由与网速慢原因会造成页面打开慢进而影响验证码图片显示
 
  
处理方式:请稍后再试等待网络状态恢复正常,或稍后重新刷新。
 
  
二、情况二:由于使用的浏器不兼容产生不能显示验证码
 
  
处理方式:使用通用的浏览器如(IE、MYIE等)
 
  
三、安装
windows xp sp2
系统后某些网站后台验证码不能显示的问题
 
  
用户计算机安装了
windows XP SP2
系统后(包括最新的win2003sp1),在一些网站上在进行用户注册或后台管理登录需要输入验证码时,页面却无法显示验证码,(而在计算机升级为windows XP SP2)
以前却可以显示。其原因是大部分的验证码都是以图片形式出现的,且图片格试一般为.xbm,而Windows XP SP2操作系统在默认状态下是不支持该图片格式的,所以,无法显示验证码。解决办法
  
 
网页不显示验证码的原因与处理方法: 
  
使用
 开始->运行,在运行输入框中输入
 “regsvr32 c:windowssystem32pngfilt.dll”(弹出框显示已成功,然后点击确定)
  重开浏览器
 OK!若是不行,请往下看:
具体解决方法描述 
 
Windows XP
操作系统,安装了Service Pack 2正式版后,原来一些需要验证码(以图片形式显示的)的网站就登录不了,验证码不能正常显示。让
Windows XP再显示验证码的补丁其实就是个注册表文件,新建文本文档
 
内容:
  
Windows Registry Editor Version 5.00 
(此处是一空行)
  
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Security] 
"BlockXBM"=dword:00000000 
  
将以上字符保存到文本编辑器(如Windows自带的“记事本”),存为“所有文件”,文件名扩展名为123.reg,导入到注册表即可生效。
 
重新启动电脑,使注册表生效,即可显示验证码。 
 
为什么XP SP2会默认不显示验证码呢?原来微软公司在XP SP2里面默认不显示XBM图形格式。 
X-Bitmap(XBM)是一种古老但通用的图像文件格式,它与现在的许多Web浏览器都兼容。X-Windows图形界面UNIX和Linux常用的GUI)的C代码库xlib中有一个组件专门描述了它的规范。XBM图形的实质上是使用16进制数组来表示二进制图像的C源代码文件。
  
针对
XP SP3
系统的解决办法
 
 
“开始”—“运行”—输入
 " regsvr32 c:windowssystem32pngfilt.dll "(不包括双引号哦)
 如果显示成功了那就对了
 如果显示找不到输入点那就说明你的pngfilt.dll文件损坏了,去下一个pngfilt.dll到system32,再次输入regsvr32 c:windowssystem32pngfilt.dll确定。

文章出自:http://www.zhima365.com/shownews.php?id=369

作者:zhima365 发表于2013-6-5 16:21:54 原文链接
阅读:73 评论:0 查看评论

    
[3]android开发之AsyncTask的用法
    来源: 互联网  发布时间: 2013-10-25

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。

Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制。关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下。

为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任务变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务。

先来看看AsyncTask的定义:

public abstract class AsyncTask<Params, Progress, Result> {  

三种泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。

一个异步任务的执行一般包括以下几个步骤:

1.execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。

2.onPreExecute(),在execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。

3.doInBackground(Params... params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。

4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。

5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。

在使用的时候,有几点需要格外注意:

1.异步任务的实例必须在UI线程中创建。

2.execute(Params... params)方法必须在UI线程中调用。

3.不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法。

4.不能在doInBackground(Params... params)中更改UI组件的信息。

5.一个任务实例只能执行一次,如果执行第二次将会抛出异常。

(以上内容转自:http://blog.csdn.net/liuhe688/article/details/6532519)

为了对该方法有更为深入的认识,下面以一个例子来说明。

该例子要实现的是进度条倒计时的功能。时长30s,随着时间的减少,进度条逐渐缩短,同时文本框中的剩余时间也相对应减少。

import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;

class TestAsyncTask extends AsyncTask<String, Integer, String>  
{  
	FullscreenActivity activity;  
	TextView textView;
	ProgressBar bar;

	public TestAsyncTask(FullscreenActivity activity, TextView textView, ProgressBar bar ) {
		this.activity = activity;
		this.textView = textView;
		this.bar = bar;
	}
    //TestAsyncTask被后台线程执行后,被UI线程被调用,一般用于初始化界面控件,如进度条  
    @Override 
    protected void onPreExecute() {  
        // TODO Auto-generated method stub  
        super.onPreExecute();  
    }  

    //doInBackground执行完后由UI线程调用,用于更新界面操作  
    @Override 
    protected void onPostExecute(String result) {  
        // TODO Auto-generated method stub  
    	
    	
        //textView.setText(result);  
        super.onPostExecute(result);  
    }  

    //在PreExcute执行后被启动AysncTask的后台线程调用,将结果返回给UI线程  
    @Override 
    protected String doInBackground(String... params) {  
        // TODO Auto-generated method stub  
        bar.setMax(300);
        int i = 30;
    	while(true)
    	{
    		publishProgress((int)i);
    		if(i == 0 ) break;
    		try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    		i--;
    		
    	}
        return null;  
    }
	@Override
	protected void onProgressUpdate(Integer... values) {
		// TODO Auto-generated method stub
		bar.setProgress(values[0]*10);  
        textView.setText("" + values[0] + " s");  
		
		super.onProgressUpdate(values);
	}  
    
       
}  

在UI线程中:

new TestAsyncTask(FullscreenActivity.this, textView, bar).execute("");

以上采用了AsyncTask来实现异步更新进度条。能够不影响程序运行的基础上在后台不断更新前端UI。

该方法还可以用来显示处理进度、计时、载入进度等功能。


作者:yahohi 发表于2013-6-5 16:09:48 原文链接
阅读:79 评论:0 查看评论

    
最新技术文章:
▪用户及权限基础 2---- Linux权限    ▪用户及权限基础 3---- Linux扩展权限    ▪git 简明教程(1) --创建及提交
▪背包 代码    ▪json对象的封装与解析    ▪01背包,完全背包,多重背包 ,模板代码
▪apache安装详解    ▪HDU 4668 Finding string (解析字符串 + KMP)    ▪《TCP-IP详解 卷1:协议》学习笔记(二)
▪《TCP-IP详解 卷1:协议》学习笔记(持续更新...    ▪windows下使用swig    ▪gensim试用
▪Linux Shell脚本编程--nc命令使用详解    ▪solr对跨服务器表联合查询的配置    ▪递归和非递归实现链表反转
▪Linux磁盘及文件系统管理 1---- 磁盘基本概念    ▪Cholesky Decomposition    ▪HTTP协议学习
▪用C语言写CGI入门教程    ▪用hdfs存储海量的视频数据的设计思路    ▪java多线程下载的实现示例
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法 iis7站长之家
▪二维数组中的最长递减子序列    ▪内嵌W5100的网络模块WIZ812MJ--数据手册    ▪xss 跨站脚本攻击
▪RobotFramework+Selenium2环境搭建与入门实例    ▪什么是API    ▪用PersonalRank实现基于图的推荐算法
▪Logtype    ▪关于端口号你知道多少!    ▪Linux基本操作 1-----命令行BASH的基本操作
▪CI8.7--硬币组合问题    ▪Ruby on Rails 学习(五)    ▪如何使用W5300实现ADSL连接(二)
▪不允许启动新事务,因为有其他线程正在该会...    ▪getting start with storm 翻译 第六章 part-3    ▪递归求排列和组合(无重复和有重复)
▪工具类之二:RegexpUtils    ▪Coding Interview 8.2    ▪Coding Interview 8.5
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法
▪Softmax算法:逻辑回归的扩展    ▪最小生成树---Kruskal算法---挑战程序设计竞赛...    ▪J2EE struts2 登录验证
▪任意两点间的最短路径---floyd_warshall算法    ▪Sqoop实现关系型数据库到hive的数据传输    ▪FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream...
▪Ubuntu 13.04 – Install Jetty 9    ▪TCP/IP笔记之多播与广播    ▪keytool+tomcat配置HTTPS双向证书认证
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法
▪sre_constants.error: unbalanced parenthesis    ▪http headers    ▪Google MapReduce中文版
▪The TCP three-way handshake (connect)/four wave (closed)    ▪网站反爬虫    ▪Log4j实现对Java日志的配置全攻略
▪Bit Map解析    ▪Notepad 快捷键 大全    ▪Eclipse 快捷键技巧 + 重构
▪win7 打开防火墙端口    ▪Linux Shell脚本入门--awk命令详解    ▪Linux Shell脚本入门--Uniq命令
▪Linux(Android NDK)如何避免僵死进程    ▪http Content-Type一览表    ▪Redis实战之征服 Redis + Jedis + Spring (二)
▪Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源...    ▪利用SQOOP将ORACLE到HDFS    ▪django输出 hello world
▪python re    ▪unity3D与网页的交互    ▪内存共享基本演示
▪python join    ▪不再为无限级树结构烦恼,且看此篇    ▪python实现变参
▪打开文件数限制功能不断地制造问题    ▪Arduino Due, Maple and Teensy3.0 的 W5200性能测试    ▪Selenium实例----12306网站测试
▪基于协同过滤的推荐引擎    ▪C4.5决策树    ▪C#HTTP代理的实现之注册表实现
▪nosql和关系型数据库比较?    ▪如何快速比较这两个字符串是否相等?    ▪hdoj 1863 畅通工程 最小生成树---prime算法
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3