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

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

一、准备工作

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

    2、简化编程工具NetBeans

二、项目总体结构

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

 

在上图中:

  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

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suwu150

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值