在本教程中,我们从 WEB-INF 目录中的 CSV 文件读取数据。 我们使用 servlet,JSP 文件和 JSTL 库。 Web 应用已部署在 Jetty 上。 Opencsv 库用于读取 CSV 数据。
CSV
CSV(逗号分隔值)格式是在电子表格和数据库中使用的非常流行的导入和导出格式。
在以下 Web 应用中,我们从 WAR 文件中的 CSV 文件读取数据,并将数据显示在网页中。 标记人口超过一亿的国家。
这是项目结构。
pom.xml
该项目使用以下依赖项:avax.servlet-api
,opencsv
和jstl
。
resources/countries.csv
这是countries.csv
文件。 它位于src/main/resources
目录中。 生成应用后,文件将复制到 WAR 的WEB-INF/classes
目录。
com/zetcode/bean/Country.java
这是一个Country
bean,具有两个属性:name
和population
。
@CsvBindByName
将name
属性映射到Name
列中的字段。
com/zetcode/CountryService.java
CountryService
从 CSV 文件读取数据。
我们使用getResourceAsStream()
方法将InputStream
转换为countries.csv
文件。
如果未打开输入流,则返回空Optional
。 这用于避免null
值。
我们使用 Opencsv 的HeaderColumnNameMappingStrategy
将Country
bean 映射到 CSV 文件中的行。 每行都转换为一个 bean。 映射是在@CsvBindByName
注释的帮助下完成的。
使用CsvToBeanBuilder
,我们解析 CSV 文件并将行转换为Country
bean 列表。
com/zetcode/web/ReadCountries.java
在ReadCountries
Servlet 中,我们称为getListOfCountries()
服务方法。 如果有一些国家,我们将返回的国家列表设置为request
对象作为属性。 处理被传送到listCountries.jsp
。 如果找不到数据,则返回错误消息。
webapp/listCountries.jsp
在listCountries.jsp
文件中,我们在 HTML 表中显示数据。
我们使用两个 JSTL 标签库:核心库和格式库。
使用<c:forEach>
标签,我们遍历countries
对象。
如果该国家/地区的人口超过一亿,则使用marked
类作为行;否则,使用marked
类作为行。 它以另一种颜色显示行。 该测试使用 JSTL 的<c:if>
标签执行。 <fmt:formatNumber>
标签用于格式化该值。
webapp/index.jsp
index.jsp
包含一个调用ReadCountries
servlet 的链接。 Servlet 从 CSV 文件读取数据,然后将数据以视图的形式返回给浏览器。
webapp/showError.jsp
此模板文件显示错误消息。
在本教程中,我们展示了如何读取 WAR 文件中的 CSV 数据。
您可能也对以下相关教程感兴趣: Java Servlet 复选框教程, Java Servlet PDF 教程, Java Servlet 图表教程, Servlet FreeMarker JdbcTemplate 教程,Java 教程。