1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JSP作业5:servlet应用--图片验证码

JSP作业5:servlet应用--图片验证码

时间:2019-12-24 10:04:39

相关推荐

JSP作业5:servlet应用--图片验证码

独角兽企业重金招聘Python工程师标准>>>

作业类型:验证性实验

实验目的:掌握Servlet在JSP开发中的应用

实验内容:使用Servlet实现网页验证码功能。

1.编写一个Servlet,实现以下功能:

1)能够响应来自客户端的GET请求,不响应POST和其他请求;

2)请求的url-pattern为“/checkcode”;

3)响应请求时,向浏览器改善验证码图片,验证码由4位字符组成,字符可以是26个英文字母和10个数字。

4)同时将验证码字符串放入session中,以便将来客户端提交验证码时检查是否一致。

2.编写一个login.jsp(见下图),测试验证码是否有效。

1)用户输入正确的验证码,则提示验证码正确;否则提示错误。然后继续显示一个新的验证码。

2)用户点击验证码图片时,更换一个新的验证码。

1.CheckCode.java

packagejune;/**验证码实现思路:*在Servlet中随机产生验证码字符序列,并计入session中,*JSP中以图片的形式进行显示。当用户在JSP表单中输入验证码并提交时,*在相应的Servlet中验证是否与session中保存的验证码一致。*/importjava.awt.*;importjava.awt.image.BufferedImage;importjava.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.annotation.WebServlet;importjavax.servlet.annotation.WebInitParam;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;//注释配置Servlet@WebServlet(name="StoreCode",urlPatterns={"/storecode"},initParams={@WebInitParam(name="width",value="80"),@WebInitParam(name="height",value="30"),@WebInitParam(name="codeCount",value="4")})publicclassStoreCodeextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;privateintwidth=80;//验证码图片的宽privateintheight=30;//验证码图片的高privateintcodeCount=4;//验证码图片的字符数privateintx=16;privateintfontHeight=22;privateintcodeY=22;privatefinalchar[]codeSequence={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException{//构造一个类型为预定义图像类型之一的BufferedImage,设置图像的宽,高,和类型(TYPE_INT_RGB)BufferedImageImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//返回Graphics2D,Graphics2D类扩展自Graphics类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制Graphicsg=Img.getGraphics();Randomrandom=newRandom();//将图像填充为白色g.setColor(Color.WHITE);//填充指定的矩形。x,y坐标均为0,宽为width,高为heightg.fillRect(0,0,width,height);//创建字体,字体的大小应该根据图片的高度来定。Fontfont=newFont("TimesnewRoman",Font.PLAIN,fontHeight);g.setColor(Color.black);g.setFont(font);ColorjuneFont=newColor(153,204,102);//随机产生130条干扰线,不易被其它程序探测g.setColor(juneFont);for(inti=0;i<130;i++){//返回伪随机数intx=random.nextInt(width);inty=random.nextInt(height);intxl=random.nextInt(16);//80/5=16intyl=random.nextInt(16);//在此图形上下文的坐标系中,使用当前颜色在点(x1,y1)和(x2,y2)之间画一条线g.drawLine(x,y,x+xl,y+yl);}//randomCode用于保存随机产生的验证码,以便用户登录后进行验证,线程安全的可变字符序列StringBufferrandomCode=newStringBuffer();//随机产生codeCount数字的验证码for(inti=0;i<codeCount;i++){//返回char参数的字符串表示形式StringstrRand=String.valueOf(codeSequence[random.nextInt(36)]);//用随机产生的颜色将验证码绘制到图像中//创建具有指定红色、绿色和蓝色值的不透明的sRGB颜色,这些值都在(0-255)的范围内g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//使用此图形上下文的当前字体和颜色绘制由指定string给定的文本。最左侧字符的基线位于此图形上下文坐标系的(x,y)位置处。g.drawString(strRand,(i+1)*x-4,codeY);randomCode.append(strRand);}HttpSessionsession=request.getSession();//将四位数字的验证码保存到Session中session.setAttribute("realcode",randomCode.toString());//禁止浏览器缓存response.setHeader("Pragma","no-cache");//HTTP1.0response.setHeader("Cache-Control","no-cache");//HTTP1.1response.setDateHeader("Expires",0);//在代理服务器端防止缓冲response.setContentType("image/gif");//设置正被发往客户端的响应的内容类型//将图像输出到Servlet输出流中,ServletOutputStream提供了向客户端发送二进制数据的输出流ServletOutputStreamsos=response.getOutputStream();ImageIO.write(Img,"gif",sos);//使用支持给定格式的任意ImageWriter将一个图像写入OutputStreamsos.flush();//刷新此输出流并强制写出所有缓冲的输出字节sos.close();}}

2.还有login.jsp还有css布局省略,写

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"import="java.util.*"%><%@pageimport="java.io.PrintWriter"import="java.lang.String"%><!DOCTYPEHTML><html><head><title>验证码</title><metacharset="UTF-8"><linkrel="stylesheet"href="css/all.css"></head><body><divclass="page-back"><divclass="page-welcome"><spanclass="font-welcome">JSP作业5:Servlet应用</span></div><divclass="page-main"><divclass="page-check"><formname="form1"method="get"onsubmit="#"><ul><liclass="input-info">输入验证码:</li><li><inputtype="text"id="input-code"name="input-code"><!--点击一下重新加载一次验证码--><inputtype="image"name="img-code"id="img-code"alt="看不清,点击换图"src="checkcode"onclick="javascript:this.src='checkcode?+rand=Math.random()'"></li><li><inputtype="submit"value="验证"id="check-button"onclick="#"></li><li><%StringrealCode=request.getSession().getAttribute("realcode").toString();if(request.getParameter("input-code")!=null){StringuserCode=request.getParameter("input-code");PrintWriteroutput=response.getWriter();//创建输出流对象if(userCode.equalsIgnoreCase(realCode)){out.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入正确");}else{out.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入错误,请重新输入!");}}%></li></ul></form></div></div><divclass="page-footer"><p>Copyright?AllRightsReserved</p><p>Author:June(王映君)&nbsp;&nbsp;<ahref="/june6502/blog">博客链接:</a></p></div></div></body></html>

页面效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。