您的位置:首页 > 编程语言 > Java开发

Java开发二维码扫一扫名片技术

2016-07-05 23:24 330 查看
     二维码,在现实生活中有很多的应用,在这里,我们就是用jsp技术实现一个网页端的二维码生成产品,具体步骤如下:

一、准备工作

    1、准备好所需要的Qrcode.jar包,点击下载:http://download.csdn.net/detail/suwu150/9568228

    2、简化编程工具NetBeans

二、项目总体结构

  1、如下图所示,为项目总体结构



[align=left] [/align]

在上图中:
  Demo_11_QrcodeTest:为项目名
  Web.xml:为部分文件的配置文件
  images:用于存储网页实现过程中所需要的图片
  upload:用于存储生成的二维码
  index.jsp:用于实现交互界面
  EncodingFilter类:用于过滤作用实现代码的统一,放置在使用的过程中乱码
  Qrcode.jar:工具类,用于实现与包装二维码
2、实现效果图:



如上图所示,是实现的效果图,能够将输入文本区域的内容转化为右下角的二维码,可通过扫面二维码进行验证
三、开始编程

  1、首先建立项目,打开NetBeans,新建Java  Web项目,继续新建new->index.jsp,新建文件内容代码如下所示,其中CSS样式表中使用类来实现效果,文本输入区域使用textarea标签来实现,最后使用form表单进行数据的提交,提交至CodeServlet类进行处理,说明过这些,我们将Qrcode.jar报导入到项目中,如下图所示,右键点击“库->"添加JAR/文件夹”找到之前下载准备的包位置导入即可:



下面就是前台交互界面index.jsp的设计
<%--
Document   : index
Created on : 2016-7-5, 8:08:22
Author     : Administrator
--%>
<%@page contentType="text/html" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>QrcodeTest.jsp</title>
<style type="text/css">
*{padding:0px; margin:0px;}
/*qrcode start*/
.qrcode{width:600px;
height:300px;
margin:150px 0 0 150px;
text-align: center;
}
body{background: url("image/fengjiang.jpg") no-repeat;
background-size: cover;}
h1{font-size:28px;text-shadow:0 0 15px #ff0; font-family:"楷体";}
.qrcode .q_text{
width:90%;
height:90%;
padding: 15px;
font-size: 20px;
font-family:"楷体";
margin: 5px 0;
background:  beige;
text-align: left;
}
.qrcode .q_btn{width: 90%;height:25px ;
border: 0px;outline: none;
background: violet;
cursor: pointer;
}
.qrcode .q_btn:hover{background: gray;color:  springgreen;
transition: all .5s ease;border-radius: 10px}
/*qrcode end*/
.imgBox{ width:200px;
height:200px;
margin:-100px 0 0 800px;
text-align: right;}
</style>
</head>
<body>
<form action="CodeServlet" method="post">
<div class="qrcode">
<h1>Java 开发二维码扫一扫名片技术</h1>
<textarea class="q_text" name="message"></textarea>
<input type="submit" value="生成二维码" class="q_btn"/>
</div>
</form>
<div class="imgBox">
<img src="upload/${path}" />
</div>
</body>
</html>

2、下面就是后台处理CodeServlet类的实现方法,

右键点击“源包->新建->Servlet”,出现如下图所示结果



之后出现对话款进行输入,如下图所示:



其中CodeServlet类中代码如下所示:
package com.lutsoft.servlet;
import com.swetake.util.Qrcode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CodeServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
//创建一个Qrcode
Qrcode qrcode = new Qrcode();
//设置二维码的纠错级别L(7%) M(15%) Q(25%) H(30%)
qrcode.setQrcodeErrorCorrect('M');
//设置二维码的编码模式Binary
qrcode.setQrcodeEncodeMode('B');
//设置二维码的版本号1-40 ,1:21*21,2:25*25,...,40:177*177
qrcode.setQrcodeVersion(7);

//获取图片缓存流对象
int width = 140;
int height = 140;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//获取画笔
Graphics2D gs = image.createGraphics();
//设置画笔的颜色
gs.setColor(Color.black);
//设置背景颜色为白色
gs.setBackground(Color.white);
//从0,0位置开始,高宽为height,width
gs.clearRect(0, 0, width, height);

//设置以下内容
String content = request.getParameter("message");
//获取的内容变成字节,并且防止乱码
System.out.println("content:" + content);
byte[] contentBytes = content.getBytes("utf-8");

//绘制二维码
int pix0ff = 2;
boolean[][] code = qrcode.calQrcode(contentBytes);
for (int i = 0; i < code.length; i++) {
for (int j = 0; j < code.length; j++) {
if (code[i][j]) {
// gs.fill3DRect(j*3, i*3, 3, 3, true);
gs.fillRect(j * 3 + pix0ff, i * 3 + pix0ff, 3, 3);
}
}
}
//生成二维码图片
String pathName = new Date().getTime() + ".png";
String realPath = request.getServletContext().getRealPath("/upload");
FileOutputStream outputStream = new FileOutputStream(new File(realPath, pathName));
ImageIO.write(image, "png", outputStream);
request.setAttribute("path", pathName);
request.getRequestDispatcher("index.jsp").forward(request, response);
outputStream.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

在设置Servlet时当然需要设置web.xml,其中Web.xml文件代码设置如下所示(即只需将以下内容复制到Web.xml中即可)
<servlet>
<servlet-name>CodeServlet</servlet-name>
<servlet-class>com.lutsoft.servlet.CodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CodeServlet</servlet-name>
<url-pattern>/CodeServlet</url-pattern>
</servlet-mapping>

3、至此,我们基本上完成了所需的工作,但是在扫描二维码之后,我们会发现识别的汉字字符乱码,所以我们在这里添加过滤器EncodingFilter,进行对乱码的处理,建立过程如下图所示:



建立相应的过滤器,代码如下所示:
package com.lutsoft.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter
{
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException
{
try
{
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
} catch (Throwable t)
{
t.printStackTrace();
}
}
public void destroy(){  }
public void init(FilterConfig filterConfig) {        }
}


其中Web.xml中代码如下所示:  
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.lutsoft.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

至此,我们完成了对项目的创建工作,能够实现对输入文本信息的转化,具体的运行过程为选中index.jsp文件右键进行运行,然后在出现的界面中输入要转换的内容,点击生成二维码按钮进行转化为二维码。

注:完整项目下载:http://download.csdn.net/detail/suwu150/9568235

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: