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目录下,项目结构如下图所示:
Zxing实现在线二维码生成程序的更多相关文章
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- 基于Asp.Net Core,利用ZXing来生成二维码的一般流程
本文主要介绍如何在.net环境下,基于Asp.Net Core,利用ZXing来生成二维码的一般操作.对二维码工作原理了解,详情见:https://blog.csdn.net/weixin_36191 ...
- Java 生成在线二维码 以Base64返回前端、或者写入到本地磁盘
思路 现阶段遇到这样一个问题,在原有的产品上加入线下优惠券模式,用户领取优惠券以后,获取到一个唯一的ID作为领取凭证,但是在线下用扫码枪进行扫码的时候,总不能让人手动输入吧 于是乎就想出了一个办法,后 ...
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
原文:http://blog.csdn.net/kongwei521/article/details/17588825 首先效果: 一.下载BarcodeLib.dll 下载地址 :http://do ...
- 在Android上使用ZXing识别条形码/二维码
越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.......手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文使用ZXing 1.6实现条码 ...
- Android自由行之走进zxing,轻松实现二维码扫描
现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. ...
- 使用zxing生成解析二维码
1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...
- 【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)
有任何疑问请去我的新博客提出 https://blog.clso.fun/posts/2019-03-03/vb-net-zxing-net-qr-maker.html ZXing .NET 的项目主 ...
随机推荐
- easyui的datetimebox时间格式化详解
今天公司让用easyui的datetimebox组件,而且还要让格式化成大家通用的那种,网上搜了很多,但差不多都是复制黏贴的,最后请教了下螃蟹. 感谢螃蟹抽空给做了个例子,现在拿出来和大家分享下,效果 ...
- apache出现You don't have permission to access / on this server提示的解决方法
在apache的配置文件httpd.conf里定义了对网站根默认的访问权限 #<Directory /> Options FollowSymLinks AllowOverrid ...
- ObjectT5:在线随机森林-Multi-Forest-A chameleon in track in
原文::Multi-Forest:A chameleon in tracking,CVPR2014 下的蛋...原文 使用随机森林的优势,在于可以使用GPU把每棵树分到一个流处理器里运行,容易并行化 ...
- Computer Vision的尴尬
原文: Computer Vision是AI的一个非常活跃的领域,每年大会小会不断,发表的文章数以千计(单是CVPR每年就录取300多,各种二流会议每年的文章更可谓不计其数),新模型新算法新应用层出不 ...
- CenOS 安装python3 与python2共存
Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装py ...
- 基于BootStrap,FortAweSome,Ajax的学生管理系统
一. 基于BootStrap,FortAweSome,Ajax的学生管理系统代码部分 1.students.html <1>html页面文件 <!DOCTYPE html> & ...
- laravel 运行migrate报错 1071 Specified key was too long
转自:https://segmentfault.com/a/1190000008416200 laravel运行命令migrate时报错: 1071 Specified key was too lo ...
- 深入MNIST code测试
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50624471 依照教程:深入MNIST ...
- 【explain】MySQL联表查询中的驱动表
写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...
- Linux下ffmpeg的wav与amr相互转换
转载:http://blog.csdn.net/sanshipianyezi/article/details/78742621 转载:http://blog.csdn.net/szfhy/articl ...