当前位置: 首页 > news >正文

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程

在这里插入图片描述

访问方式

http://127.0.0.1:8080/context/frontEnd/index

放行

public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/frontEnd/**",

SysFrontEndController

import lombok.extern.slf4j.Slf4j;
import nl.basjes.shaded.org.springframework.core.io.ClassPathResource;
import nl.basjes.shaded.org.springframework.util.AntPathMatcher;
import org.springframework.http.MediaType;
import org.springframework.http.MediaTypeFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.HandlerMapping;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.charset.Charset;
import java.util.Optional;/*** @author 蓝之静云* @date 2023-08-10 */
@RestController
@RequestMapping("/frontEnd")
@Slf4j
public class SysFrontEndController {private AntPathMatcher antPathMatcher = new AntPathMatcher();@RequestMapping("/**")public void getStaticResource(HttpServletRequest request, HttpServletResponse response) throws IOException {// 获取完整的路径String uri = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);// 获取映射的路径String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);String customPath = antPathMatcher.extractPathWithinPattern(pattern, uri);if ("index".equals(customPath)) customPath = customPath + ".html";// 按/截取String[] split = customPath.split("/");// 最后一个就是文件名String filename = split[split.length - 1];// 若是图片资源if (filename.contains(".png")|| filename.contains(".jpg")|| filename.contains(".ico")|| filename.contains(".gif")|| filename.contains(".svg")|| filename.contains(".pdf")|| filename.contains(".jpeg")) {ServletOutputStream outputStream = null;InputStream inputStream = null;try {ClassPathResource classPathResource = new ClassPathResource("static/" + customPath);inputStream = classPathResource.getInputStream();response.setContentType("image/" + filename.split("\\.")[1]);outputStream = response.getOutputStream();int len;byte[] buffer = new byte[4096];while ((len = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}outputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {outputStream.close();inputStream.close();}} else {InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/" + customPath);assert stream != null;ByteBuffer buf = ByteBuffer.allocate(stream.available());Channels.newChannel(stream).read(buf);buf.flip();String fileStr = Charset.defaultCharset().decode(buf).toString();buf.clear();Optional<MediaType> mediaType = MediaTypeFactory.getMediaType(filename);mediaType.ifPresent(type -> response.setContentType(type.toString() + ";charset=UTF-8"));response.setCharacterEncoding("UTF-8");response.getWriter().write(fileStr);}}
}

pom.xml

