簡體   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