###前提・実現したいこと
サーブレットでCSVを作成させて遅延なくハードディスクへ記録させたいと思います。
###発生している問題・エラーメッセージ
サーブレットを実行し、CSVを作成するのですが、実際にハードディスクに記録
されるまでに5秒程度の遅延が発生しています。
上記と同じことを、jdk1.4とtomcat3の組み合わせで実行しているときは、問題
なく運用できておりましたが、jdk8とtomcat8の環境に変えてから上記の問題が
発生するようになりました。
ソースコード問題、tomcat等の設定でお気づきの点がございましたら、
ご教示いただければ、幸甚にぞんじます。
###該当のソースコード
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma","no-cache");
request.setCharacterEncoding("UTF-8");
/途中省略/
synchronized (session) {
sc_ = getServletConfig().getServletContext();
connPool_ = (ConnectionPool)sc_.getAttribute("connPool");
loginUser = (SysUserBeans)session.getAttribute("loginUser");
String sceneStr = request.getParameter("scene"); int scene = -1; if (sceneStr != null) scene = Integer.parseInt(sceneStr); switch(scene) { case 1: // 一覧 response.setContentType(CONTENT_TYPE); showRows(request, response, session); break;
/途中省略/
case 22: // CSV作成 downloadCSV(request, response, session); break; default: // 検索条件 response.setContentType(CONTENT_TYPE); sc_.getRequestDispatcher("/view/sales/salesAggregateFrame.jsp").forward(request, response); } rows.setReqPrintUrl(null);
}
}
private void downloadCSV(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException, IOException {
SalesAggregateBeans rows = (SalesAggregateBeans)session.getAttribute("salesAggregate");
SysUserBeans loginUser = (SysUserBeans)session.getAttribute("loginUser");
String fileName; fileName = sc_.getRealPath("/data/210.csv"); rows.setReqPrintUrl(response.encodeURL("/example/data/.csv")); FileOutputStream fo = new FileOutputStream(fileName); OutputStreamWriter ps = new OutputStreamWriter(fo, "SJIS"); int iMax = rows.getSize(); for (int i = 0; i < iMax; i++) { rows.getRow(i); ps.write("\"" + rows.getCd() + "\",\""); ps.write(rows.getName() + "\",\""); ps.write(rows.getAddress() + "\",\""); ps.write(rows.getReadings() + "\",\""); ps.write(rows.getSalesmanName() + "\","); ps.write(rows.getCarryOver() + ","); ps.write(rows.getSum(0) + ","); ps.write(rows.getSum(1) + ","); ps.write(rows.getSum(2) + ","); ps.write(rows.getBalance()); ps.flush(); } ps.close(); ps = null; fo.close(); fo = null; sc_.getRequestDispatcher("/view/sales/salesAggregate.jsp").forward(request, response);
}
###試したこと
CSVの出力件数は、わずか5行でも、100行程度でも、5秒程度の遅延が発生しています。
###補足情報(言語/FW/ツール等のバージョンなど)
・Windows10
・jdk8
・tomcat8
(サーブレットの設定は、インストール直後の状態です。)