package com.zky.hotelmanagement.web.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.poi.hssf.usermodel.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//完成方法分发
//1.获取请求路径
String uri = request.getRequestURI();
System.out.println("请求uri:"+uri);
//2.获取方法名
String methodName = uri.substring(uri.lastIndexOf('/') + 1);
System.out.println("方法名称:"+methodName);
request.setCharacterEncoding("utf-8");
//3.获取方法对象Method
try {
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.执行方法
method.invoke(this,request,response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public void writerValue(HttpServletResponse response,Object obj) throws IOException {
response.setContentType("application/json;charset=utf-8");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getOutputStream(),obj);
}
public void writeValueAsString(HttpServletResponse response,Object obj) throws IOException {
response.setContentType("application/json;charset=utf-8");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(obj);
response.getWriter().write(json);
}
/**
* 生成Excel表
* @param response
* @param dataList 表格数据
* List<String[]> dataList = new ArrayList<>();
* List<Map<String, Object>> results = service.findAll();
* for (Map<String, Object> result : results) {
* System.out.println(result);
* String[] data = new String[header.length];
*
* for (int i = 0; i < header.length; i++) {
* if (result.get(header[i]) != null)
* //一行中所有单元格数据
* data[i] = result.get(header[i]).toString();
* }
* dataList.add(data);
*
* }
* @param header 表头
* @param name 表名
* @throws IOException
*/
public void writeToExcel(HttpServletResponse response, List<String[]> dataList, String[] header,String name) throws IOException{
//声明一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFCellStyle style = workbook.createCellStyle();
//生成一个表格,设置表格名称为"UserData"
HSSFSheet sheet = workbook.createSheet(name);
//设置表格列宽度为10个字节
sheet.setDefaultColumnWidth(10);
//创建第一行表头
HSSFRow headrow = sheet.createRow(0);
// 遍历添加表头
for (int i = 0; i < header.length; i++) {
//创建一个单元格
HSSFCell cell = headrow.createCell(i);
//创建一个内容对象
HSSFRichTextString text = new HSSFRichTextString(header[i]);
//将内容对象的文字内容写入到单元格中
cell.setCellValue(text);
}
//模拟遍历结果集,把内容加入表格
int temp = 1;
for (String[] data : dataList) {
HSSFRow row = sheet.createRow(temp++);
for (int i = 0; i < data.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(data[i]);
cell.setCellValue(text);
}
}
//准备将Excel的输出流通过response输出到页面下载
//八进制输出流
response.setContentType("application/octet-stream");
//这后面可以设置导出Excel的名称,此例中名为userData.xls
response.setHeader("Content-disposition", "attachment;filename="+name+".xls");
//刷新缓冲
response.flushBuffer();
//workbook将Excel写入到response的输出流中,供页面下载
workbook.write(response.getOutputStream());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构