用于将数据导出到 Excel Sheet 的没有 HTML 代码的 JSP 页面

2024-03-13

我在将数据导出到 Excel 工作表时遇到问题,这是因为我团队中的其他开发人员编写了一些代码。因此,主要问题是使用 JSP 页面但不使用任何 HTML 代码将数据导出到 Excel 或 .cvs。 任何建议也将帮助我探索我的发展领域。感谢您的努力。


为此最好使用 Servlet。原始 Java 代码不属于 JSP 文件,这只是维修麻烦 https://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files/3180202#3180202.

首先,创建一个简单的 Java 实用程序类,例如List<List<T>> or a List<Data>(其中Data代表一行)代表 CSV 内容和OutputStream作为方法参数并编写执行数据复制任务的逻辑。

一旦你开始工作,创建一个 Servlet 类,它接受一些 CSV 文件标识符作为请求参数或路径信息(我建议使用路径信息,因为雷蒙德团队开发的某个 Web 浏览器将无法检测文件名/mimetype),使用标识符来获取List<List<T>> or List<Data>从某处并将其写入OutputStream of the HttpServletResponse以及一组正确的响应标头。

这是一个基本的启动示例:

public static <T> void writeCsv (List<List<T>> csv, char separator, OutputStream output) throws IOException {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, "UTF-8"));
    for (List<T> row : csv) {
        for (Iterator<T> iter = row.iterator(); iter.hasNext();) {
            String field = String.valueOf(iter.next()).replace("\"", "\"\"");
            if (field.indexOf(separator) > -1 || field.indexOf('"') > -1) {
                field = '"' + field + '"';
            }
            writer.append(field);
            if (iter.hasNext()) {
                writer.append(separator);
            }
        }
        writer.newLine();
    }
    writer.flush();
}

以下是如何使用它的示例:

public static void main(String[] args) throws IOException {
    List<List<String>> csv = new ArrayList<List<String>>();
    csv.add(Arrays.asList("field1", "field2", "field3"));
    csv.add(Arrays.asList("field1,", "field2", "fie\"ld3"));
    csv.add(Arrays.asList("\"field1\"", ",field2,", ",\",\",\""));
    writeCsv(csv, ';', System.out);
}

在 Servlet 中,您基本上可以执行以下操作:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String filename = request.getPathInfo();
    List<List<Object>> csv = someDAO().list();
    response.setHeader("content-type", "text/csv");
    response.setHeader("content-disposition", "attachment;filename=\"" + filename + "\"");
    writeCsv(csv, ',', response.getOutputStream());
}

