JSP处理页面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.awt.*,java.util.*,javax.imageio.*,java.awt.image.*" %> <% response.setHeader("Cache-Control", "no-cache"); //在内存中创建图像,设置图像的宽和高 int width=60,height=20; //实例化java.awt.image.BufferedImage,作用是访问图像数据缓冲区 BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //第三个参数:使用的颜色模式为RGB模式 //获得画笔 Graphics g= image.getGraphics(); //设置背景颜色 RGB g.setColor(new Color(200,200,200)); g.fillRect(0, 0, width, height); //取随机产生的验证码(4位数字) Random rnd= new Random(); int randNum=rnd.nextInt(8999)+1000; //返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。 String ranStr=String.valueOf(randNum); //将验证码存到session中 session.setAttribute("randomString", ranStr); //将验证码显示到图像中 g.setColor(Color.red); g.setFont(new Font("",Font.PLAIN,20)); //名称 样式 磅值大小 g.drawString(ranStr, 10, 17); //随机产生100个干扰点,使图像中的验证码不易被其他程序检测到 for(int i=0;i<100;i++){ int x=rnd.nextInt(width); int y=rnd.nextInt(height); g.drawOval(x, y, 1, 1); } //输出图像到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); out.clear(); out=pageContext.pushBody(); %>
JSP表单页面:
<form action="form" method="post"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"> <br> <input type="text" name="code" size="20"> <img name="img" src="yanzhengma.jsp" id="img" onclick="yanzheng()"> <a href="javascript:vord(0)" onclick="yanzheng()">看不清</a><br> <input type="submit" value="提交"> </form> <script type="text/javascript"> function yanzheng(){ img.src=img.src+‘?‘+Math.random(); }</script>
Servlet处理页面:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); String yanzheng=request.getParameter("code"); String username=request.getParameter("username"); String password=request.getParameter("password"); if(request.getSession(false).getAttribute("numberStr")!=null) { String numberStr=(String)request.getSession(false).getAttribute("numberStr"); if(yanzheng.equals(numberStr)) { if(username.equals("admin")&&password.equals("1234")) { response.getWriter().println("恭喜登录成功"); }else { response.getWriter().println("账号或者密码错误登录失败"); } }else { response.getWriter().println("验证码错误"); } } }
时间: 2024-10-11 06:46:58