java生成二维码(基于springboot)部署tomcat

本人2023年做的一个用Java生成二维码并且部署到Tomcat上运行的一个小项目。     

  

使用了Java编程语言和Spring框架,并集成了Google的ZXing库来生成二维码。以下是一些关于这段代码的技术和作用的说明:

简介:

Java编程语言: 这段代码使用Java语言编写,是一种面向对象的编程语言。
Spring框架: 这段代码使用了Spring框架,用于在Java应用程序中进行依赖注入和开发Web应用程序。
ZXing库: ZXing是一个开源的条码和二维码图像处理库,这段代码使用了ZXing库中的类和方法来生成二维码。

QRCodeService类: 


        用于生成QR代码。它提供了一个createQRCode方法,接受内容、宽度和高度作为参数,并返回一个BufferedImage对象,代表生成的二维码图片。

package com.qrcode.demo.service;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;

@Service
public class QRCodeService {

    public BufferedImage createQRCode(String content, int width, int height) throws IOException {

        if (!StringUtils.isEmpty(content)) {
            @SuppressWarnings("rawtypes")
            HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定字符编码为“utf-8”
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定二维码的纠错等级为中级
            hints.put(EncodeHintType.MARGIN, 2); // 设置图片的边距

            try {
                QRCodeWriter writer = new QRCodeWriter();
                BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);

                BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
                return bufferedImage;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}


QRCodeController类:

        处理与二维码相关的HTTP请求。它提供了一个GET请求的getQRCode方法,该方法调用QRCodeService来生成二维码图片,并将其写入HTTP响应输出流中,以便在前端页面显示二维码。
 

package com.qrcode.demo.controller;
import com.qrcode.demo.service.QRCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;

@RestController
@RequestMapping("/qrcode")
public class QRCodeController {
    @Autowired
    QRCodeService qrCodeService;

    @RequestMapping(value="/getQRCode", method = RequestMethod.GET)
    public void getQRCode(HttpServletResponse response) throws IOException {
        BufferedImage image = qrCodeService.createQRCode("姓名:123",450,450);
        if (image != null) {
            response.setContentType("image/png");
            OutputStream os = response.getOutputStream();
            ImageIO.write(image, "png", os);
            os.flush();
            os.close();
        }
    }
}

index.jsp:

用于在Web应用程序中生成一个简单的页面。
 

<%--
  Created by IntelliJ IDEA.
  User: 黑手双城
  Date: 2023/6/20
  Time: 15:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
%>

<html>
<head>
    <meta charset="UTF-8">
    <title>QR Code Generator</title>
    <style>
        body {
            background-color: #f2f2f2;
            font-family: Arial, sans-serif;
        }

        .container {
            width: 80%;
            margin: 0 auto;
            text-align: center;
        }

        h1 {
            font-size: 36px;
            margin-top: 50px;
        }

        img {
            margin-top: 80px;
            border: 5px solid #333;
            border-radius: 10px;
        }

        button {
            background-color: #0f4ce0;
            color: white;
            border: none;
            border-radius: 5px;
            padding: 10px 20px;
            font-size: 18px;
            cursor: pointer;
            transition: background-color 0.3s;
            margin-top: 50px;
        }

        button:hover {
            background-color: #43eaee;
        }
        xiaoxiao {
            color: #f1e535;
            font-weight: bold;
        }

        body {
            background-color: #2caf48; /* 淡灰色 */
        }
    </style>
</head>
<body>
<div class="container">
    <h1>点击出现二维码</h1>
    <xiaoxiao> <img src="" id="qr-code" alt="看左边"> </xiaoxiao>
    <button onclick="generateQRCode()">点击</button>
</div>

<script>
    function generateQRCode() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', '/qrcode/getQRCode', true);
        xhr.responseType = 'blob';
        xhr.onload = function () {
            if (this.status === 200) {
                var blob = new Blob([this.response], {type: 'image/png'});
                var url = URL.createObjectURL(blob);
                document.getElementById('qr-code').src = url;
            }
        };
        xhr.send();
    }
</script>
</body>
</html>

pom.xml:

这个就不用多说了
 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.qrcode</groupId>
	<artifactId>QRcode</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>qrcodeDemo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>core</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>javase</artifactId>
			<version>3.2.1</version>
		</dependency>
		<!-- JSP支持 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>
		<!-- 移除内置的tomcat -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-servlet-api</artifactId>
			<version>8.0.36</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
		<finalName>QRcode</finalName>
	</build>


</project>

QrcodeDemoApplication:

这个重新启动类让它启动外部的Tomcat
 

package com.qrcode.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class QrcodeDemoApplication extends SpringBootServletInitializer {
	@Override//这个表示使用外部的tomcat容器
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		// 注意这里要指向原先用main方法执行的启动类
		return builder.sources(QrcodeDemoApplication.class);
	}
	public static void main(String[] args) {
		SpringApplication.run(QrcodeDemoApplication.class, args);
	}
}


启动完成后打开网址

 很简单的一个小demo

关注博主下篇更精彩

一键三连!!!

一键三连!!!

一键三连!!!
感谢一键三连!!!

猜你喜欢

转载自blog.csdn.net/m0_56073435/article/details/131827945