需求: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(); } } }