首页 > 编程知识 正文

java识别图片验证码,JAVA验证码

时间:2023-05-03 17:53:26 阅读:151719 作者:2271

JSP页面使用后台生成的图像认证码

在后台生成认证码图像码

@Controller

@scope(prototype ) )。

@ request mapping (value='/image code ' ) )。

publicclassimagecodecontrollerextendsbasecontroller

privatestaticfinallongserialversionuid=1l;

privatestaticloggerlogger=logger.getlogger (imagecodecontroller.class;

@requestmapping(value='/get ' ) )。

公共服务响应代码(httpservletrequestrequest,HttpServletResponse response ) )。

throws IOException {

//创建图像缓冲区

bufferedimagebi=newbufferedimage (68,22,BufferedImage.TYPE_INT_RGB );

//从缓冲区创建画布

Graphics g=bi.getGraphics (;

//制作颜色

colorc=new color (200,150,255 );

//创建画布的背景色

g.setcolor(c );

//fillRect:填充指定的矩形

g.fillrect (0,0,68,22 );

//转换为字符类型数组

char [ ] ch=' abcdefghijklmnopqrstuvwxyz 0123456789 '.tochararray (;

Random r=new Random (;

int len=ch.length;

//index用于存储随机数字

索引;

StringBuffer sb=new StringBuffer (;

for(intI=0; i4; I ) {

//产生随机数字

index=r.nextint(Len;

//设置颜色

g.setcolor(newcolor ) r.nextint ) 88、r.nextint ) 188和r.nextint ) 255 ) );

//画数字和数字的位置

g.drawstring(ch[index] ',(i*15 ) 3、18 );

sb.append(ch[index] );

}

//将数字保留在session中,以方便后续使用

request.getSession ().setattribute (),sb.toString ) );

//运行到此为止,页面上也不会出现认证码图像

imageio.write(bi,' JPG ',response.getOutputStream ) );

}

}

可以显示Firefox,但不显示chrome

设置断点调试后,在imagecode.htm的最后一步return中将显示chrome页面,您可以在其中继续丢失验证码图像

Chrome提示错误:

failedtoloadresource : net :3360 err _ incomplete _ chunked _ encoding

这是因为对于非持久性连接,浏览器可以根据连接是否关闭来定义请求或响应实体的边界。对于持久性连接,此方法明显无效。 在上面的例子中,我发送了所有的数据,但是浏览器不知道这个打开的连接会不会有新的数据进来,只能傻傻地等待。

HTTP/1.0的持久连接机制是后来引入的,在Connection: keep-alive的头部实现,服务器端和客户端都使用它发送数据后不需要断开TCP连接HTTP/1.1规定所有连接都必须是持久性的,除非明确地将Connection: close添加到头部。 因此,实际上,HTTP/1.1中的Connection标头字段没有keep-alive值,但由于历史原因,许多web服务器和浏览器都使用HTTP/1.1长连接进行连接

块传输编码仅在HTTP协议版本1.1(http/1.1 )中提供。

问题的原因:

Chrome浏览器使用的是HTTP/1.1,不知道数据传输是否完成

解决方案:

我尝试的方法如下

response.setheader (' transfer-encoding ',' JPG ' );

问题:传输加密选项值chunked/identity

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。