将此 servlet 映射到类似的东西上/csv/*并将其调用为类似的东西http://example.com/context/csv/filename.csv。基本上就是这样。路径信息中的文件名很重要,因为雷蒙德的一个团队开发的某个网络浏览器会忽略filename的一部分Content-Dispositionheader 并使用 URL 的最后一个路径部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于将数据导出到 Excel Sheet 的没有 HTML 代码的 JSP 页面 的相关文章

  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • JSP 标记文件,输出其正文或将其返回到变量中

    我在 tag 文件中有一个自定义标签 用于计算并输出一个值 因为我无法在这里发布代码 所以我们假设一个简单的例子 文件 mytag tag 的内容 lt tag dynamic attributes dynamicParameters gt
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 需要有关将代码转换为 Matlab_extension 1 的建议

    这是之前提出的问题的扩展 link https stackoverflow com questions 20851902 need suggestion on code conversion to matlab noredirect 1 c
  • 在 Android 屏幕上显示通知

    我正在使用此代码发送本地通知 mNotificationManager NotificationManager getSystemService Context NOTIFICATION SERVICE PendingIntent cont
  • 如何在每页显示子报表的标题?

    我需要在C1Report设计器中设置什么属性才能在每个新页面上显示我的子报表的标题 Repeat true 设置该属性后 子报表不会在每个新页面上显示标题 它确实工作得很好Main Report tho 您需要在子报表的主键字段上添加分组
  • SSL_CTX_load_verify_locations 失败并显示 SSL_ERROR_NONE

    我到处搜索 但没有找到这个问题的解释 我正在运行以下命令 int ret 0 ERR clear error ret SSL CTX load verify locations ctx f 50 server SSLCACertificat
  • 如何在 Groovy 2.4 中计算 sha256 哈希值

    我正在尝试计算 Groovy 版本 2 4 16 中的 sha256 哈希值 这是 jmeter 测试的一部分 这是它支持的 Groovy 版本 我认为我无法更改它 我知道在 Groovy 2 5 中你可以使用这样的代码 https mrh
  • 如何使用javascript填写表单字段并提交?

    如果我有一个 html 文档 其大致结构是 div class headerstuff stuff div div class body div
  • 使用三元运算符而不是 IF THEN 有什么意义? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何实现全屏模式?

    在 Windows 操作系统下运行的应用程序如何实现像 Web 浏览器一样的全屏模式 它比最大化窗口和隐藏窗口装饰更复杂吗 表单样式 无 最大化 如果您指定语言 您可能会获得一些示例代码 EDIT 回应什么格雷格发布 https stack
  • 使用 ggplot2 中的 stat_poly_eq 指定每个方面的公式

    我借用了这个示例数据集here https stackoverflow com questions 44912496 geom smooth with facet grid and different fitting functions L
  • 异步方法恢复后值未更新

    看这段代码 public class SharedData public int Value get set void button1 Click object sender EventArgs e AAA async Task BBB S
  • Mercurial 卡在“等待锁定”状态

    克隆 Mercurial 存储库时 Windows 出现蓝屏 重新启动后 我现在几乎所有 hg 命令都会收到此消息 c src gt hg commit waiting for lock on repository c src McVrsS
  • 在比较四个字符的字符串时,有什么简单的方法可以检查两个或多个字符是否相等?

    我必须比较两个字符串 例如INTU and IXTE并检查两个或多个字符是否相同 对于前两个字符串 我想返回true 因为 I 和 T 相同 字符串中字母的顺序最终无关紧要 因为每个字符不能出现在字符串中的不同位置 似乎应该有一个简单的方法
  • 使用 dplyr 根据最大​​行值添加新列?

    我有一个大型数据库 其中包含一系列带有数字的列 我想用dplyr添加新列 mutate 其值是具有最大值的列的名称 所以 对于下面的例子 set seed 123 data frame bob rnorm 10 sam rnorm 10 d
  • 此计算机上未安装 Azure CLI 2.x

    我正在尝试使用 az storage blob upload batch 上传 blob 我遇到了以下两个例外 错误 此计算机上未安装 Azure CLI 2 x 错误 脚本失败 出现错误 错误 无法找到可执行文件 pwsh 请验证文件路径
  • 这是一个正确的线程安全随机包装器吗?

    我对线程和并发相当缺乏经验 为了解决这个问题 我目前正致力于在 F 中实现随机搜索算法 我遵循现有 C 示例的想法 围绕 System Random 类编写了一个包装器 但由于我不确定如何开始对其错误行为进行单元测试 所以我想听听更有经验的
  • 将 nvarchar 转换/转换为日期时间

    我有表 id timestamp 1 31 10 2020 16 32 11 2 09 09 2020 09 15 49 3 22 04 2020 02 48 15 表中有大量这些数据 列时间戳是数据类型 nvarchar 我需要按日期对数
  • 批处理cmd中弹出消息

    echo msgbox Hey Here is a message gt tmp tmp vbs cscript nologo tmp tmp vbs del tmp tmp vbs or echo msgbox Hey Here is a
  • 是否可以记住可组合函数的状态?

    我试图记住类型变量的状态 Composable gt Unit 我没有收到编译器错误 但应用程序在启动时崩溃 为什么会发生这种情况以及解决此问题的最佳方法是什么 最小可重现示例 Composable fun App isHappy Bool
  • ViewPager2.setOffscreenPageLimit()问题

    API 30 Android 10 0 Google API AVD x86 问题是 只是为了测试 ViewPager2 我将 ViewPager2 与 TabLayout 和附加片段一起使用 然后我将 离屏页面限制值 设置为 1 我预计将
  • 用于将数据导出到 Excel Sheet 的没有 HTML 代码的 JSP 页面

    我在将数据导出到 Excel 工作表时遇到问题 这是因为我团队中的其他开发人员编写了一些代码 因此 主要问题是使用 JSP 页面但不使用任何 HTML 代码将数据导出到 Excel 或 cvs 任何建议也将帮助我探索我的发展领域 感谢您的努