今天利用JFreeChart结合DWR ReverseAjax实现服务器数据“推”到客户端;在客户端用JFreeChart默认的org.jfree.chart.servlet.DisplayChart
显示图片,会出现不同的客户端不能显示图片;查看DisplayChart源码
 public void service(HttpServletRequest request, 
                        HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        String filename = request.getParameter("filename");
        if (filename == null) {
            throw new ServletException("Parameter 'filename' must be supplied");
        }
        //  Replace ".." with ""
        //  This is to prevent access to the rest of the file system
        filename = ServletUtilities.searchReplace(filename, "..", "");
        //  Check the file exists
        File file = new File(System.getProperty("java.io.tmpdir"), filename);
        if (!file.exists()) {
            throw new ServletException("File '" + file.getAbsolutePath() 
                    + "' does not exist");
        }
        //  Check that the graph being served was created by the current user
        //  or that it begins with "public"
        boolean isChartInUserList = false;
        ChartDeleter chartDeleter = (ChartDeleter) session.getAttribute(
                "JFreeChart_Deleter");
        if (chartDeleter != null) {
            isChartInUserList = chartDeleter.isChartAvailable(filename);
        }
        boolean isChartPublic = false;
        if (filename.length() >= 6) {
            if (filename.substring(0, 6).equals("public")) {
                isChartPublic = true;
            }
        }
        
        boolean isOneTimeChart = false;
        if (filename.startsWith(ServletUtilities.getTempOneTimeFilePrefix())) {
            isOneTimeChart = true;   
        }
        if (isChartInUserList || isChartPublic || isOneTimeChart) {
            //  Serve it up
            ServletUtilities.sendTempFile(file, response);
            if (isOneTimeChart) {
                file.delete();   
            }
        }
        else {
            throw new ServletException("Chart image not found");
        }
        return;
    }
其中无法显示的图片的原因跟 
isChartInUserList || isChartPublic || isOneTimeChart 有关;其中isChartInUserList是为同一session,因服务器推是同时推向多客户端,这个isChartInUserList为false是没法改变;isOneTimeChart是在创建chart的时候,如果session为null则会记录该chart为one-time use,显示一次后会被删除;因此想从isChartPublic入手了;但是JFreeChart API并没发现提供如何产生public+filename的chart;因此重写DisplayChart默认为public,这样所有的客户端都可以显示。
	
posted on 2008-09-09 17:26 
扭曲的铅笔 阅读(962) 
评论(1)  编辑  收藏  所属分类: 
J2EE