zoukankan      html  css  js  c++  java
  • response生成图片验证码

    新建一个java web工程

    src 目录下xieyuan包MyServlet.java文件(Servlet文件)

    package xieyuan;  
      
    import java.awt.Color;  
    import java.awt.Font;  
    import java.awt.Graphics2D;  
    import java.awt.image.BufferedImage;  
    import java.io.IOException;  
    import java.io.PrintWriter;  
    import java.net.URLEncoder;  
    import java.util.Random;  
      
    import javax.servlet.ServletException;  
    import javax.servlet.ServletOutputStream;  
    import javax.servlet.http.HttpServlet;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import com.sun.corba.se.impl.javax.rmi.CORBA.Util;  
    import com.sun.image.codec.jpeg.JPEGCodec;  
    import com.sun.image.codec.jpeg.JPEGImageEncoder;  
      
    public class MyServlet extends HttpServlet {  
      
        /** 
         * Constructor of the object. 
         */  
        public MyServlet() {  
            super();  
        }  
      
        /** 
         * Destruction of the servlet. <br> 
         */  
        public void destroy() {  
            super.destroy(); // Just puts "destroy" string in log  
            // Put your code here  
        }  
      
        /** 
         * The doGet method of the servlet. <br> 
         * 
         * This method is called when a form has its tag value method equals to get. 
         *  
         * @param request the request send by the client to the server 
         * @param response the response send by the server to the client 
         * @throws ServletException if an error occurred 
         * @throws IOException if an error occurred 
         */  
        public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            execute(request, response);  
        }  
      
        /** 
         * The doPost method of the servlet. <br> 
         * 
         * This method is called when a form has its tag value method equals to post. 
         *  
         * @param request the request send by the client to the server 
         * @param response the response send by the server to the client 
         * @throws ServletException if an error occurred 
         * @throws IOException if an error occurred 
         */  
        public void doPost(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            execute(request, response);  
        }  
      
          
        private static final char CHARS[]={'2','3','4','5','6','7','8','9','A','B','C','D','E',  
                                           'F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V',  
                                           'W','X','Y','Z'  
                                          };  
        public static Random random=new Random();  
        //生成随机数字,len为需要随机数字的个数  
        public static String getRandomString(int len)  
        {  
            StringBuilder builder=new StringBuilder();  
            for(int i=0;i<len;i++)  
            {  
                builder.append(CHARS[random.nextInt(CHARS.length)]) ;  
            }  
            return builder.toString();    
        }  
        //随机生成颜色,座位背景色  
        public static Color getColor()  
        {  
            return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));  
        }  
        //取颜色的反色  
        public static Color getReverseColor(Color color)  
        {  
            return new Color(255-color.getRed(),255-color.getGreen(),255-color.getBlue());    
        }  
          
        private void execute(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException  
        {  
            response.setCharacterEncoding("utf-8");  
            //设置返回的文件编码  
            response.setContentType("image/jpeg");  
              
            //获取随机码  
            String getRandomCode=getRandomString(5);  
            //将随机码放到Session中  
            request.getSession().setAttribute("randomcode", getRandomCode);  
            int width=100;  
            int height=30;  
            Color color=getColor();  
            Color reverseColor=getReverseColor(color);  
            //创建一个彩色图片  
            BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);  
            Graphics2D g=bi.createGraphics();  
            g.setFont(new Font(null,Font.BOLD,16));  
            g.setColor(color);  
            g.fillRect(0,0,width,height);  
            g.setColor(reverseColor);  
            g.drawString(getRandomCode, 18,20);  
            //绘制噪点,最多100个  
            for(int i=0,n=random.nextInt(100);i<n;i++)  
            {  
                g.drawRect(random.nextInt(width), random.nextInt(height), 1,1);  
            }  
            ServletOutputStream out=response.getOutputStream();  
            JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);  
            encoder.encode(bi);  
            out.flush();  
        }  
          
        /** 
         * Initialization of the servlet. <br> 
         * 
         * @throws ServletException if an error occurs 
         */  
        public void init() throws ServletException {  
        }  
      
    }  

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        
        
    <servlet>  
        <description>This is the description of my J2EE component</description>  
        <display-name>This is the display name of my J2EE component</display-name>  
        <servlet-name>MyServlet</servlet-name>  
        <servlet-class>xieyuan.MyServlet</servlet-class>  
      </servlet>  
      
      <servlet-mapping>  
        <servlet-name>MyServlet</servlet-name>  
        <url-pattern>/servlet/MyServlet</url-pattern>  
      </servlet-mapping>  
      <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
      </welcome-file-list>  
    </web-app>

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    <%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    %>  
      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">  
          
        <title>My JSP 'index.jsp' starting page</title>  
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">      
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
        <link rel="stylesheet" type="text/css" href="styles.css">  
        -->  
        <script language="JavaScript" >  
            function reloadImage()  
            {  
               <!--将按钮状态设置为不可用,当图片加载完成触发onload后,按钮状态就为可用了。这样可用避免重复获取-->  
               document.getElementById("btn").disabled=true;  
               <!--第一次连接的时候不会有问题,第二次连接时,假如你后面没有new Date().getTime(),加参数就会连接的时候拿缓存,没有连到服务器。加上时间函数就能保证你每次得到的不是浏览器的缓存。-->  
               document.getElementById("img").src="servlet/MyServlet?timestamp="+new Date().getTime();  
             }  
        </script>  
      </head>  
        
      <body>  
         <img src="servlet/MyServlet" id="img" onload="btn.disabled=false;" /><br/><br/>  
         <input type="button" value="换一张图片" onClick="reloadImage()" id="btn" /><br/>  
         <script>document.write("页面最后更新:"+document.lastModified)</script>  
      </body>  
    </html> 
    

      将java web放在服务器上启动,最后访问http://localhost:8088/firstWeb/,展示效果如下:

    注:参考http://www.2cto.com/kf/201309/241744.html

  • 相关阅读:
    linux软件安装方式
    docker 安装 jenkins touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    [ERR] Node goodsleep.vip:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    Linux 常用命令 服务器间scp 用户 export 创建文件、软连接
    redis 安装 集群 主从 哨兵 docker
    WPF密码框中禁止复制、粘贴
    Application 统计在线人数
    【转义字符】HTML 字符实体&lt; &gt: &amp;等
    SQL语句统计每天的数据
    正则表达式计算代码数
  • 原文地址:https://www.cnblogs.com/JDBC-xrch/p/6209642.html
Copyright © 2011-2022 走看看