• 利用servlet技术实现验证码功能


     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>  
     2   
     3 <%  
     4     String action = request.getParameter("action");  
     5     String safecodeText = request.getParameter("safecodeTest");  
     6     if("action".equals(action)){  
     7         String safecode = (String)session.getAttribute("safecode");  
     8         if(safecode.equals(safecodeText)){  
     9             out.print("验证码正确!");  
    10         }else{  
    11             out.print("验证码错误!请重新输入!");  
    12         }  
    13     }  
    14 %>  
    15 <html>  
    16   <head>  
    17     <title>验证码测试</title>  
    18   </head>  
    19     
    20   <body>  
    21     <form action="servlet/demo" method="post">  
    22     <input type="hidden" name="action" value="action"/>  
    23         <img alt="验证码" src="servlet/demo">  
    24         <input type="text" name="safecodeTest">  
    25         <input type="submit" value="go">  
    26     </form>  
    27   </body>  
    28 </html> 
     1 import java.io.*;  
     2   
     3 import javax.servlet.*;  
     4 import javax.servlet.http.*;  
     5 import java.util.Random;  
     6 import java.awt.*;  
     7 import java.awt.image.*;  
     8 import javax.imageio.*;  
     9 
    10   
    11 public class demo extends HttpServlet {  
    12     //产生随即的字体  
    13     private Font getFont() {  
    14         Random random = new Random();  
    15         Font font[] = new Font[5];  
    16         font[0] = new Font("Ravie", Font.PLAIN, 24);  
    17         font[1] = new Font("Antique Olive Compact", Font.PLAIN, 24);  
    18         font[2] = new Font("Forte", Font.PLAIN, 24);  
    19         font[3] = new Font("Wide Latin", Font.PLAIN, 24);  
    20         font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, 24);  
    21         return font[random.nextInt(5)];  
    22     }  
    23   
    24     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
    25             throws ServletException, IOException {  
    26         // 设置响应头 Content-type类型  
    27         resp.setContentType("image/jpeg");  
    28         // 以下三句是用于设置页面不缓存  
    29         resp.setHeader("Pragma", "No-cache");  
    30         resp.setHeader("Cache-Control", "No-cache");  
    31         resp.setDateHeader("Expires", 0);  
    32   
    33         OutputStream os = resp.getOutputStream();  
    34         int width = 83, height = 30;  
    35         // 建立指定宽、高和BufferedImage对象  
    36         BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
    37   
    38         Graphics g = image.getGraphics(); // 该画笔画在image上  
    39         Color c = g.getColor(); // 保存当前画笔的颜色,用完画笔后要回复现场  
    40         g.fillRect(0, 0, width, height);  
    41           
    42   
    43         char[] ch = "abcdefghjkmnpqrstuvwxyz23456789".toCharArray(); // 随即产生的字符串 不包括 i l(小写L) o(小写O) 1(数字1)0(数字0)  
    44         int length = ch.length; // 随即字符串的长度  
    45         String sRand = ""; // 保存随即产生的字符串  
    46         Random random = new Random();  
    47         for (int i = 0; i < 4; i++) {  
    48             // 设置字体  
    49             g.setFont(getFont());  
    50             // 随即生成0-9的数字  
    51             String rand = new Character(ch[random.nextInt(length)]).toString();  
    52             sRand += rand;  
    53             // 设置随机颜色  
    54             g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));  
    55             g.drawString(rand, 20 * i + 6, 25);  
    56         }  
    57         //产生随即干扰点  
    58         for (int i = 0; i < 20; i++) {  
    59             int x1 = random.nextInt(width);  
    60             int y1 = random.nextInt(height);  
    61             g.drawOval(x1, y1, 2, 2);  
    62         }  
    63         g.setColor(c); // 将画笔的颜色再设置回去  
    64         g.dispose();  
    65   
    66         //将验证码记录到session  
    67         req.getSession().setAttribute("safecode", sRand);  
    68         // 输出图像到页面  
    69         ImageIO.write(image, "JPEG", os);  
    70   
    71     }  
    72   
    73     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
    74             throws ServletException, IOException {  
    75         doGet(req, resp);  
    76     }  
    77   
    78 }  
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
     3   <display-name>JavaWebDemo</display-name>
     4   <servlet>
     5     <description>This is the description of my J2EE component</description>
     6     <display-name>This is the display name of my J2EE component</display-name>
     7     <servlet-name>demo</servlet-name>
     8     <servlet-class>demo</servlet-class>
     9   </servlet>
    10 
    11   <servlet-mapping>
    12     <servlet-name>demo</servlet-name>
    13     <url-pattern>/servlet/demo</url-pattern>
    14   </servlet-mapping>
    15  
    16   <welcome-file-list>
    17     <welcome-file>index.html</welcome-file>
    18     <welcome-file>index.htm</welcome-file>
    19     <welcome-file>index.jsp</welcome-file>
    20     <welcome-file>default.html</welcome-file>
    21     <welcome-file>default.htm</welcome-file>
    22     <welcome-file>default.jsp</welcome-file>
    23   </welcome-file-list>
    24 </web-app>
     1 package action;
     2 
     3 import java.awt.Color;
     4 import java.awt.Font;
     5 import java.awt.Graphics;
     6 import java.awt.image.BufferedImage;
     7 import java.io.ByteArrayInputStream;
     8 import java.io.ByteArrayOutputStream;
     9 import java.util.Map;
    10 
    11 import javax.imageio.ImageIO;
    12 import javax.imageio.stream.ImageOutputStream;
    13 
    14 import com.opensymphony.xwork2.ActionContext;
    15 import com.opensymphony.xwork2.ActionSupport;
    16 
    17 public class ImageAction extends ActionSupport {
    18 
    19     /**
    20      * 
    21      */
    22     private static final long serialVersionUID = 1L;
    23     private ByteArrayInputStream inputStream;
    24     public String createRandomString(){
    25         String str="";
    26         for(int i=0;i<4;i++){
    27             str+=Integer.toString((new Double(Math.random()*10)).intValue());
    28         }
    29         return str;
    30     }
    31     public Color createRandomColor(){
    32         int r=(new Double(Math.random()*256)).intValue();
    33         int g=(new Double(Math.random()*256)).intValue();
    34         int b=(new Double(Math.random()*256)).intValue();
    35         return new Color(r,g,b);
    36     }
    37     public BufferedImage createImage(String str){
    38         int width=60;
    39         int height=22;
    40         BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    41         Graphics g=image.getGraphics();
    42         g.setColor(Color.WHITE);
    43         g.fillRect(0, 0, width, height);
    44         g.setColor(Color.BLACK);
    45         g.drawRect(0, 0, width-1, height-1);
    46         g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
    47         g.setColor(this.createRandomColor());
    48         g.drawString(Character.toString(str.charAt(0)), 8, 17);
    49         g.drawString(Character.toString(str.charAt(1)), 20, 17);
    50         g.drawString(Character.toString(str.charAt(2)), 33, 17);
    51         g.drawString(Character.toString(str.charAt(3)), 45, 17);
    52         g.dispose();
    53         return image;
    54     }
    55     public ByteArrayInputStream createInputStream() throws Exception{
    56         String str=this.createRandomString();
    57         BufferedImage image=this.createImage(str);
    58         ActionContext actioncontext=ActionContext.getContext();
    59         Map session=actioncontext.getSession();
    60         session.put("random", str);
    61         ByteArrayOutputStream output=new ByteArrayOutputStream();
    62         ImageOutputStream imageout=ImageIO.createImageOutputStream(output);
    63         ImageIO.write(image, "JPEG", imageout);
    64         imageout.close();
    65         ByteArrayInputStream input=new ByteArrayInputStream(output.toByteArray());
    66         output.close();
    67         return input;      
    68     }
    69     public String execute() throws Exception{
    70         setInputStream(createInputStream());
    71         return SUCCESS;
    72     }
    73     public ByteArrayInputStream getInputStream(){
    74         return inputStream;
    75     }
    76     public void setInputStream(ByteArrayInputStream inputStream){
    77         this.inputStream=inputStream;
    78     }
    79 }
  • 相关阅读:
    C语言位运算详解(转载)
    C/C++知识点
    android获取string.xml的值(转)
    C++ Primer与c++编程思想的比较(转)
    C++ 学习的网站
    C++学习网站总结(转)
    C++学习网站(转)
    C++编程学习50个经典网站 强力推荐 (转)
    JAVA反射机制(转)
    AxureRP7.0教学大纲Tutorial directory
  • 原文地址:https://www.cnblogs.com/rain-tl/p/4855020.html
Copyright © 2020-2023  润新知