zoukankan      html  css  js  c++  java
  • Zxing实现在线二维码生成程序

    关于zxing的使用请参考笔者的另外一篇博文:Java二维码生成与解码工具Zxing使用

    首先我们来看看效果:
    这里写图片描述

    在文本框中输入内容后点击生成二维码按钮,应用自动对文本框中的内容进行编码,生成二维码图片显示在下方。

    要实现这个功能并不复杂,大致思路如下:

    点击按钮时,获取文本框中的内容提交到一个Servlet进行处理,在该Servlet中使用Zxing工具库对内容进行编码,返回一张图片即可。接下来看一下这个程序的实现步骤。
    1.新建一个Java Dynamic Web Project。

    2.在WebContent根目录下新建一个index.jsp页面,即为上面动态图页面:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>二维码在线生成工具</title>
    <script type="text/javascript" src="js/jquery-2.0.3.js"></script>
    </head>
    <body>
    <textarea rows="10" cols="50" id="BarCodeContent">
    
    </textarea>
    <br/>
    <button id="GenBarCode">生成二维码</button>
    <br/> 
    <img id="BarCode" alt="BarCode" >
    
    <script type="text/javascript">
    $("#BarCode").hide();
    $("#GenBarCode").click(function(){ 
        var content = $("#BarCodeContent").val();
        content = content.trim();
        if(content == "" )
        {
            alert("请输入内容");
            return;
        }
        var path = "genBarCode.do?content='" + content + "'"
        $("#BarCode").attr("src",path);
        $("#BarCode").show();
    
    }); 
    </script>
    </body>
    </html>

    这里笔者使用到了Jquery库,对Jquery不熟的朋友可以先去简单的了解一下。

    我们使用img标签在页面中显示一张图片:

    <img id="BarCode" alt="BarCode" >

    $("#BarCode").hide();通过这段代码让图片处于隐藏状态,和一般做法不同的是这里我们并不指定图片的src属性,当用户点击按钮时,我们响应按钮的点击事件,在事件处理代码中,设置该img标签的src属性并把该图片设置为显示状态:

    $("#GenBarCode").click(function(){ 
        var content = $("#BarCodeContent").val();
        content = content.trim();
        if(content == "" )
        {
            alert("请输入内容");
            return;
        }
        var path = "genBarCode.do?content='" + content + "'"
        $("#BarCode").attr("src",path);
        $("#BarCode").show();
    
    });

    我们把img标签的src属性指定为一个http请求genBarCode.do,以编辑框中的内容作为参数,接下我们在web.xml文件中配置一个servlet处理该请求。

    3.配置二维码生成Servlet。
    打开web.xml文件,为请求genBarCode.do配置一个servlet,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
      <display-name>zxing_web</display-name>
      <welcome-file-list> 
        <welcome-file>index.jsp</welcome-file> 
      </welcome-file-list>
    
     <servlet> 
            <servlet-name>genBarCode</servlet-name>
            <servlet-class>
                com.csii.zxing.servlet.GenBarCodeServlet
            </servlet-class>
     </servlet> 
      <servlet-mapping>
        <servlet-name>genBarCode</servlet-name>
        <url-pattern>/genBarCode.do</url-pattern>
      </servlet-mapping>
    </web-app>

    剩下的内容就是编写二维码生成逻辑代码,新建一个Servlet,类名com.csii.zxing.servlet.GenBarCodeServlet,内容如下:

    package com.csii.zxing.servlet;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Hashtable;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    
    public class GenBarCodeServlet  extends HttpServlet{
    
        private static final long serialVersionUID = -5979464050181485740L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
                //获取本文框中输入的内容
                String text = (String) req.getParameter("content");
                int width = 200;   
                int height = 200;   
                String format = "gif";  
                //设置Http响应头中的Content-Type为image/gif,表示该Http返回内容为一张gif图片
                resp.setHeader("Content-Type", "image/gif");
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();  
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                BitMatrix bitMatrix = null;
                try {
                    bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
                } catch (WriterException e1) { 
                    e1.printStackTrace();
                }  
                //获取http响应输出流
                OutputStream stream = resp.getOutputStream();
                try { 
                    //將二维码数据写到Http响应输出流中
                    MatrixToImageWriter.writeToStream(bitMatrix, format, stream);
                } catch (IOException e) { 
                    e.printStackTrace();
                }
    
        }
    
    }

    至此为止这个程序已经完成,很简单吧,需要注意一点,我们要把core-3.2.0.jar和javase-3.2.0.jar两个jar包添加到WEB-INF/lib目录下,项目结构如下图所示:
    这里写图片描述

  • 相关阅读:
    第一周实习工作总结
    service---七月十九号实验
    安卓常用链接
    Activity + 基础UI
    七月十四日安卓学习笔记
    安卓组件学习笔记
    剑指:数组中出现次数超过一半的数字
    剑指:二叉搜索树与双向链表
    剑指:二叉树中和为某一值的路径
    剑指:二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468622.html
Copyright © 2011-2022 走看看