一、目標
輸入網址,生成網址的二維碼
二、概況
1.效果:UI丑,但功能實現了

2.項目目錄

三、用到的第三方資源
1.google的掃碼包zxing
2.JQuery
四、步驟(用myEclipse)
1.新建工程,選擇web project

2.加入第三方資源(zxing包和jQuery)
2.1
2.1.1復制,粘貼,加入zxing的jar包(所有文件在附件中下載)

2.2.2右鍵jar包加入buildpath

2.2加入jQuery文件
2.2.1在WebRoot下新建文件夾js


復制粘貼jQuery文件到此文件夾

3.按需求修改webroot下的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>二維碼</title>
<script src="js/jquery.min.js"></script>
<script>
$(function(){
$("input[type=submit]").click(function(e){
e.preventDefault();
$("#qrcode_div").empty().append("<img id='qrImg' />");
$("#qrImg").attr("src", "qrcode?website="+$("input[type=text][name=website]").val());//此處會訪問servlet
});
});
</script>
</head>
<body>
<form>
網址<input type="text" name="website" />
<input type="submit" value="生成二維碼" />
<div id="qrcode_div"></div>
</form>
</body>
</html>
4.新建servlet文件
4.1右鍵工程文件夾--》new ---->servlet(myEclipse會自動配置servlet到web.xml文件)


QRCode.java servlet文件的代碼如下:
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.QRCodeUtil;
import com.google.zxing.WriterException;
public class QRCode extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String website = request.getParameter("website");
try {
QRCodeUtil.genGR(website, response.getOutputStream());
} catch (WriterException e) {
e.printStackTrace();
}
//String website = request.getAttribute("website").toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
5.新建輔助類文件,作用是生成二維碼(QRCodeUtil.java)
5.1右鍵工程文件夾--》new--->class,如下圖


QRCodeUtil.java的代碼如下:
package util2;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
public class QRCodeUtil {
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
public static void genGR(String website, OutputStream output) throws WriterException, IOException {
int width = 300;
int height = 300;
String format = "jpg";
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
//Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bm = new MultiFormatWriter().encode(website, BarcodeFormat.QR_CODE, width, height, hints);
BufferedImage image = toImage(bm);
ImageIO.write(image, format, output); //把二維碼寫到response的輸出流
}
private static BufferedImage toImage(BitMatrix bm) {
int width = bm.getWidth();
int height = bm.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for(int x = 0;x < width; x++){
for(int y = 0; y < height; y++ ){
image.setRGB(x, y, bm.get(x, y) ? BLACK : WHITE);
}
}
return image;
}
}
6.至此,所有文件已完成,接下來布置項目,啟動tomcat,訪問文件,如下圖

布置完成后,點擊debug啟動項目

啟動成功后,在瀏覽器中訪問文件

PS:
可以修改QRCodeUtil.java文件中的顏色配置,以生成彩色的二維碼,例如:
private static final int BLACK = 0xff0000ff;//0xFF000000;
private static final int WHITE = 0xffffff00;//0xFFFFFFFF;

常見顏色代碼如下:
這些顏色常數是定義在android.graphics.Color里的:
| 類型 |
常數 |
值 |
色碼 |
| int |
BLACK |
-16777216 |
0xff000000 |
| int |
BLUE |
-16776961 |
0xff0000ff |
| int |
CYAN |
-16711681 |
0xff00ffff |
| int |
DKGRAY |
-12303292 |
0xff444444 |
| int |
GRAY |
-7829368 |
0xff888888 |
| int |
GREEN |
-16711936 |
0xff00ff00 |
| int |
LTGRAY |
-3355444 |
0xffcccccc |
| int |
MAGENTA |
-65281 |
0xffff00ff |
| int |
RED |
-65536 |
0xffff0000 |
| int |
TRANSPARENT |
0 |
0x00000000 |
| int |
WHITE |
-1 |
0xffffffff |
| int |
YELLOW |
-256 |
0xffffff00 |
項目附件:
http://files.cnblogs.com/files/shamgod/QRCode.zip