		<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource><resource><directory>src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/*.*</include></includes></resource></resources>

相关文章:

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…...

NeuralNLP-NeuralClassifier的使用记录(二),训练预测自己的【中文文本多分类】

NeuralNLP-NeuralClassifier的使用记录&#xff0c;训练预测自己的【中文文本多分类】 数据准备&#xff1a; ​ 与英文的训练预测一致&#xff0c;都使用相同的数据格式&#xff0c;将数据通过代码处理为JSON格式&#xff0c;以下是我使用的一种&#xff0c;不同的原数据情况…...

express学习笔记8 - 文件上传 下载以及预览

一、上传 1、 安装multer (任意选其中一种) yarn add multer --S npm install multer --S 2、新建配置文件(utils/multerConfig) const multer require(multer); const mkdirp require(mkdirp); // const sd require(silly-datetime); const path require(path);con…...

Python系统学习1-9-类(一)

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…...

什么是公网、私网、内网、外网?

中午好&#xff0c;我的网工朋友。 最近经常有很多小白朋友在问&#xff0c;公网、私网、内网、外网&#xff0c;这些的概念是啥样的&#xff0c;又该怎么去界定。 关于IP地址&#xff0c;确实没有太明确的区分&#xff0c;其实也不必太过咬文嚼字。 内网、外网就是一个参考…...

一篇文章教会你搭建私人kindle图书馆,并内网穿透实现公网访问

搭建私人kindle图书馆&#xff0c;并内网穿透实现公网访问 在电子书风靡的时期&#xff0c;大部分人都购买了一本电子书&#xff0c;虽然这本电子书更多的时候是被搁置在储物架上吃灰&#xff0c;或者成为盖泡面的神器&#xff0c;但当亚马逊发布消息将放弃电子书在中国的服务…...

好用的安卓手机投屏到mac分享

工具推荐&#xff1a;scrcpy github地址&#xff1a;https://github.com/Genymobile/scrcpy/tree/master mac使用方式 安装环境&#xff0c;打开terminal&#xff0c;执行以下命令&#xff0c;没有brew的先安装brew brew install scrcpy brew install android-platform-too…...

df -h

df -h 命令用于查看磁盘占用的空间 Filesystem&#xff1a;表示该文件系统位于哪个分区&#xff0c;因此该列显示的是设备名称&#xff1b; Used&#xff1a;表示用掉的磁盘空间大小&#xff1b; Available&#xff1a;表示剩余的磁盘空间大小&#xff1b; Use%&#xff1a;磁盘…...

彻底卸载Android Studio

永恒的爱是永远恪守最初的诺言。 在安装Android Studio会有很多问题导致无法正常运行&#xff0c;多次下载AS多次错误后了解到&#xff0c;删除以下四个文件才能彻底卸载Android Studio。 第一个文件&#xff1a;.gradle 路径&#xff1a;C:\Users\yao&#xff08;这里yao是本…...

QT 5.12配置OpenCV3.4.10

主要过程&#xff1a;使用cmake编译源码&#xff0c;生成Mingw64位 下的OpenCV库 三篇博客解决问题&#xff1a; 1.Windows下安装Qt并使用cmake配置opencv3.4.10(含错误记录及解决办法)_d:\qt\qt5.14.2\5.14.2\mingw73_64\include\qtcore\qg_会飞的DA象的博客-CSDN博客 2.【…...

Qt应用开发(基础篇)——选项卡窗口 QTabWidget

一、前言 QTabWidget类继承于QWidget&#xff0c;是一个拥有选项卡的窗口部件。 QTabWidget类有一个选项卡栏QTabBar和一个页面区域&#xff0c;用来显示和选项卡相关联的界面。用户通过点击选项卡或者自定义快捷方式(ALTKey)切换页面。 二、QTabWidget类 1、count 该属…...

Socks5代理在多线程爬虫中的应用

在进行爬虫开发过程中&#xff0c;我们常常需要处理大量的数据&#xff0c;并执行多任务并发操作。然而&#xff0c;频繁的请求可能会引起目标网站的反爬机制&#xff0c;导致IP封禁或限制访问。为了规避这些限制&#xff0c;我们可以借助Socks5代理的强大功能&#xff0c;通过…...

机器学习笔记:主动学习(Active Learning)初探

1 基本介绍 监督学习问题中&#xff0c;存在标记成本昂贵且难以大量获取的问题。 针对一些特定任务&#xff0c;只有行业专家才能为样本做上准确标记。在此问题背景下&#xff0c;主动学习&#xff08;Active Learning, AL&#xff09;尝试通过选择性地标记较少数据而训练出表…...

linux github 仓库管理常用操作

linux 的常用操作 linux 本地 ssh验证连接github账号本地仓库连接远程私有仓库push/pull操作 Connecting to Github with ssh git local configuration If you are using git for the first time, configure the user name and email in the device. git config --global u…...

IT运维:使用数据分析平台监控深信服防火墙

概述 深信服防火墙自身监控可以满足绝大部分需求&#xff0c;比如哪个应用占了最大带宽&#xff0c;哪个用户访问了哪些网站&#xff1f;这里我们为什么使用鸿鹄呢&#xff1f;因为我们要的是数据的处理和分析&#xff0c;比如某个用户在某个事件都做了哪些行为&#xff0c;这个…...

深入解析 Axios Blob 的使用方法及技巧

在 Web 开发中&#xff0c;处理文件传输是一个常见的需求。Blob&#xff08;二进制对象&#xff09;是一种表示二进制数据的方式&#xff0c;常用于处理文件和多媒体数据。本文将介绍如何使用 Axios 和 Blob 来处理文件传输。 Axios Blob 概念 在开始之前&#xff0c;让我们先…...

爬虫逆向实战(十三)--某课网登录

一、数据接口分析 主页地址&#xff1a;某课网 1、抓包 通过抓包可以发现登录接口是user/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个password加密参数&#xff0c;还有一个browser_key这个可以写死不需要关心 请求头…...

4.SpringCloud

1.SpringCloud概述 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff0c;一次性令牌&#xff0c;全局锁&#xff0c;…...

OLED透明屏采购指南:如何选择高质量产品?

着科技的不断进步&#xff0c;OLED透明屏作为一种创新的显示技术&#xff0c;在各个行业中得到了广泛应用。 在进行OLED透明屏采购时&#xff0c;选择高质量的产品至关重要。在这篇文章中&#xff0c;尼伽将为您提供一个全面的OLED透明屏采购指南&#xff0c;帮助您了解关键步…...

机器学习编译系列

机器学习编译MLC 1. 引言2. 机器学习编译--概述2.1 什么是机器学习编译 1. 引言 陈天奇目前任教于CMU&#xff0c;研究方向为机器学习系统。他是TVM、MXNET、XGBoost的主要作者。2022年夏天&#xff0c;陈天奇在B站开设了《机器学习编译》的课程。   《机器学习编译》课程共分…...

GPU缓存架构优化与AI加速器内存技术解析

1. GPU缓存架构与AI加速器的内存挑战在AI计算领域&#xff0c;内存子系统已成为制约性能提升的关键瓶颈。传统GPU采用的多级缓存架构&#xff08;L1/L2/L3&#xff09;虽然能有效缓解"内存墙"问题&#xff0c;但随着Transformer等大模型参数量呈指数级增长&#xff0…...

ROS2进阶实践 -- 从零构建模块化差速机器人模型 -- 掌握xacro宏定义与参数化设计

1. 为什么需要xacro宏定义与参数化设计 当你第一次用URDF给机器人建模时&#xff0c;可能会觉得这种XML格式的描述方式很直观。但随着模型复杂度提升&#xff0c;问题就来了——我最近给一个差速机器人添加传感器时&#xff0c;发现URDF文件膨胀到了500多行&#xff0c;其中光是…...

OneNote 2016/2019/2021多版本共存?教你管理不同版本的笔记同步与数据源

OneNote多版本共存管理&#xff1a;数据同步与版本控制的终极指南 在数字笔记领域&#xff0c;微软OneNote凭借其灵活的层级结构和多平台同步能力&#xff0c;成为许多知识工作者的核心工具。但鲜为人知的是&#xff0c;当同一台设备上同时运行多个OneNote版本&#xff08;如UW…...

PySOT单目标跟踪实战:从零搭建环境到模型部署的避坑指南(手把手教学,附代码)

1. 环境准备&#xff1a;从零搭建PySOT开发环境 第一次接触PySOT时&#xff0c;我花了整整两天时间折腾环境配置&#xff0c;踩遍了所有能踩的坑。为了让你们少走弯路&#xff0c;我把这些经验整理成可复现的步骤。首先需要明确的是&#xff0c;PySOT对系统环境有特定要求&…...

LPC18xx/LPC43xx USB0接口低速设备识别问题解决方案

1. 问题现象与背景分析在嵌入式开发领域&#xff0c;NXP LPC1800和LPC4300系列微控制器因其强大的USB主机功能而被广泛应用。但在实际项目中&#xff0c;工程师们发现一个奇怪现象&#xff1a;当某些特定型号的DELL键盘&#xff08;USB低速设备&#xff09;连接到LPC18xx/LPC43…...

多智能体强化学习安全约束冲突解决方案

1. 多智能体强化学习中的安全约束冲突问题解析在机器人集群协同作业、无人机编队飞行、自动驾驶车队等实际场景中&#xff0c;多智能体系统面临着复杂的安全挑战。想象一下繁忙机场的跑道调度场景&#xff1a;数十架无人机需要在有限空域内完成起降、巡航和避让&#xff0c;任何…...

SAP S/4HANA 2SL 中导入 Customizing Collection 的项目实战方法

做 SAP S/4HANA Cloud Public Edition 项目时,配置传输最怕的不是按钮难找,而是时间点没卡准。配置专家在 Configure Your Solution 里改完 SSCUI,业务顾问认为已经完工,测试同事也在等 P-system 里的效果,可真正能不能进入生产系统,还要看 Customizing Collection 是否已…...

洛谷P7071 ‘优秀的拆分’背后:如何用对拍程序验证你的C++代码正确性(附Win10批处理脚本)

洛谷P7071 优秀的拆分背后&#xff1a;如何用对拍程序验证你的C代码正确性&#xff08;附Win10批处理脚本&#xff09; 在编程竞赛中&#xff0c;写出能通过样例的代码只是第一步。真正考验选手的是代码在各种边界条件下的稳定性。很多选手都有这样的经历&#xff1a;提交代码后…...

量子动态电路中的非破坏性状态快照技术解析

1. 量子动态电路中的非破坏性状态快照技术解析量子计算领域长期面临一个基础性难题&#xff1a;如何在不破坏量子态的前提下获取其状态信息。传统量子态层析&#xff08;QST&#xff09;需要大量相同量子态的副本&#xff0c;且测量过程会导致原始态坍缩。这项由宾夕法尼亚州立…...

Seraphine英雄联盟战绩查询工具终极指南:智能排位助手完全教程

Seraphine英雄联盟战绩查询工具终极指南&#xff1a;智能排位助手完全教程 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否在英雄联盟排位赛中经常因为BP阶段手忙脚乱而错失先机&#xff1f;是否希望快…...