狂神说 javaweb 13集:Response验证码实现

13,Response验证码实现

3,验证码功能

验证怎么来的?

  • 前端实现

  • 后端实现,需要用到java的图片类,生产一个图片

     public class ImageServlet extends HttpServlet {
         @Override
         protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
             //如何让浏览器5秒刷新一次
             resp.setHeader( "refresh","3" );
             //在内存创建一个图片
             BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
             //得到图片
             Graphics2D g = (Graphics2D) image.getGraphics();//笔
             //设置图片背景颜色
             g.setColor( Color.WHITE );
             g.fillRect(0,0,80,80 );
             //给图片写数据
             g.setColor( Color.BLUE );
             g.setFont( new Font( null,Font.BOLD,20 ) );
             g.drawString( mackNum(),0,20 );
     
             //告诉浏览器,这个请求用图片的方式打开
             resp.setContentType( "image/jpg" );
             //网站存在缓存,不让浏览器缓存
             resp.setDateHeader( "expires",-1 );
             resp.setHeader( "Cache-Control" ,"no-cache");
             resp.setHeader( "Pragma","no-cache" );
     
             //把图片写给浏览器
             boolean write = ImageIO.write( image,"jpg", resp.getOutputStream( ) );
     
        }
         //生成随机数
         public String mackNum(){
             Random random = new Random();
             String num = random.nextInt( 9999999 )+"";
             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < 7-num.length(); i++) {
                 sb.append( "0" );
            }
             num = sb.toString() + num;
             return num;
     
        }
     
         @Override
         protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             doGet( req, resp );
        }
     }

    xml

     <servlet>
      <servlet-name>ImageServlet</servlet-name>
      <servlet-class>com.kuang.servlet.ImageServlet</servlet-class>
     </servlet>
     <servlet-mapping>
      <servlet-name>Imageservlet</servlet-name>
      <url-pattern>/img</url-pattern>
     </servlet-mapping>
     

     

  •  
posted @ 2022-05-22 22:41  坚持做  阅读(44)  评论(0)    收藏  举报