首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在基于非模块化Servlet的web应用中使用封装模块

在基于非模块化Servlet的web应用中使用封装模块
EN

Stack Overflow用户
提问于 2022-05-11 00:56:10
回答 1查看 58关注 0票数 1

我有一个现有的基于Servlets的Java web应用程序。这是一个Eclipse项目,在Tomcat 10中运行。

到目前为止,应用程序还没有使用任何Java模块化/ JPMS。代码库从JDK 8开始,但现在使用JDK 17并工作。

现在,我有了一个添加XLSX文件导出的特性请求。为此,我想使用Apache的XSSF。

但是POI是一个很大的库,有很多封闭的罐子,我有点担心“污染”我的类路径。

关于“深度防御”,我不希望我的应用程序的Internet表面部分能够直接访问任何POI类或它的依赖项。例如,为了避免此类类可能被用于小工具链中。

我的XLSX导出特性的API基本上如下所示:

代码语言:javascript
复制
public class MyCustomDataTransferObject {
    // ... some attributes with getters and setters
}

public class MyXLSXExportException extends Exception {
    // ...
}

public interface MyXLSXExport {
    byte[] createXLSXOutputFromData( MyCustomDataTransferObject bean )
            throws MyXLSXExportException;
}

// That's all.

我的主应用程序不应该访问其他任何东西!根本没有一个XSSF类。

我的第一个想法是:为XLSX导出编写一个微服务,并从我的主要应用程序(通过回环接口)使用HTTP(S)在内部访问它。

但是我想:这不是Java 9模块系统的一个很好的用例吗?

如果我在正确的轨道上:如何使我的非模块化主项目使用XLSX导出模块?我想XLSX导出模块将进入工作区中的一个新的专用Eclipse项目。XLSX导出模块项目获得一个module-info,在主项目的项目属性中,我必须将XLSX项目添加为模块路径依赖项。对吗?主项目本身需要一个module-info吗?在Tomcat中部署此设置需要考虑什么?你以前这么做过吗?有反对意见或其他想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-11 05:40:04

在走上在已经很复杂的事情( POI,更不用说应用程序的其他部分)基础上添加大量复杂性的路线之前,请考虑完全不使用POI。

如果您所做的只是在单个XLSX工作表中提供数据提要,那么您不需要处理POI。

我有几个(内部)项目,它们使用POI导出XLSX数据,并且正在处理另一个项目,并且热衷于避免使用POI (出于同样的原因,您希望封装它,另外还有一个事实,即当数据进入时,我想源源不断地输出)。我遇到了一个问题:How to create and write to Excel file (.xlsx)?,并受到了产生这个问题的答案的启发:https://github.com/Yaytay/streaming-xlsx-writer

它所做的就是在数据输入时将带有单个工作表的XLSX文件流到OutputStream中。这里有一些基本的格式(如果您需要更多的话,可以随意询问)。内存开销几乎为零,并且没有依赖项。

这是非常新的,所以我还没有战斗测试它,但如果你发现任何故障,我会修复它,因为我需要它为我的项目工作:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72194322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档