`
zhaoyl
  • 浏览: 218093 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修改JFreeChart 图片的存放路径

阅读更多

/**

**QQ:252574345

**MSN:lele_love_lomboz@hotmail.com

*/

 

跟踪发现,JFreeChart会把生成的图片,默认放在应用服务器的temp目录下,有的时候我们是不能放在该目录下的,需要改变这个存放路径

发现jfreechart的ServletUtilities类里有

    protected static void createTempDir() {
        String tempDirName = System.getProperty("java.io.tmpdir");
        if (tempDirName == null) {
            throw new RuntimeException("应用服务器目录下不存在temp目录或该目录无法创建");
        }

        // create the temporary directory if it doesn't exist
        File tempDir = new File(tempDirName);
        if (!tempDir.exists()) {
            tempDir.mkdirs();
        }
    }

该方法创建了默认的图片存放路径

在该类的saveChartAsPNG() 和saveChartAsJPEG () 里被调用,产生图形,因此我们的思路就是将ServletUtilities的saveChartAsPNG() 和saveChartAsJPEG () 这2个方法改造成自己定义的方法

修改前源文件如下:

    public static String saveChartAsJPEG(JFreeChart chart, int width,
            int height, ChartRenderingInfo info, HttpSession session)
            throws IOException {

        if (chart == null) {
            throw new IllegalArgumentException("Null 'chart' argument.");  
        }
        //注意,源文件使用了默认路径
        ServletUtilities.createTempDir();
        String prefix = ServletUtilities.tempFilePrefix;
        if (session == null) {
            prefix = ServletUtilities.tempOneTimeFilePrefix;  
        }
        File tempFile = File.createTempFile(prefix, ".jpeg",
                new File(System.getProperty("java.io.tmpdir")));
        ChartUtilities.saveChartAsJPEG(tempFile, chart, width, height, info);
        if (session != null) {
            ServletUtilities.registerChartForDeletion(tempFile, session);
        }
        return tempFile.getName();

    }

 

修改后如下:

    public static String saveChartAsJPEG(JFreeChart chart, int width,
            int height, ChartRenderingInfo info, HttpSession session)
            throws IOException {

//从application中读取出临时文件目录,我事先已经在系统启动时,创建了目录
     
       File tempDr=(File)session.getServletContext().getAttribute("tempDirectory");

      
      
        if (chart == null) {
            throw new IllegalArgumentException("chart 对象为空");  
        }
       
        UIServletUtilities.createTempDir();
        String prefix = UIServletUtilities.tempFilePrefix;
        if (session == null) {
            prefix = UIServletUtilities.tempOneTimeFilePrefix;  
        }
        File tempFile = File.createTempFile(prefix, ".jpeg", tempDr);
        ChartUtilities.saveChartAsJPEG(tempFile, chart, width, height, info);
        if (session != null) {
         UIServletUtilities.registerChartForDeletion(tempFile, session);
        }
        return tempFile.getName();

    }

 

接下来就可以使用

String filename = ServletUtilities.saveChartAsJPEG(chart, 800, 600, info, session);
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;

来生成图形了

分享到:
评论
4 楼 yinger_fei 2010-10-19  
如果放在项目的webroot下images文件夹里,该怎么写呢?
3 楼 haojingyu 2008-08-18  
哦。知道了。
2 楼 zhaoyl 2008-08-17  
恩通过request.getContextPath()+"/servlet/DisplayChart?filename="+filename确实是获取不到文件的,我在这里只是说明 ,修改源文件的方法 可以修改JFreeChart 图片的存放路径,具体实现还是自己写
1 楼 haojingyu 2008-08-14  
这样做好像还是有点问题吧。最终通过request.getContextPath()+"/servlet/DisplayChart?filename="+filename方式访问时会取不到图片。因为这样访问默认仍然是到服务器下的临时文件夹中取图片的。由于图片不在那儿存放,所以取不到。

相关推荐

    JFreeChart在JSP(tomcat)中的一些问题(图片不显示)好资源0分送

    - **URLString**:尝试更改图片存放的物理路径。例如,在示例代码中,图片的物理路径被设置为 `url = "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\temp\\" + fileName;` 这种硬编码的方式虽然...

    java开源包5

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包1

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包11

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包2

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包3

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包6

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包10

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包4

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包8

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包7

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包9

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包101

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    Java资源包01

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

Global site tag (gtag.js) - Google Analytics