JSP & Servlet(csvファイル読み込み)

JSP&Servlet

csvファイルを読み込んでみよう。今回はそこで作成したオブジェクトをアプリケーションスコープに配置する。
実行すると、csvファイルの内容をテーブルで出力される。

[実行例]

[作例]
1.CSVLessonプロジェクトを作成する。

2.以下からsample.csvをダウンロードする。

3.WebContentフォルダ内にdataフォルダを作成し、その中にsample.csvをコピペによって配置する。

Model

4.modelパッケージを作成しその中にSales.javaを作成する。
●model.Sales.java

01package model;
02 
03import java.io.Serializable;
04 
05public class Sales implements Serializable{
06  private String year;
07  private String salesA;
08  private String salesB;
09  public Sales(){}
10  public Sales(String year,String salesA,String salesB){
11    this.year=year;
12    this.salesA=salesA;
13    this.salesB=salesB;
14  }
15   
16  public String getYear() {
17  return year;
18}
19public void setYear(String year) {
20  this.year = year;
21}
22public String getSalesA() {
23  return salesA;
24}
25public void setSalesA(String salesA) {
26  this.salesA = salesA;
27}
28public String getSalesB() {
29  return salesB;
30}
31public void setSalesB(String salesB) {
32  this.salesB = salesB;
33}
34}

5.modelパッケージ内にSalesParser.javaを以下のように作成する。

01package model;
02 
03import java.io.BufferedReader;
04import java.io.FileInputStream;
05import java.io.FileNotFoundException;
06import java.io.IOException;
07import java.io.InputStreamReader;
08import java.io.UnsupportedEncodingException;
09import java.util.ArrayList;
10import java.util.List;
11 
12public class SalesParser {
13  public List<Sales> getList(String path){
14    List<Sales> list=new ArrayList<>();
15    BufferedReader br=null;
16    try {
17      FileInputStream fis=new FileInputStream(path);
18      InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
19      br=new BufferedReader(isr);
20      String line;
21      while((line=br.readLine()) !=null){
22        if(line.startsWith("年度")){
23          continue;
24        }
25        /*
26         splitの第二引数は分割数、ここに負の値を設定すると最後の部分が空白でも空白文字列として配列を作る
27         例)
28         String csv="hoge,fuga,,bar,,";
29         String[] data=csv.split(",",-1);
30         結果)data[0]="hoge",data[1]="fuga",data[2]="",data[3]="bar",data[4]="",data[5]=""
31         */
32        String[] data=line.split(",",-1);
33        String year=data[0];
34        String salesA=data[1];
35        String salesB=data[2];
36        Sales sales=new Sales(year,salesA,salesB);
37         
38        list.add(sales);
39      }
40    } catch (FileNotFoundException e) {
41      // TODO Auto-generated catch block
42      e.printStackTrace();
43    } catch (UnsupportedEncodingException e) {
44      // TODO Auto-generated catch block
45      e.printStackTrace();
46    } catch (IOException e) {
47      // TODO Auto-generated catch block
48      e.printStackTrace();
49    }finally{
50      if(br != null){
51        try {
52          br.close();
53        } catch (IOException e) {
54          // TODO Auto-generated catch block
55          e.printStackTrace();
56        }
57      }
58    }
59    return list;
60  }
61}

Controller

6.controllerパッケージ内にIndex.javaを以下のように作成する。
●controller.Index.java

01package controller;
02 
03import java.io.IOException;
04import java.util.List;
05 
06import javax.servlet.RequestDispatcher;
07import javax.servlet.ServletContext;
08import javax.servlet.ServletException;
09import javax.servlet.annotation.WebServlet;
10import javax.servlet.http.HttpServlet;
11import javax.servlet.http.HttpServletRequest;
12import javax.servlet.http.HttpServletResponse;
13 
14import model.Sales;
15import model.SalesParser;
16 
17 
18@WebServlet("/index")
19public class Index extends HttpServlet {
20  private static final long serialVersionUID = 1L;
21        
22  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23    ServletContext application=this.getServletContext();
24     
25    List<Sales> list=(List<Sales>) application.getAttribute("list");
26    if(list==null){
27      String path=application.getRealPath("/WEB-INF/data/sample.csv");
28      SalesParser parser=new SalesParser();
29      list=parser.getList(path);
30      application.setAttribute("list",list);
31    }
32     
33    RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/view/index.jsp");
34    rd.forward(request, response);
35  }
36 
37}

View

7.WEB-INF内にviewフォルダーを作成し、index.jspを以下のように作成する。
●/WEB-INF/view/index.jsp

01<%@ page language="java" contentType="text/html; charset=UTF-8"
02    pageEncoding="UTF-8" import="model.*,java.util.*"%>
03 <%
04 List<Sales> list=(List<Sales>)application.getAttribute("list");
05 %>
06<!DOCTYPE html>
07<html>
08<head>
09<meta charset="UTF-8"/>
10<title>Insert title here</title>
11</head>
12<body>
13<table border="1">
14<tr><th>年度</th><th>SalesA</th><th>SalesB</th></tr>
15<%for(Sales s:list){%>
16<tr><td><%=s.getYear() %></td><td><%=s.getSalesA() %></td><td><%=s.getSalesB() %></td><tr>
17<%} %>
18</table>
19</body>
20</html>

コメント

タイトルとURLをコピーしました