JSP开发之生成图片验证码技术的详解
我们在网页注册用户时,常常会需要格根据图片给的图片验证码把验证码输进去。那么我们今天就来学习这个。
简单来说分为三步骤:
1.底层用爪哇实现生成验证码图片2.通过配置文件调用实现爪哇生成片3.通过超文本标记语言技术把图片显示到网页
首先是最底层爪哇生成图片代码
包裹cn。hncu。servlet导入Java。啊。颜色;导入Java。啊。字体;导入Java。啊。图形;导入Java。啊。图像。bufferedimage导入Java。io。文件输出流;导入Java。io。ioexception导入Java。乌提尔。随机的;导入javax。imageio。imageio导入javax。servlet。servletexception导入javax。servlet。http。HttpServlet导入javax。servlet。http。HttpServletrequest导入javax。servlet。http。HttpServletResponse公共类CodeImgServlet扩展了HttpServlet { @覆盖受保护的void服务(HttpServletrequest请求,HttpServletResponse)引发ServletException,IOException { //1 -相比纯爪哇岛方式有变化的地方resp。setcontenttype(' image/JPEG ');//设置超文本传送协议(超文本传输协议的缩写)响应头-告诉浏览器我现在发的是这个图片格式的数据,你用相应的方式来解析//定义图片的宽和高int w=60int h=30//声明一个RGB格式的内存中的图片BufferedImage img=新BufferedImage(w,h,BufferedImage .TYPE _ INT _ RGB);图形g=img。GetGraphics();//把背景变白色设置颜色(白色);g.fillRect(0,0,w,h);//设置字体设置字体(新字体(' aa ',字体BOLD,18));//产生并画出四个随机数字Random r=new Random();for(int I=0;i4;I){ int a=r . nextint(10);//生成0~9之间的随机整数int y=15 r . Nextint(20);//产生随机的垂直位置//产生随机颜色Color c=new Color(r.nextInt(256),r.nextInt(256),r . nextint(256));g . SetColor(c);g .拉长(' a,i*15,y);} //画几条干扰线for(int I=0;i10i ){ //产生随机颜色Color c=new Color(r.nextInt(256),r.nextInt(256),r . nextint(256));g . SetColor(c);g .画线(r.nextInt(60),r.nextInt(30),r . nextint(60),r . nextint(30));} g . dispose();//类似于超正析象管(图像或图标)中的flush(),把图形数据刷到img中//把内存图片img对象保存到一个使用联合图象专家组文件交换格式存储的编码图像文件扩展名文件ImageIO.write(img,' JPEG ',分别为。getoutputstream());//2 }}项目中的Web.xml配置文件代码
?可扩展标记语言版本='1.0 '编码='UTF-8 '?web-app版本=' 3.0 ' xmlns=' http://Java。星期日com/XML/ns/javaee ' xmlns : xsi=' http://www .w3。org/2001/XMLSchema-实例' xsi :架构位置=' http://Java。星期日com/XML/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'显示名称/显示名称!-安全目录中的jsp文件如果要允许外面访问,得在web.xml进行配置,配置成一个JSP-servlet-servlet servlet-name ajsp/servlet-name!-配置小型应用程序用小型应用程序类,配置jsp页面用jsp文件标签-JSP-file/WEB-INF/JSP/a . JSP/JSP-file/servlet!-servlet servlet-name codeimgservlet/servlet-name servlet-class cn。hncu。servlet。codeimgservlet/servlet-class/servlet servlet servlet servlet-name loginservlet/servlet-name servlet-class cn . hncu . servlet . loginservlet/servlet-class/servlet-servlet servlet-name codeimgservlet/servlet-name servlet-class cn。hncu。servlet。codeimgservlet/servlet-class/servlet servlet servlet-name loginservlet/servlet-name servlet-class cn . hncu . servlet . loginservlet/servlet-class/servlet!-给小型应用程序配置访问路径-servlet-映射servlet-name ajsp/servlet-name URL-pattern/x/a . ASP/URL-pattern/servlet-映射servlet-映射servlet-name codeimgservlet/servlet-name URL-pattern/URL-pattern/servlet-映射servlet-映射servlet-映射servlet-nameLoginServlet/servlet-name URL-pattern/servlet-映射欢迎-文件-列表welcome-fileindex.jsp/welcome-file/欢迎-文件-列表/web-app主页面代码登录代码
“% @”页面语言=“Java”导入=“Java”。乌提尔。* "页面编码=' UTF-8 ' %!' DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN ' HTML头部脚本类型='text/javascript '函数change img(){ var img=document。getelementbyid(' CodeIMg ');//当科学研究委员会每次的路径方式变化时,就会去重新请求一次后台img.src='http:code?新日期()。getTime();}/脚本/头体氘用户注册/h2表单操作='LoginServlet '方法='post '姓名:输入类型='text' name='name'br/密码:输入类型='password' name='pwd'br/!-验证码:输入类型=' text ' name=' code '/img src=' http : imgs/a . jpg '/br/-验证码:输入类型=' text ' name=' code '/img id=' codeImg ' src=' http : code '/a href=' JavaScript : change img();rel='外部' nofollow '看不清/abr/输入类型='提交'值='注册/form br/br/HR/a href=' WEB-INF/JSP/a . JSP ' rel='外部no follow ' WA-a.jsp/a br/a href='/helloWebProj/x/a . ASP ' rel='外部no follow ' AC-a.jsp/a br///body/html当页面加载,就向雄猫请求服务,调用前面的爪哇岛类,生成图片,再通过超文本标记语言文档,将图片加载到页面来。
其次Web.xml配置文件还可以用来设置访问安全目录文件(网络信息)
servlet servlet-name ajsp/servlet-name!-配置小型应用程序用小型应用程序类,配置jsp页面用jsp文件标签-JSP-file/WEB-INF/JSP/a . JSP/JSP-file/servlet servlet servlet servlet-name codeimgservlet/servlet-name servlet-class cn。hncu。servlet。codeimgservlet/servlet-class/servlet servlet servlet servlet-name loginservlet/servlet-name servlet-class cn . hncu . servlet . loginservlet/servlet-class/servlet!-给小型应用程序配置访问路径-servlet-映射servlet-name ajsp/servlet-name URL-pattern/x/a . ASP/URL-pattern/servlet-映射servlet-映射servlet-name codeimgservlet/servlet-name URL-pattern/URL-pattern/servlet-映射servlet-映射servlet-name LoginServlet/servlet-name URL-pattern/LoginServlet/URL-pattern/servlet-映射如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望通过本文能帮助到大家,谢谢大家对本站的支持!