`

example .new file (path).通过类路径得到path; 如果文件已经存在,可以用servletContext

阅读更多

如果文件已经存在,可以用this.getServletContext().getResourceAsStream("/WEB-INF/...")

 

如果要创建文件一定不行,要用绝对路径:

 strPicPath = new File ( Thread.currentThread().getContextClassLoader().getResource("").getPath()).getParentFile().getParentFile().getPath();
   System.out.println("revised picture path:"+strPicPath);
   strPicPath =strPicPath+File.separator+strPicFolder+File.separator+type+".png";
   File f = new File(strPicPath);

 

 

/* -------------------------------
 * ServletDemo2ChartGenerator.java
 * -------------------------------
 * (C) Copyright 2002-2004, by Object Refinery Limited.
 *
 */
package demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.date.SerialDate;

/**
 * A servlet that returns one of three charts as a PNG image file. This servlet
 * is referenced in the HTML generated by ServletDemo2.
 * <P>
 * Three different charts can be generated, controlled by the ’type’ parameter.
 * The possible values are ’pie’, ’bar’ and ’time’ (for time series).
 * <P>
 * This class is described in the JFreeChart Developer Guide.
 */
public class ServletDemo2ChartGenerator extends HttpServlet {
	/**
	 * Default constructor.
	 */
	public ServletDemo2ChartGenerator() {
		// nothing required
	}

	/**
	 * Process a GET request.
	 * 
	 * @param request
	 *            the request.
	 * @param response
	 *            the response.
	 * 
	 * @throws ServletException
	 *             if there is a servlet related problem.
	 * @throws IOException
	 *             if there is an I/O problem.
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		OutputStream out = response.getOutputStream();
		try {
			String type = request.getParameter("chart");
			JFreeChart chart = null;
			if (type.equals("pie")) {
				chart = createPieChart();
			} else if (type.equals("bar")) {
				chart = createBarChart();
			} else if (type.equals("time")) {
				chart = createTimeSeriesChart();
			}
			if (chart != null) {
				
				
				loadChart2(request,response,out,chart,type);

				
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println(e.toString());
		} finally {
			out.close();
		}
	}

	
	private void loadChart1(HttpServletRequest request, HttpServletResponse response,OutputStream out,JFreeChart chart,String type) throws IOException{

		response.setContentType("image/png");
		
		String strPicFolder = "picture";
		//System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());
		
		/*
		 * D:\Server\tomcat-6.0.20-cosmos\webapps\jfreechartTest\WEB-INF\picture\bar.png
		 *  completed path !!!,  new file() can work
		 */
	
		
		String strPicPath = new File( Thread.currentThread().getContextClassLoader().getResource("").getPath()).getParent()+File.separator+strPicFolder+File.separator+type+".png";
		System.out.println("picture path:"+strPicPath);
		
		
		/*String strPicPath = this.getServletContext().getResource("/WEB-INF").toString()+strPicFolder+File.separator+type+".png";
		System.out.println("picture path:"+strPicPath);*/
		
		//InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(strPicPath);
		File file = new File(strPicPath);
		
		if (!file.exists()){
			File f = new File(strPicPath);
			/*
			 * Write Picture to Request;
			 */
			ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
			/*
			 * Save Picture to local
			 */
			ChartUtilities.saveChartAsPNG(f, chart, 400, 300);
			System.out.println("Create new picture...");
		}else{
			/*
			 * Method1:read picture to bytes;
			 */
			InputStream is = new FileInputStream(strPicPath);
			byte[] b = new byte[1024];
			int len;
			while ( ( len=is.read(b)) != -1){
				out.write(b,0,len);
			}
			out.flush();
			out.close();
			is.close();
			
			/*
			 * Method2:pass the picture path to front 
			 * It seems not work :(
			 */
		/*	String path = request.getContextPath();
			String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
			
			byte[] b = (basePath+strPicFolder+File.separator+type+".png").getBytes();
			System.out.println(basePath+strPicFolder+"/"+type+".png");
			out.write(b, 0, b.length);
			
			out.flush();
			out.close();*/
			System.out.println("get cached picture...");
		}
		
		
		
		
	
	}
	
	
	private void loadChart2(HttpServletRequest request, HttpServletResponse response,OutputStream out,JFreeChart chart,String type) throws IOException{

		response.setContentType("image/png");
		
		String strPicFolder = "picture";
		//System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());
		
		
		/*
		 *\picture\bar.png ,
		 *it is relative path . we can not use it to create file !! (new file)
		 *must start with "/"
		 *In Tomcat it returns  jndi:/localhost/jfreechartTest/!!!
		 */
		System.out.println(this.getServletContext().getResource("/"));
		String strPicPath = File.separator+strPicFolder+File.separator+type+".png";
		System.out.println("picture path:"+strPicPath);
		InputStream is = this.getServletContext().getResourceAsStream(strPicPath);
		
		
		
		if (is == null ){
			/*
			 * D:\Server\tomcat-6.0.20-cosmos\webapps\jfreechartTest
			 */
			strPicPath = new File ( Thread.currentThread().getContextClassLoader().getResource("").getPath()).getParentFile().getParentFile().getPath();
			System.out.println("revised picture path:"+strPicPath);
			strPicPath =strPicPath+File.separator+strPicFolder+File.separator+type+".png";
			File f = new File(strPicPath);
			/*
			 * Write Picture to Request;
			 */
			ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
			/*
			 * Save Picture to local
			 */
			ChartUtilities.saveChartAsPNG(f, chart, 400, 300);
			System.out.println("Create new picture...");
		}else{
			/*
			 * Method1:read picture to bytes;
			 */
			
			byte[] b = new byte[1024];
			int len;
			while ( ( len=is.read(b)) != -1){
				out.write(b,0,len);
			}
			out.flush();
			out.close();
			is.close();
			
			/*
			 * Method2:pass the picture path to front 
			 * It seems not work :(
			 */
		/*	String path = request.getContextPath();
			String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
			
			byte[] b = (basePath+strPicFolder+File.separator+type+".png").getBytes();
			System.out.println(basePath+strPicFolder+"/"+type+".png");
			out.write(b, 0, b.length);
			
			out.flush();
			out.close();*/
			System.out.println("get cached picture...");
		}
	}
	
	/**
	 * Creates a sample pie chart.
	 * 
	 * @return a pie chart.
	 */
	private JFreeChart createPieChart() {
		// create a dataset...
		DefaultPieDataset data = new DefaultPieDataset();
		data.setValue("One", new Double(43.2));
		data.setValue("Two", new Double(10.0));
		data.setValue("Three", new Double(27.5));
		data.setValue("Four", new Double(17.5));
		data.setValue("Five", new Double(11.0));
		data.setValue("Six", new Double(19.4));
		JFreeChart chart = ChartFactory.createPieChart("Pie Chart", data, true,
				true, false);
		return chart;
	}

	/**
	 * Creates a sample bar chart.
	 * 
	 * @return a bar chart.
	 */
	private JFreeChart createBarChart() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(10.0, "S1", "C1");
		dataset.addValue(4.0, "S1", "C2");
		dataset.addValue(15.0, "S1", "C3");
		dataset.addValue(14.0, "S1", "C4");
		dataset.addValue(-5.0, "S2", "C1");
		dataset.addValue(-7.0, "S2", "C2");
		dataset.addValue(14.0, "S2", "C3");
		dataset.addValue(-3.0, "S2", "C4");
		dataset.addValue(6.0, "S3", "C1");
		dataset.addValue(17.0, "S3", "C2");
		dataset.addValue(-12.0, "S3", "C3");
		dataset.addValue(7.0, "S3", "C4");
		dataset.addValue(7.0, "S4", "C1");
		dataset.addValue(15.0, "S4", "C2");
		dataset.addValue(11.0, "S4", "C3");
		dataset.addValue(0.0, "S4", "C4");
		dataset.addValue(-8.0, "S5", "C1");
		dataset.addValue(-6.0, "S5", "C2");
		dataset.addValue(10.0, "S5", "C3");
		dataset.addValue(-9.0, "S5", "C4");
		dataset.addValue(9.0, "S6", "C1");
		dataset.addValue(8.0, "S6", "C2");
		dataset.addValue(null, "S6", "C3");
		dataset.addValue(6.0, "S6", "C4");
		dataset.addValue(-10.0, "S7", "C1");
		dataset.addValue(9.0, "S7", "C2");
		dataset.addValue(7.0, "S7", "C3");
		dataset.addValue(7.0, "S7", "C4");
		dataset.addValue(11.0, "S8", "C1");
		dataset.addValue(13.0, "S8", "C2");
		dataset.addValue(9.0, "S8", "C3");
		dataset.addValue(9.0, "S8", "C4");
		dataset.addValue(-3.0, "S9", "C1");
		dataset.addValue(7.0, "S9", "C2");
		dataset.addValue(11.0, "S9", "C3");
		dataset.addValue(-10.0, "S9", "C4");
		JFreeChart chart = ChartFactory.createBarChart3D("Bar Chart",
				"Category", "Value", dataset, PlotOrientation.VERTICAL, true,
				true, false);
		return chart;
	}

	/**
	 * Creates a sample time series chart.
	 * 
	 * @return a time series chart.
	 */
	private JFreeChart createTimeSeriesChart() {
		// here we just populate a series with random data...
		TimeSeries series = new TimeSeries("Random Data");
		Day current = new Day(1, SerialDate.JANUARY, 2001);
		for (int i = 0; i < 100; i++) {
			series.add(current, Math.random() * 100);
			current = (Day) current.next();
		}
		XYDataset data = new TimeSeriesCollection(series);
		JFreeChart chart = ChartFactory.createTimeSeriesChart(
				"Time Series Chart", "Date", "Rate", data, true, true, false);
		return chart;
	}
}

 

分享到:
评论

相关推荐

    Java路径问题

    - 使用`java.class.path`系统属性也可以动态改变类路径,但这种方式并不推荐,因为它可能影响其他库的加载。 5. jar文件的路径 - 在jar文件中,类的路径由`package/ClassName.class`格式表示,例如`...

    spring-framework-reference4.1.4

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    路径问题1

    - **Class**和**ClassLoader**:Java API提供了从类路径中获取资源的方法,路径可以是相对于当前类的相对路径,只能使用相对路径。 10. **路径**: - `&lt;url-pattern&gt;`是Servlet配置中的元素,定义了映射到Servlet...

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    log4j使用详解 实例

    通过合理的配置,可以实现日志分级、输出格式化、文件滚动等功能,极大地提高了日志管理的效率,为问题排查和系统监控提供了便利。对于开发者来说,熟练掌握log4j的使用是提高工作效率的重要手段。

    Java servlet 和 swf上传超大文件源码

    File uploadedFile = new File("/path/to/save", fileName); item.write(uploadedFile); } } } ``` **SWFUpload介绍** SWFUpload是一个基于Flash的JavaScript库,它提供了前端文件选择和后台文件上传的功能。...

    使用log4j写日志文件

    这里通过`getInitParameter`获取Web应用中的初始化参数,通常是log4j配置文件的路径,然后调用`PropertyConfigurator.configure()`方法加载配置。 #### 在IDE中使用Log4j 对于在IDE中开发的应用,可以直接在代码中...

    实现Struts上传多个文件

    ### 实现Struts上传多个文件 在开发基于Struts框架的应用程序时,有时我们需要实现文件上传功能,尤其是在需要用户上传多张图片的情况...通过上述步骤,你可以轻松地在自己的项目中实现多文件上传功能,提高用户体验。

    spring资源访问

    - `classpath:`:使用`ClassPathResource`实例访问类路径里的资源。 - `file:`:使用`UrlResource`实例访问本地文件系统的资源。 - `http:`:使用`UrlResource`实例访问基于HTTP协议的网络资源。 - 无前缀:由具体的...

    servlet2.4doc

    Notification that a new attribute was added to the servlet context. attributeAdded(ServletRequestAttributeEvent) - Method in interface javax.servlet.ServletRequestAttributeListener Notification that...

    编写Openfire插件Servlet小服务程序

    这里,`/myServlet`是访问Servlet的URL路径,`/path/to/MyServlet.class`是Servlet类的全限定类名(包括包名)。 3. **创建Servlet类**:创建一个Servlet类,继承自`javax.servlet.http.HttpServlet`,重写`doGet`...

    strut2.0组图上传

    在Struts2中,我们可以通过配置Action类和Struts.xml文件来利用这个库。 首先,我们需要在Action类中定义一个字段来接收上传的文件。这个字段通常是一个`File`类型的数组,因为我们要处理多个文件。例如: ```java...

    【Java就业班2】Javaweb测试题.doc

    根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 1. DOM4J 的使用流程和常用方法 **使用流程**: 1. **创建Document对象**:通过SAXReader类来解析XML文件,并将XML文档转换成Document对象。 2. **...

    JSP-Servlet-Ajax考题共享

    - URL由协议(如http、https)、域名(如www.example.com)和路径(如/path/to/file)三部分组成。 4. **Tomcat配置**: - Tomcat的配置文件主要在conf目录下,web应用程序的目录名为webapps。 - 启动Tomcat通常...

Global site tag (gtag.js) - Google Analytics