- 浏览: 197269 次
- 性别:
- 来自: 广州
最新评论
-
lxyoucan:
特地注册账号来感谢
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置 -
jinjiaoliu:
...
ant使用scp上传文件问题 -
AspirantHui:
非常感谢,你提供的方法解决了我的问题!
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置 -
cxh61207:
...
ant使用scp上传文件问题 -
daoyuanjiao:
如果用的是福昕PDF阅读器,该怎么弄呢?
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置
〔Picture.java〕
〔CreateImage.java〕
〔web.xml〕
〔index.jsp〕
<%@page contentType="text/html; charset=gb2312" %>
<%@page import="javabean.com.Picture"%>
<%
Picture pic = new Picture();
String random =pic.getRandom();
String encryRandom= pic.manage(random );
%>
<html>
<head>
<title>登陆窗口</title>
</head>
<body>
<div align="center">
<p align="center">附加码:<input type="attach" size="4">
<img align=absbottom vspace=2 border=0 src="servlet/CreateImage?Image=<%=encryRandom%>&Rgb=255|0|0" title="验证码图片"></p>
<input type="hidden" name="get_attach" value="<%=random%>">
</div>
</body>
</html>
package creator.common.attachLogin; import java.io.*; public class Picture{ final int key=1; final String error_format_int= "format of color is not rgb.sample \"212|232|0\""; final String error_color_input="format of color(num|num|num): num in 0-255"; /**格式化输出数据**/ public String manage(String temp){ String returnStr=""; temp = encrypt(temp); byte[] by =temp.getBytes(); for(int i=0;i<by.length;i++){ returnStr=returnStr+(byte)by[i]+"|"; } return returnStr; } /**格式化输入数据**/ public byte[] disManage(String temp){ int len=0,index=0,i=0,first=0; while(( i=temp.indexOf("|",first))>-1){ len++; first=i+1; } byte[] by=new byte[len]; first=0; while(( i=temp.indexOf("|",first))>-1){ by[index]=Byte.parseByte(temp.substring(first,i)); index++; first=i+1; } return by; } /**随机生成四位的附加码**/ public String getRandom(){ int i1 = (int)(java.lang.Math.random()*10); int i2 = (int)(java.lang.Math.random()*10); int i3 = (int)(java.lang.Math.random()*10); int i4 = (int)(java.lang.Math.random()*10); return String.valueOf(i1)+String.valueOf(i2)+String.valueOf(i3)+String.valueOf(i4); } /**加密1:错位处理**/ public String encrypt(String randomStr){ String para=random()+randomStr.substring(0,1)+random()+random()+randomStr.substring(1,2); para= para+random()+randomStr.substring(2); return jiaMi(para); } /**得到随机数0-9之间**/ private String random(){ String temp = String.valueOf((int)(java.lang.Math.random()*10)); return temp; } /**加密2:加密处理,此方法可以自己修改**/ private String jiaMi(String str){ byte[] by = str.getBytes(); ByteArrayInputStream in = new ByteArrayInputStream(by); int ch; int index=0; byte[] temp = new byte[in.available()]; while((ch=in.read())!=-1){ temp[index]=(byte)(ch-key); index++; } ByteArrayInputStream ins = new ByteArrayInputStream(temp); BufferedReader fReader = new BufferedReader(new InputStreamReader(ins)); try{ return fReader.readLine();}catch(Exception e){return "";} } /**从给的数字里得到正确的数字**/ public String discrypt(String temp){ String para = jieMi(disManage(temp)); return para.substring(1,2)+para.substring(4,5)+ para.substring(6,8); } /**解密处理**/ private String jieMi(byte[] by){ ByteArrayInputStream in = new ByteArrayInputStream(by); int ch; int index=0; byte[] temp = new byte[in.available()]; while((ch=in.read())!=-1){ temp[index]=(byte)(ch+key); index++; } ByteArrayInputStream ins = new ByteArrayInputStream(temp); BufferedReader fReader = new BufferedReader(new InputStreamReader(ins)); try{ return fReader.readLine();}catch(Exception e){return "";} } /**分解rgb格式的颜色 num|num|num**/ public int[] masterData(String temp){ int index_len=0,index=0,next_index=0; int[] return_arr=new int[3]; boolean break_error=false; if(getMax(temp,"|")==2){ while((index_len=temp.indexOf("|",next_index))>-1){ if(getInt(temp.substring(next_index,index_len))==256){ break_error = true; }else{ return_arr[index]=getInt(temp.substring(next_index,index_len)); next_index=index_len+1; index++; } if(break_error) break; } if(break_error){ return null; }else{ return_arr[index] = getInt(temp.substring(next_index)); return return_arr; } }else{ System.out.println(error_format_int+":"+temp); return null; } } private int getMax(String temp,String temp2){ int index=0,index_len=0,index_next=0; while((index=temp.indexOf(temp2,index_next))>-1){ index_len++; index_next=index+1; } return index_len; } private int getInt(String temp){ try{ return Integer.parseInt(temp); }catch(Exception e){ System.out.println(error_color_input+":"+temp); return 256; } } }
〔CreateImage.java〕
package creator.common.attachLogin; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.awt.*; import java.awt.image.*; import java.awt.image.BufferedImage; import com.sun.image.codec.jpeg.*; import com.sun.image.codec.jpeg.JPEGCodec; public class CreateImage extends HttpServlet { static final private String CONTENT_TYPE = "text/html; charset=gb2312"; final String input_back_color_error="input rgb backcolor is error"; final String input_fore_color_error="input rgb forecolor is error"; private Picture pic = new Picture(); //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //生成图片 try{ int imageWidth = 60; int imageHeight = 20; BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); Graphics graphics = image.getGraphics(); graphics.setColor(Color.white); graphics.fillRect(0,0,imageWidth,imageHeight); graphics.setColor(Color.white); FileOutputStream fos = new FileOutputStream("attach.jpg"); BufferedOutputStream bos = new BufferedOutputStream(fos); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos); encoder.encode(image); bos.close(); }catch(Exception e){ System.out.println("生成图片出错!"); } String queryNum = request.getParameter("Image"); String queryRgb=""; if(request.getParameter("Rgb")!=null){ queryRgb = request.getParameter("Rgb"); } response.setHeader("Cache-Control","no-store"); response.setContentType("image/jpeg"); ServletOutputStream out=response.getOutputStream(); //jpg格式的背景色图片(于页面风格一样),宽3.6毫米,高1.8毫米 InputStream imageIn = new FileInputStream(new File("attach.jpg")); JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn); BufferedImage image4 = decoder.decodeAsBufferedImage(); queryNum = pic.discrypt(queryNum); Graphics g = image4.getGraphics(); if(queryRgb.length()>1){ if(pic.masterData(queryRgb)!=null){ int[] arg = pic.masterData(queryRgb); g.setColor(new Color(arg[0],arg[1],arg[2])); } }else{ g.setColor(new Color(255,0,0)); } g.drawString(queryNum,0,13); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image4); out.close(); } }
〔web.xml〕
<servlet> <servlet-name>CreateImage</servlet-name> <servlet-class>javabean.com.CreateImage</servlet-class> </servlet> <servlet-mapping> <servlet-name>CreateImage</servlet-name> <url-pattern>/servlet/CreateImage</url-pattern> </servlet-mapping>
〔index.jsp〕
<%@page contentType="text/html; charset=gb2312" %>
<%@page import="javabean.com.Picture"%>
<%
Picture pic = new Picture();
String random =pic.getRandom();
String encryRandom= pic.manage(random );
%>
<html>
<head>
<title>登陆窗口</title>
</head>
<body>
<div align="center">
<p align="center">附加码:<input type="attach" size="4">
<img align=absbottom vspace=2 border=0 src="servlet/CreateImage?Image=<%=encryRandom%>&Rgb=255|0|0" title="验证码图片"></p>
<input type="hidden" name="get_attach" value="<%=random%>">
</div>
</body>
</html>
发表评论
-
Java之RMI设计模式基本原理与示例
2013-01-23 14:45 10461. Name RMI是Romote Method Invo ... -
Java常用的通信协议效率比较(转)
2013-01-23 14:38 1530本文比较了RMI,Hessian, ... -
JQuery工具插件qTip
2011-12-14 17:38 1168好吧,原谅我偷懒:http://messense.me/jqu ... -
JAVA解压缩文件——包含嵌套的压缩文件
2011-09-15 09:19 3004今天主要介绍JAVA处理ZIP文件,JAVA提供了相应的类、方 ... -
面试题--求质数
2011-04-29 13:04 1181求100以内的质数(指在一个大于1的自然数中,除了1和此整数自 ... -
Workspace in use or cannot be created, choose a different one.--错误解决办法
2010-11-25 13:16 1583eclipse 使用一段时间后,有时会因为一些故障自己就莫名 ... -
Java定时任务Timer
2010-11-19 11:12 1347Java定时任务,用到的地方可能比较多,例如:定时对数据库的某 ... -
AOP监听的简单例子
2010-11-11 16:13 1362Spring AOP是面向切面的方式,大部分项目使用它都是在事 ... -
Tomcat 启动时加载方法
2010-11-11 15:54 1534最近遇见一个需求,需要在项目中加入一个Mina通讯的客户端,而 ... -
AOP几个重要的概念
2010-11-09 16:45 1729《Spring参考手册》中定义了以下几个AOP的重要概念: ... -
结果集转换成json字符串
2010-08-25 11:20 3129在项目中做查询时一般使用:sql或者hql,今天分别介绍一下怎 ... -
java还原科学计数法的数值
2010-08-06 15:26 1947java.text.DecimalFormat nf = ne ... -
java.lang.IllegalArgumentException: No bean specified
2010-08-04 17:04 2886java.lang.IllegalArgumentExcept ... -
argument type mismatch问题解决
2010-07-01 09:31 6474type Exception report messag ... -
实现sybase数据库字段自增
2010-04-23 13:44 1047例如:在sybase中有一张用户表t_ug_user,其中包含 ... -
Hibernate框架ORM的原理
2010-04-21 14:48 1176hibernate,通过对jdbc进行封装,对 java类和 ... -
net.sourceforge.jtds.jdbc.ClobImpl 问题
2010-02-08 14:45 2790小弟最近在做数据查询时,遇到一个这样的问题: 数据列 ... -
父子页面之间值传递问题
2009-12-31 17:26 1537第一:页面中包含iframe ... -
Oracle函数和mysql函数比较
2009-12-31 17:23 21331. Oracle中的to_number()转换成 ... -
fusioncharts生成图表flash遮挡页面中元素的情况
2009-12-31 15:57 2178在做web开发中遇到fusionc ...
相关推荐
Java获取小程序带参二维码(太阳码)调用官方接口B 实现带参二维码获取,下载复制就可使用
密码生成器 模组 核 核心密码生成器库。 可以单独作为库分发。 网络API 一个简单的Micronaut Java Web应用程序,它公开了核心密码生成功能。 附加功能 该项目具有一个docker-compose文件,该文件可启动以下命令: ...
然后SchoolEbay\database目录下的数据库文件附加到Sql Server,具体操作是打开企业管理器,在左边的树状列表中右击数据库,在弹出的快捷菜单中选择“所有任务”|“附加数据库”命令,再选择要附加的数据库文件即可。...
java虚拟机源码基于JVM的编译器 该程序通过使用递归下降解析器将源代码转换为字节码。 该程序假定源代码是基于附加的属性语法定义的。 将源代码转换为字节码后,可以使用jvm运行该程序。
Sarras是用于Graal Substrate VM的生成器工具,通过Java Applicatons的静态和动态配置进行分析。 请参阅有关此方法的技术讨论: : 静态剖析 解析给定jar中所有类的字节码,自省反射调用(通过反射访问类/方法/...
命令行和GUI工具,用于从Android Dex和apk文件生成Java源代码。将 Dalvik 字节码从 APK、dex、aar、aab 和 zip 文件反编译为 java 类。解码 AndroidManifest.xml 和 resources.arsc 中的其他资源。包括去混淆器。请...
正统的类加载器架构 / 232 9.2.2 OSGi:灵活的类加载器架构 / 235 9.2.3 字节码生成技术与动态代理的实现 / 238 9.2.4 Retrotranslator:跨越JDK版本 / 242 9.3 实战:自己动手实现远程执行功能 / 246 9.3.1 ...
9.2.3 字节码生成技术与动态代理的实现 9.2.4 Retrotranslator:跨越JDK版本 9.3 实战:自己动手实现远程执行功能 9.3.1 目标 9.3.2 思路 9.3.3 实现 9.3.4 验证 9.4 本章小结 第四部分 程序编译与代码优化...
Java网络购物中心源码+程序使用说明书: MR网络购物中心使用说明书 配置源程序 附加SQL Server 2005数据库 (1)将MR\11\WebRoot\Database文件夹中的扩展名为db_shop_Data.MDF和db_shop_Log.LDF的两个文件拷贝到本地...
实例212 大乐透号码生成器 267 实例213 监视JVM内存状态 268 实例214 启动默认文本工具 269 实例215 简单的截图软件 270 第10章 Commons组件 272 10.1 Commons Lang组件简介 273 实例216 数组元素的增加 273 实例217...
密钥库资源管理器 KeyStore Explorer是Java命令行实用程序keytool和jarsigner的免费GUI替代品。 官方网站: : 特征: 在各种KeyStore类型之间创建,加载,保存和转换:JKS,JCEKS,PKCS#12,BKS(V1和V2)和...
代码生成器: 主界面: XML界面: 数据层界面: 业务层界面: 联系 QQ: 20255524 、Email: yyilin@163.com 数据库在DB_51aspx文件下,附加即可,用户名和密码 admin/51aspx 普通用户 demo1/111.
记录器、附加器、布局解释 - 登录配置 线程和并发 - 处理中断异常 - 如何在 Java 中中断线程 - ExecutorService 解释 - ExecutorService 风险 - Executor Service 10 提示和技巧 和 - 线程解释,线程状态是什么以及...
在浏览器兼容性方面,目前多种浏览器并存,使用非IE浏览器的用户越来越多,即使是IE浏览器也有多种版本。系统所有web页面制作遵循w3c标准制作,采用最新的html5规范,基于div+css布局,所有标签生成的html代码都经过...
RetrieveBulkAPIResults 这个 Java 程序的目标是从数据加载器生成的日志文件中提取作业 ID 以及附加参数,并生成成功和错误的 CSV 文件。 它使用以下库: Force.com WSC Apache Commons CLI Apache 公共日志记录日志...
Java Servlet API说明文档 绪言 这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份...
说明: 使用字节或码点语义来指定新列的创建, 如 char, varchar2, clob, nchar, nvarchar2, nclob 列。各种字符集对字符都有各自的定义。在客户机和服务器上使用同一字符集时, 应以该字符集所定义的字符来衡量字符串...