需求:serlvet經過處理通過報表工具返回一張報表圖(柱狀圖 折線圖)。
現在需要把這個圖存儲到本地 以便隨時查看
// 構造URL URL url = new URL(endStr); // 打開URL連接 URLConnection con = url.openConnection(); // 得到URL的輸入流 InputStream input = con.getInputStream(); // 設置數據緩沖 byte[] bs = new byte[1024 * 2]; // 讀取到的數據長度 int len; // 輸出的文件流保存圖片至本地 OutputStream os = new FileOutputStream(“D:\\a.jpg”); while ((len = input.read(bs)) != -1) { os.write(bs, 0, len); } os.close(); input.close();
后來 在開發過程中遇到這樣一個問題。
根據需要配置了單點登錄和ssl安全證書。這樣在生成圖片的時候會生成一張瀏覽不了的。
原因是。在生成圖片的時候,每次都是從后台去訪問地址的。由於過濾器的原因訪問不到。所以對以上代碼做了修改
URLConnection con = url.openConnection();//處理以http開頭的地址
替換為
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();//處理以https開頭的地址
添加過濾器
package com.hjkj.listeners; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import edu.yale.its.tp.cas.client.filter.CASFilter; public class MyCASFilter extends CASFilter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain fc) throws IOException, ServletException { String requestURI = ((HttpServletRequest)request).getRequestURI(); String contextPath = ((HttpServletRequest)request).getContextPath(); System.out.println(requestURI.toString()); if (requestURI.indexOf("reportServlet") != -1) { fc.doFilter(request, response); return ; } try { super.doFilter(request, response, fc); } catch (ServletException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
