本人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
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!