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的设计
2、下面就是后台处理CodeServlet类的实现方法,
右键点击“源包->新建->Servlet”,出现如下图所示结果
之后出现对话款进行输入,如下图所示:
其中CodeServlet类中代码如下所示:
在设置Servlet时当然需要设置web.xml,其中Web.xml文件代码设置如下所示(即只需将以下内容复制到Web.xml中即可)
3、至此,我们基本上完成了所需的工作,但是在扫描二维码之后,我们会发现识别的汉字字符乱码,所以我们在这里添加过滤器EncodingFilter,进行对乱码的处理,建立过程如下图所示:
建立相应的过滤器,代码如下所示:
其中Web.xml中代码如下所示:
至此,我们完成了对项目的创建工作,能够实现对输入文本信息的转化,具体的运行过程为选中index.jsp文件右键进行运行,然后在出现的界面中输入要转换的内容,点击生成二维码按钮进行转化为二维码。
注:完整项目下载:http://download.csdn.net/detail/suwu150/9568235
一、准备工作
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
相关文章推荐
- 在Eclipse中安装Hibernate Tools
- [Spring框架]Spring JDBCTmplate基础入门总结.
- Java代码优化之字符串String学习
- JAVA之多线程的安全问题(线程同步)
- Java字符串深入理解
- SpringMVC与struts2区别和第一个springMVC应用
- RxJava 驯服数据流之避免monad
- Java简单实现的五子棋
- 内在锁和同步(Intrinsic Locks and Synchronization)
- struts源码2
- Java与字符编码问题详谈
- 解析Unicode编码和Java char
- c3p0配置在spring配置文件中的详细配置
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- java中volatile关键字的含义
- Spring Data JPA学习
- 学习JAVA回调方法(一)
- spring定时器一次调用却触发了两次问题分析
- 【JAVA笔记——器】MyBatis映射以及DAO文件生成工具源码
- Struts2系列:(30) i18n-8 设置Locale信息