package com.legendapl.poc; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; import java.util.HashMap; import java.util.Map; /** * Servlet implementation class BIFacade */ @WebServlet("/BIFacade") public class BIFacade extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public BIFacade() { super(); // TODO Auto-generated constructor stub } public static Map keyMap_ = new HashMap(); /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub try { //JSPから入力されたOneTimeKeyのチェック String key = request.getParameter("key"); if(key==null || "".equals(key)) { throw new IllegalArgumentException("keyがありません"); } Map keymap = (Map)request.getServletContext().getAttribute("keymap"); if(keymap == null) { throw new IllegalArgumentException("keyがありません"); } Map facadeMap = (Map)keymap.get(key); if(facadeMap == null) { throw new IllegalArgumentException("keyが無効です"); } //JSPから入力されたパラメータを取得 String nengetu = request.getParameter("nengetu"); String userID = request.getParameter("userID"); String corpID = request.getParameter("corpID"); String Syubetu = request.getParameter("Syubetu"); String id = (String)facadeMap.get("id"); String pw = (String)facadeMap.get("pw"); HttpURLConnection con = null; //BI側に送信するURLの作成 //URL url = new URL("http://192.168.0.244:8080/jasperserver-pro/flow.html?j_username="+id + "&j_password=" + pw + "&_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic%2FSCM_NIPPAI%2FTEAM_T%2FDATA&reportUnit=%2Fpublic%2FSCM_NIPPAI%2FTEAM_T%2FDATA%2FSCM133&output=pdf&NENGETU="+nengetu); //BI側に送信するURLの作成 URL url = new URL("http://172.16.11.146:8080/jasperserver-pro/flow.html?j_username="+id + "&j_password=" + pw + "&_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic%2FJT%2F10_SIHARAI&reportUnit=%2Fpublic%2FJT%2F10_SIHARAI%2FPAY16101&output=pdf&P_NENTUKI="+nengetu+"&P_USER="+userID+"&P_CORP_ID="+corpID); //PDF if (Syubetu.equals("1")){ url = new URL("http://172.16.11.146:8080/jasperserver-pro/flow.html?j_username="+id + "&j_password=" + pw + "&_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic%2FJT%2F10_SIHARAI&reportUnit=%2Fpublic%2FJT%2F10_SIHARAI%2FPAY16101&output=pdf&P_NENTUKI="+nengetu+"&P_USER="+userID+"&P_CORP_ID="+corpID); } //PDF保存 if (Syubetu.equals("2")){ url = new URL("http://172.16.11.146:8080/jasperserver-pro/flow.html?j_username="+id + "&j_password=" + pw + "&_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic%2FJT%2F10_SIHARAI&reportUnit=%2Fpublic%2FJT%2F10_SIHARAI%2FPAY16101&output=pdf&P_NENTUKI="+nengetu+"&P_USER="+userID+"&P_CORP_ID="+corpID); } //エクセル if (Syubetu.equals("3")){ url = new URL("http://172.16.11.146:8080/jasperserver-pro/flow.html?j_username="+id + "&j_password=" + pw + "&_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic%2FJT%2F10_SIHARAI&reportUnit=%2Fpublic%2FJT%2F10_SIHARAI%2FPAY16101&output=xls&P_NENTUKI="+nengetu+"&P_USER="+userID+"&P_CORP_ID="+corpID); } //認証のみ //URL url = new URL("http://172.16.11.146:8080/jasperserver-pro/flow.html?j_username=superuser&j_password=superuser&_flowId=homeFlow"); System.out.println(url); // 接続用HttpURLConnectionオブジェクト作成 con = (HttpURLConnection)url.openConnection(); // リクエストメソッドの設定 con.setRequestMethod("GET"); // リダイレクトを自動で許可しない設定 con.setInstanceFollowRedirects(false); // ヘッダーの設定(複数設定可能) con.setRequestProperty("Accept-Language", "jp"); // 接続 con.connect(); // URLのレスポンスであるPDFを取得 InputStream in = con.getInputStream(); //PDF if (Syubetu.equals("1")){ response.setContentType("application/pdf"); } //PDF保存 if (Syubetu.equals("2")){ response.setContentType("application/pdf"); } //エクセル if (Syubetu.equals("3")){ response.setContentType("application/vnd.ms-excel"); } //ファイルダウンロードする場合は以下を設定 if (Syubetu.equals("2")){ response.setHeader("Content-Disposition","attachment; filename=sample.pdf"); } //エクセル if (Syubetu.equals("3")){ response.setHeader("Content-Disposition","attachment; filename=sample.xls"); } // PDFを書き出してブラウザに返す OutputStream out = response.getOutputStream(); byte bodyByte[] = new byte[1024]; for(;;){ int readChar = in.read(bodyByte); if (readChar < 0) break; out.write(bodyByte,0,readChar); System.out.println(readChar); } in.close(); out.close(); } catch (IOException ioex ){ ioex.printStackTrace(); throw ioex; } catch (RuntimeException rex ){ rex.printStackTrace(); throw rex; } catch (Exception ex ){ ex.printStackTrace(); } finally{ } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }