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

  • 相关阅读:
    算法 排序
    Windows系统安装Git
    oracle 查询语句
    .NET CORE AddRazorRuntimeCompilation
    清除html頁面文本框緩存
    ORACLE 生成UUID
    Unable to resolve service for type`***` while attempting to activatre `***`
    xml文件导入Oracle数据库
    jquery 日历控件
    判断并获取一对多表格数据
  • 原文地址:https://www.cnblogs.com/JDBC-xrch/p/6209642.html
Copyright © 2011-2022 走看看