苍穹外卖-DAY12 一、apche poi
Apache POI 是一个非常著名的开源 Java 库,全称为 Apache Poor Obfuscation Implementation (虽然名字有点自嘲的意思,意为“糟糕的模糊实现”),由 Apache 软件基金会维护。
简单来说,它的核心作用就是让 Java 程序能够读取、创建和修改 Microsoft Office 格式的文件 (主要是 Excel,但也包括 Word、PowerPoint 等)。
如果你在做企业级 Java 开发(如后台管理系统),经常会遇到“导出报表”、“导入员工数据”等需求,这时候 Apache POI 几乎是必选的技术之一。
1. 核心组件与命名规则 Apache POI 的组件命名非常有意思,主要分为两类:前缀为 H 的和前缀为 X 的。
H 系列 (Horrible): 处理 2003 版及以前的老格式(二进制格式,如 .xls)。
X 系列 (XML): 处理 2007 版及以后的新格式(基于 OOXML 标准,如 .xlsx)。
为了方便记忆,我为你整理了一个对照表:
组件名称
对应 Office 文件
文件后缀
说明
HSSF
Excel ‘97(-2007)
.xls
处理旧版 Excel,现在用得较少。
XSSF
Excel 2007+
.xlsx
最常用 ,处理新版 Excel。
SXSSF
Excel 2007+
.xlsx
大文件专用 ,流式写入,解决内存溢出问题。
HWPF / XWPF
Word
.doc / .docx
处理 Word 文档。
HSLF / XSLF
PowerPoint
.ppt / .pptx
处理 PPT 幻灯片。
2. 快速入门 这是 POI 最常见的应用场景。假设我们要生成一个包含“姓名”和“年龄”的简单 Excel 表格。
首先,需要引入 Maven 依赖:
1 2 3 4 <dependency > <groupId > org.apache.poi</groupId > <artifactId > poi-ooxml</artifactId > <version > 5.2.3</version > </dependency >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;public class PoiExample { public static void main (String[] args) { try (Workbook workbook = new XSSFWorkbook ()) { Sheet sheet = workbook.createSheet("员工列表" ); Row headerRow = sheet.createRow(0 ); headerRow.createCell(0 ).setCellValue("姓名" ); headerRow.createCell(1 ).setCellValue("年龄" ); Row dataRow = sheet.createRow(1 ); dataRow.createCell(0 ).setCellValue("张三" ); dataRow.createCell(1 ).setCellValue(25 ); try (FileOutputStream fileOut = new FileOutputStream ("employees.xlsx" )) { workbook.write(fileOut); System.out.println("Excel 文件生成成功!" ); } } catch (Exception e) { e.printStackTrace(); } } }
3.报表功能 报表接口
报表通用接口实现
自此,苍穹外卖项目后端部分结束
二、苍穹外卖云服务器部署 1.打包 日志等级 warn
端口:5353
maven clean compile 打包
2.nginx配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 server { listen 5959; server_name 101.200.184.201; # 前端项目(静态站点/SPA)根目录:你说的真实路径在这里 root /www/wwwroot/sky/chuan_sky/sky; index index.html index.htm; #CERT-APPLY-CHECK--START # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除 include /www/server/panel/vhost/nginx/well-known/101.200.184.201_80.conf; #CERT-APPLY-CHECK--END include /www/server/panel/vhost/nginx/extension/101.200.184.201_80/*.conf; #ERROR-PAGE-START 错误页配置 error_page 404 /404.html; #ERROR-PAGE-END # 如果你这个站点不需要 PHP,可注释掉下一行(不影响前端静态页面也能跑) include enable-php-00.conf; #REWRITE-START URL重写规则引用(你面板的伪静态) include /www/server/panel/vhost/rewrite/101.200.184.201_80.conf; #REWRITE-END # 禁止访问敏感文件 location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$ { return 404; } # 禁止访问敏感目录 location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ { return 404; } # 一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } # 禁止在证书验证目录放入敏感文件 if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { return 403; } # 静态资源缓存 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log /dev/null; access_log /dev/null; } location ~ .*\.(js|css)$ { expires 12h; error_log /dev/null; access_log /dev/null; } # ========================= # 前端入口(SPA 强烈建议) # ========================= location / { try_files $uri $uri/ /index.html; } # ========================= # 反向代理到后端:101.200.184.201:5353 # ========================= # 管理端:/api/ => 后端 /admin/ location /api/ { proxy_pass http://127.0.0.1:5353/admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 用户端:/user/ => 后端 /user/ location /user/ { proxy_pass http://127.0.0.1:5353/user/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket:/ws/ => 后端 /ws/ location /ws/ { proxy_pass http://127.0.0.1:5353/ws/; proxy_http_version 1.1; proxy_read_timeout 3600s; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } access_log /www/wwwlogs/101.200.184.201_5959.log; error_log /www/wwwlogs/101.200.184.201_5959.error.log; }
MYSQL
Redis
SpringBoot
vue