标签:
一、目标
输入网址,生成网址的二维码
二、概况
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页面如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%@ 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文件的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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
标签:
原文地址:http://www.cnblogs.com/likeju/p/4834703.html