繁体   English   中英

通过JSP页面上载CSV文件并使用Servlet打印其内容。

[英]Upload a CSV file through a JSP page and print its contents using a Servlet..?

我需要设计一个JSP页面,通过该页面用户可以上传CSV文件,然后需要通过Servlet在屏幕上打印其内容。

HTML代码像这样

<form action="decode" enctype="multipart/form-data" method="post>
    <input type="file" name="record" />
    <input type="submit" />
</form>

现在在decode.java中,

DiskFileItemFactory fi = new DiskFileItemFactory();
ServletContext sc = this.getServletConfig().getServletContext();
File file = (File) sc.getAttribute("javax.servlet.context.tempdir");
fi.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(fi);
List<FileItem> items = upload.parseRequest(request);

接下来,我应该怎么做才能读取上传的CSV文件中的每个单词...? 我不想将CSV文件存储在任何地方。 只想阅读其内容并打印它们。

您可以使用Apache的JAVA CSV解析器库读取CSV文件。

然后在您的类路径中导入库后,您可以简单地将其用作

Reader in = new FileReader(file); //The file is the file which you get from the request(java.io.File)
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    //Do something with the records
}

有关更多信息,请访问https://commons.apache.org/proper/commons-csv/index.html

我也有类似的要求,我需要通过jsp上传一个jsp文件并通过Servlet处理它

因此在这里,我使用了Apache称为opencsv的库。

upload.jsp

<form action="./upload" method="post" enctype="multipart/form-data">
    <input type="text" name="description" />
    <input type="file" name="file" />
    <input type="submit" />
</form>

UploadServlet.java

import com.opencsv.CSVReader;


@WebServlet(name = "upload", urlPatterns = { "/upload" })
@MultipartConfig
public class UploadServlet extends HttpServlet {

    public UploadServlet() {
        super();
    }

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Part filePart = request.getPart("file"); 
        InputStream fileContent = filePart.getInputStream();

        Reader in = new InputStreamReader(fileContent);

        CSVReader reader;
        Iterator<String[]> iterator;

        try {

            reader = new CSVReader(new InputStreamReader(fileContent));
            iterator = reader.iterator();

            String[] row = iterator.next();

            Map<Object, String> map = new HashMap<>();
            for(int i = 0; i < row.length; i++){
                map.put(i, row[i]);

                //Do rest of the code

            }

        }catch(Exception e) {}

        in.close();

    }

}

其他

在开发上述要求时,我还遇到了一个问题,抛出异常,该异常指定ClassNotFound ....(将inputstream转换为CSVReader实例时)

这是因为即使将库正确地附加到了开发环境,它也没有附加到运行时环境。

解决方案:

将库文件复制到服务器位置的lib文件夹中,然后重新启动服务器(先关闭然后再启动)。 通过这样做,我能够解决问题

另一个更好的选择是使用诸如Gradle或Maven之类的Build工具,而不是使用JSP / Servlet(我的个人观点)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM