<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>kevin_gzhz</title>
    <description>为减少Bug而奋斗！！</description>
    <link>http://kevin-gzhz.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>请教如何在freemarker中写js来进行输入框验证</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/213491" style="color:red;">http://kevin-gzhz.javaeye.com/blog/213491</a>&nbsp;
          发表时间: 2008年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="html">&lt;script&gt; 
  function show(){
    var aac = document.getElementsById("aaflag");
    alert(aac.value);
  	alert("Readonly\'s pet name is \"Cross Bone\""); 
  }

&lt;/script&gt; 

&lt;table&gt;
  &lt;tr&gt;
  	&lt;td style="font-size:14px"&gt;&lt;@s.text name="commin.name"/&gt;&lt;/td&gt;
	&lt;td&gt;&lt;input type="text" name="commname" id="aaflag" value="keke" cssStyle="border:1px solid #336699;color:#00f;background-color:#efefef"/&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  	&lt;@s.submit value="登录" onclick="show();" cssStyle="border:1px solid #336699;color:#fff;background-color:#336699"/&gt;
  &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>
<p>&nbsp;这样子获取输入框的值为什么在freemarker中会提示没有document.getElementById不存在该属性或方法啦？请知情者帮忙解答一下，正确的写法是怎么样的？</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/213491#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jul 2008 15:35:10 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/213491</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/213491</guid>
      </item>
      <item>
        <title>如何不用struts2的ajax框架实现ajax功能的问题</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/213425" style="color:red;">http://kevin-gzhz.javaeye.com/blog/213425</a>&nbsp;
          发表时间: 2008年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>如果不用struts2自带的ajax的验证框架，自己实现ajax JS与Action进行交互，在struts1.x里可以这样写：</p>
<pre name="code" class="js">function sendURL(userAccount){
		createXMLHttpRequest();
		var url = "${ctx}/userAction.do?method=check&amp;userAccount="+userAccount;
		xmlHttp.onreadystatechange = callBack;

		url=encodeURI(url);
		//xmlHttp.setRequestHeader("Content-Type","text/html;charset=UTF-8");
		xmlHttp.open("POST",url,true);
		xmlHttp.send(null);
	}


	function callBack(){
		if(xmlHttp.readyState==4){
			if(xmlHttp.status == 200){
				checkFlag = xmlHttp.responseText;
				var message = "";
				if(checkFlag != "1"){
					message = "${key['check.failed']}";
					alert(message);

				}
			}
		}
	}</pre>
<p>&nbsp;并且不要在struts.xml里进行请求处理后的转发。</p>
<p>但在struts2.0里怎么实现这个ajax调用的功能，有几点不明白：</p>
<p>1&gt;JS里怎么写，难道是var url = "${ctx}/check.action?userAccount="+userAccount;</p>
<p>2&gt;应该需要在struts.xml里配置：</p>
<pre name="code" class="xml">&lt;package name="Book_CRUD" extends="struts-default" namespace="/Book"&gt;
                &lt;action name="check" class="com.cn.kevin.spring.action.BookAction" method="checkIsbn"&gt;
            
        &lt;/action&gt;
    &lt;/package&gt;</pre>
<p>如果不这样声明的话，上面的check.action就不知从何而来了。但是这样子是否请求的返回被框架拦截，而不能到达页面啦？ 并且这种写法我测试过，好像不行，根本就没有进入checkIsbn这个方法里。</p>
<p>请各位熟悉Struts2的朋友解答一下，小弟敬候，谢谢！！</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/213425#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jul 2008 12:38:12 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/213425</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/213425</guid>
      </item>
      <item>
        <title>请教Ruby中构造函数的问题</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/210662" style="color:red;">http://kevin-gzhz.javaeye.com/blog/210662</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我刚学Ruby没有几天，有个问题想请教一下高手：有学习资料说Ruby里没有方法的重载这一说法。不过我现在遇到这个需要像在java里写多个构造器的情况下该怎么实现。</p>
<pre name="code" class="ruby">class Abc
  #1
   def initialize()  
   end 
  #2
  def initialize(name, &amp;block)  
    @name = name 
    @block = block 
  end  
  
   def getText
        "this is test"
   end

   def getTax(amount)  
    "#@name on #{amount} = #{ @block.call(amount) }"  
  end  
end

#3
method1 = Abc.new()
method1.getText

#4
method2 = Abc.new("Sales tax") { |amt| amt * 0.075 } 
puts method2.getTax(100)  </pre>
<p>&nbsp;&nbsp; 为什么代码块#1和#2同时存在时，#3可以执行，#4就不可以，只存在#2和#4时，#4就可以执行，要在同一个类中实现像java那样的通过不同的构造器构造不同的实例，在Ruby里应该怎么实现，请各位大侠给的答案！！</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/210662#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 15:49:17 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/210662</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/210662</guid>
      </item>
      <item>
        <title>firefox的style显示问题</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181895" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181895</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>IE：</p>
<p>显示：style.display = "block";</p>
<p>不显示：style.display = "none";</p>
<p>firefox的style显示：</p>
<p>显示：style.display = "";</p>
<p>不显示：style.display = "none";</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181895#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 18:12:43 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181895</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181895</guid>
      </item>
      <item>
        <title>页面input输入框中输入中文时校验长度的js</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181745" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181745</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span lang="AR-SA" style="font-family: 宋体;"><span lang="AR-SA" style="font-family: 宋体;"><span><span style="font-size: x-small;">在页面校验时，常常需要校验input输入框中输入的字符串的长度。当输入的字符串中存在中文时，而中文占有两个字节,故js的length()方法取得的长度值不准确。解决函数如下：</span></span></span></span></p>
<p><span lang="AR-SA" style="font-family: 宋体;"><span lang="AR-SA" style="font-family: 宋体;"><span>
<p>function GetLen(str) { <br />&nbsp;var len=0; <br />&nbsp;for(var i=0;i&lt;str.length;i++) { <br />&nbsp; char = str.charCodeAt(i); </p>
<p>&nbsp;&nbsp; if(!(char&gt;255))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp; len = len + 1; <br />&nbsp; }&nbsp;else&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp; len = len + 2; <br />&nbsp; } <br />&nbsp;} <br />&nbsp;return len; <br />} </p>
</span></span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181745#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 13:48:06 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181745</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181745</guid>
      </item>
      <item>
        <title>Eclipse快捷键收集</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181733" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181733</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>特收集一下,供忘记时查找:</p>
<p>Alt+/:代码提示<br />Ctrl+/:注释/取消注释<br />Ctrl+D:删除光标所在行<br />Ctrl+K:将光标停留在变量上，按Ctrl+K键可以查找到下一个同样的变量<br />Shift+Ctrl+K:和Ctrl+K查找的方向相反<br />Shift+Ctrl+F:代码格式化。如果选择了代码，仅对所选代码格式化<br />Shift+Ctrl+O:快速地导入import<br />Shift+Ctrl+X:将所选字符转为大写<br />Shift+Ctrl+Y:将所选字符转为小写<br />Ctrl+M:快速对当前视图最大化<br />Ctrl+O:在代码中打开类似大纲视图的小窗口<br />Ctrl+单击:可以跟踪方法和类的源码<br />Alt+左右方向键:跳到前一次/后一次的编辑位置。<br />Ctrl+鼠标停留:可以显示类和方法的源码<br />双击左括号（小括号、中括号、大括号），将选择括号内的所有内容。<br />Ctrl+1:光标停在某变量上，按Ctrl+1键，可以提供快速重构方案。选中若干行，按Ctrl+1键可将此段代码放入for、while、if、do或try等代码块中。<br />F3:打开声明该引用的文件<br />F4:打开类型层次结构<br />F5:单步跳入<br />F6:单步跳过<br />F7:单步跳出<br />F8:继续，如果后面没有断点，程序将运行完<br />Ctrl+H:打开搜索窗口<br />Ctrl+T:进入接口及其实现类中<br />Ctrl+Shift+S:保存全部<br />Alt+Left:回退一步<br />Alt+Right:前跳一步<br />Ctrl+Shift+T:打开类型<br />Ctrl+Shift+R:打开资源<br />Ctrl+Q:回到最后一次编辑的地方<br />Ctrl+Shift+G: 在workspace中搜索引用<br />Ctrl+Alt+Down: 复制高亮显示的一行或多行<br />Alt+Up(Down):将一行或者多行向上或者向下移动</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181733#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 13:15:36 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181733</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181733</guid>
      </item>
      <item>
        <title>文件压缩工具</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181728" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181728</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package test;
<br />
<br />import java.io.BufferedInputStream;
<br />import java.io.BufferedOutputStream;
<br />import java.io.File;
<br />import java.io.FileInputStream;
<br />import java.io.FileNotFoundException;
<br />import java.io.FileOutputStream;
<br />import java.io.IOException;
<br />import java.io.InputStream;
<br />import java.io.OutputStream;
<br />import java.util.Enumeration;
<br />import java.util.zip.ZipEntry;
<br />import java.util.zip.ZipFile;
<br />import java.util.zip.ZipOutputStream;
<br />
<br />import org.apache.log4j.Logger;
<br />
<br />
<br />/**
<br /> * 功能描述:ZIP压缩与解压工具类
<br />  */
<br />public class ZipUtil {
<br />	private static final Logger log = Logger.getLogger(ZipUtil.class);
<br />
<br />	/**
<br />	 * 方法用途和描述: 解压ZIP文件
<br />	 * 
<br />	 * @param zipFilePath
<br />	 *            要解压的ZIP文件路径
<br />	 * @param unZipDir
<br />	 *            要解压到目标文件夹路径
<br />	  */
<br />	@SuppressWarnings("unchecked")
<br />	public static boolean unZip(String zipFilePath, String unZipDir) {
<br />
<br />		ZipFile zfile = null;
<br />		OutputStream os = null;
<br />		InputStream is = null;
<br />
<br />		try {
<br />			zfile = new ZipFile(zipFilePath);
<br />			log.debug(zfile.getName());
<br />			Enumeration zList = zfile.entries();
<br />			ZipEntry ze = null;
<br />			byte[] buf = new byte[1024];
<br />			String path = null;
<br />			while (zList.hasMoreElements()) {
<br />				// 从ZipFile中得到一个ZipEntry
<br />				ze = (ZipEntry) zList.nextElement();
<br />				if (ze.isDirectory()) {
<br />					log.debug("Dir: " + ze.getName() + " skipped..");
<br />					continue;
<br />				}
<br />				log.debug("Extracting: " + ze.getName() + "\t" + ze.getSize()
<br />						+ "\t" + ze.getCompressedSize());
<br />				// 以ZipEntry为参数得到一个InputStream，并写到OutputStream中
<br />				path = unZipDir.concat("/").concat(ze.getName());
<br />				FileUtil.checkFileDirectoryExists(path);
<br />				os = new BufferedOutputStream(new FileOutputStream(path));
<br />				is = new BufferedInputStream(zfile.getInputStream(ze));
<br />				int readLen = 0;
<br />				while ((readLen = is.read(buf, 0, 1024)) != -1) {
<br />					os.write(buf, 0, readLen);
<br />				}
<br />				os.flush();
<br />				log.debug("Extracted: " + ze.getName());
<br />				ze = null;
<br />			}
<br />			zList = null;
<br />		} catch (FileNotFoundException e) {
<br />			e.printStackTrace();
<br />			return false;
<br />		} catch (IOException e) {
<br />			e.printStackTrace();
<br />			return false;
<br />		} finally {
<br />			if (is != null) {
<br />				try {
<br />					is.close();
<br />				} catch (IOException e) {
<br />					e.printStackTrace();
<br />				}
<br />			}
<br />			if (os != null) {
<br />				try {
<br />					os.close();
<br />				} catch (IOException e) {
<br />					e.printStackTrace();
<br />				}
<br />			}
<br />			if (zfile != null) {
<br />				try {
<br />					zfile.close();
<br />				} catch (IOException e) {
<br />					e.printStackTrace();
<br />				}
<br />			}
<br />		}
<br />		return true;
<br />	}
<br />	
<br />	/**
<br />	 * 
<br />	* 方法用途和描述: 压缩文件
<br />	* @param sourceFilePath 需要压缩的文件路径
<br />	* @param targetFilePath 压缩后放置的文件路径，带.zip
<br />	* @param bufferSize 缓冲长度
<br />	 */
<br />	public static void zip(String sourceFilePath,String targetFilePath,int bufferSize){
<br />		FileOutputStream dest = null;
<br />		ZipOutputStream out = null;
<br />		try {
<br />			BufferedInputStream origin = null;
<br />			dest = new FileOutputStream(targetFilePath);
<br />			out = new ZipOutputStream(new BufferedOutputStream(
<br />					dest));
<br />			byte data[] = new byte[bufferSize];
<br />			File f = new File(sourceFilePath);
<br />			File files[] = f.listFiles();
<br />
<br />			for (int i = 0; i &lt; files.length; i++) {
<br />				FileInputStream fi = new FileInputStream(files[i]);
<br />				origin = new BufferedInputStream(fi, bufferSize);
<br />				ZipEntry entry = new ZipEntry(files[i].getName());
<br />				out.putNextEntry(entry);
<br />				int count;
<br />				while ((count = origin.read(data, 0, bufferSize)) != -1) {
<br />					out.write(data, 0, count);
<br />				}
<br />				origin.close();
<br />			}
<br />		} catch (Exception e) {
<br />			e.printStackTrace();
<br />		}finally{
<br />			if (out != null) {
<br />				try {
<br />					out.close();
<br />				} catch (IOException e) {
<br />					e.printStackTrace();
<br />				}
<br />			}
<br />			if (dest != null) {
<br />				try {
<br />					dest.close();
<br />				} catch (IOException e) {
<br />					e.printStackTrace();
<br />				}
<br />			}
<br />		}
<br />	}
<br />
<br />	public static void main(String argv[]) {
<br />		zip("E:\\htmltext\\text","E:\\myfiles.zip",2048);
<br />	}
<br />
<br />}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181728#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 12:56:50 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181728</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181728</guid>
      </item>
      <item>
        <title>在Java中操作Excel之API方法解读</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181692" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181692</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Java Excel API提供了许多访问Excel数据表的方法，在这里只简要地介绍几个常用的方法.</p>
<p>Workbook类提供的方法<br />1. int getNumberOfSheets()<br />获得工作薄（Workbook）中工作表（Sheet）的个数，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />int sheets = rwb.getNumberOfSheets();<br />2. Sheet[] getSheets()<br />返回工作薄（Workbook）中工作表（Sheet）对象数组，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />Sheet[] sheets = rwb.getSheets();<br />3. String getVersion()<br />返回正在使用的API的版本号，好像是没什么太大的作用。<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />String apiVersion = rwb.getVersion();<br />? Sheet接口提供的方法<br />1. String getName()<br />获取Sheet的名称，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />String sheetName = rs.getName();<br />2. int getColumns()<br />获取Sheet表中所包含的总列数，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />int rsColumns = rs.getColumns();<br />3. Cell[] getColumn(int column)<br />获取某一列的所有单元格，返回的是单元格对象数组，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />Cell[] cell = rs.getColumn(0);<br />4. int getRows()<br />获取Sheet表中所包含的总行数，示例：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />int rsRows = rs.getRows();<br />5. Cell[] getRow(int row)<br />获取某一行的所有单元格，返回的是单元格对象数组，示例子：<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />Cell[] cell = rs.getRow(0);<br />6. Cell getCell(int column, int row)<br />获取指定单元格的对象引用，需要注意的是它的两个参数，第一个是列数，第二个是行数，这与通常的行、列组 合有些不同。<br />jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br />jxl.Sheet rs = rwb.getSheet(0);<br />Cell cell = rs.getCell(0, 0);</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181692#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 11:13:06 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181692</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181692</guid>
      </item>
      <item>
        <title>在Java中操作Excel之写文件</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181690" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181690</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;与读取Excel工作表相似，首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象，这里只能通过API 提供的工厂方法来创建Workbook，而不能使用WritableWorkbook的构造函数，因为类WritableWorkbook的构造函数为protected类型。API提供了两种方式来处理可写入的输出流，一种是直接生成本地文件，如果文件名不带全路径的话，缺省的文件会定位在当前目录，如果文件名带有全路径的话，则生成的Excel文件则会定位在相应的目录；另外一种是将 Excel对象直接写入到输出流，例如：用户通过浏览器来访问Web服务器，如果HTTP头设置正确的话，浏览器自动调用客户端的Excel应用程序，来显示动态生成的Excel电子表格。示例代码片段如下：</p>
<pre name="code" class="java">public class WriteExcel {
<br />	public void writeExcel(String targetfile) {
<br />		...
<br />		try {
<br />			// 构建Workbook对象, 只读Workbook对象
<br />			// 方法一：创建可写入的Excel工作薄
<br />			WritableWorkbook wwb = Workbook.createWorkbook(new File(
<br />					targetfile));
<br />			// 方法二：将WritableWorkbook直接写入到输出流
<br />			/*
<br />			 * OutputStream os = new FileOutputStream(targetfile);
<br />			 * WritableWorkbook wwb = Workbook.createWorkbook(os);
<br />			 */
<br />			//创建Excel工作表
<br />			jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
<br />			//添加Label对象
<br />			jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
<br />			ws.addCell(labelC);
<br />			//添加带有字型Formatting的对象
<br />			jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18,
<br />			WritableFont.BOLD, true);
<br />			jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
<br />			jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
<br />			ws.addCell(labelCF);
<br />			//添加带有字体颜色Formatting的对象
<br />			jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10,
<br />			WritableFont.NO_BOLD, false,
<br />			UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
<br />			jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
<br />			jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
<br />			ws.addCell(labelCF);
<br />			//2.添加Number对象
<br />			jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
<br />			ws.addCell(labelN);
<br />			//添加带有formatting的Number对象
<br />			jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
<br />			jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
<br />			jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
<br />			ws.addCell(labelNF);
<br />			//3.添加Boolean对象
<br />			jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
<br />			ws.addCell(labelB);
<br />			//4.添加DateTime对象
<br />			jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
<br />			ws.addCell(labelDT);
<br />			//添加带有formatting的DateFormat对象
<br />			jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
<br />			jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
<br />			jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
<br />			ws.addCell(labelDTF);
<br />			//关闭打开的Excel工作薄对象，以释放占用的内存，参见下面的代码片段：
<br />			//写入Exel工作表
<br />			wwb.write();
<br />			//关闭Excel工作薄对象
<br />			wwb.close();
<br />			
<br />		} catch (Exception e) {
<br />			e.printStackTrace();
<br />		}
<br />		...
<br />	}
<br />}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 11:09:59 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181690</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181690</guid>
      </item>
      <item>
        <title>在Java中操作Excel之读文件</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/181684" style="color:red;">http://kevin-gzhz.javaeye.com/blog/181684</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls)，也可以从输入流中读取Excel数据表。读取Excel数据 表的第一步是创建Workbook(术语：工作薄)，下面的代码片段举例说明了应该如何操作：</p>
<pre name="code" class="java">import java.io.*; 
<br />import jxl.*;
<br />class ReadExcel{ 
<br />    public void readExcel(String sourcefile){
<br />	try{ 
<br />		//构建Workbook对象, 只读Workbook对象 
<br />		//直接从本地文件创建Workbook 
<br />		//从输入流创建
<br />		Workbook InputStream is = new FileInputStream(sourcefile); 
<br />		Workbook rwb = Workbook.getWorkbook(is); 
<br />	}catch (Exception e){ 
<br />		e.printStackTrace(); 
<br />	} 
<br />	//获取第一张Sheet表 
<br />	Sheet rs = rwb.getSheet(0); 
<br />	//一旦得到了Sheet，就可以访问Excel Cell(术语：单元格) 
<br />	//获取第一行，第一列的值 
<br />	Cell c00 = rs.getCell(0, 0); 
<br />	String strc00 = c00.getContents(); 
<br />	//获取第一行，第二列的值 
<br />	Cell c10 = rs.getCell(1, 0); 
<br />	String strc10 = c10.getContents(); 
<br />	//获取第二行，第二列的值 
<br />	Cell c11 = rs.getCell(1, 1); 
<br />	String strc11 = c11.getContents(); 
<br />	System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType()); 
<br />	System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType()); 
<br />	System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType()); 
<br />	//操作完成时，关闭对象，释放占用的内存空间 
<br />	rwb.close(); 
<br />	
<br />    }
<br />}</pre>
<p>&nbsp;&nbsp;&nbsp; 如果仅仅是取得Cell的值，可以通过getContents()方法，它将任何类型的Cell值都作为一个字符串返回。如果有需要知道Cell内容的确切类型，API也提供了一系列的方法。代码片段如下:</p>
<p>String strc00 = null;<br />&nbsp;&nbsp;double strc10 = 0.00;<br />&nbsp;&nbsp;Date strc11 = null;<br />&nbsp;&nbsp;Cell c00 = rs.getCell(0, 0);<br />&nbsp;&nbsp;Cell c10 = rs.getCell(1, 0);<br />&nbsp;&nbsp;Cell c11 = rs.getCell(1, 1);<br />&nbsp;&nbsp;if (c00.getType() == CellType.LABEL) {<br />&nbsp;&nbsp;&nbsp;LabelCell labelc00 = (LabelCell) c00;<br />&nbsp;&nbsp;&nbsp;strc00 = labelc00.getString();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;if (c10.getType() == CellType.NUMBER) {<br />&nbsp;&nbsp;&nbsp;NmberCell numc10 = (NumberCell) c10;<br />&nbsp;&nbsp;&nbsp;strc10 = numc10.getValue();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;if (c11.getType() == CellType.DATE) {<br />&nbsp;&nbsp;&nbsp;DateCell datec11 = (DateCell) c11;<br />&nbsp;&nbsp;&nbsp;strc11 = datec11.getDate();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : "<br />&nbsp;&nbsp;&nbsp;&nbsp;+ c00.getType());<br />&nbsp;&nbsp;System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : "<br />&nbsp;&nbsp;&nbsp;&nbsp;+ c10.getType());<br />&nbsp;&nbsp;System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : "<br />&nbsp;&nbsp;&nbsp;&nbsp;+ c11.getType());</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/181684#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 10:48:12 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/181684</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/181684</guid>
      </item>
      <item>
        <title>Jfreechart与Tapestry4.0 结合实现(下)</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/68625" style="color:red;">http://kevin-gzhz.javaeye.com/blog/68625</a>&nbsp;
          发表时间: 2007年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          5)Java类文件: <br />
&nbsp;&nbsp;&nbsp; 5-1)StatChartServic.java类:<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.ce.jfreechart.service;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.awt.Color;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.text.SimpleDateFormat;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.Calendar;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.Date;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.HashMap;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.Map;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.IRequestCycle;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.engine.IEngineService;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.engine.ILink;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.services.Infrastructure;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.services.LinkFactory;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.ChartFactory;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.ChartUtilities;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.JFreeChart;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.axis.CategoryAxis;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.axis.DateAxis;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.labels.StandardCategoryItemLabelGenerator;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.plot.CategoryPlot;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.plot.PiePlot;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.plot.PlotOrientation;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.plot.XYPlot;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.renderer.category.BarRenderer3D;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.renderer.xy.XYItemRenderer;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.chart.urls.StandardPieURLGenerator;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.category.DefaultCategoryDataset;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.general.DefaultPieDataset;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.Day;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.Hour;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.Minute;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.Month;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.TimeSeries;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.jfree.data.time.TimeSeriesCollection;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.jfree.ui.RectangleInsets;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.ce.jfreechart.vo.PieChartVO;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;功能描述：生成统计结果图的服务类（现主要针对胼图）</span>&nbsp;<span class="comment">&nbsp;</span></span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;StatChartService&nbsp;</span><span class="keyword">implements</span><span>&nbsp;IEngineService&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;HttpServletRequest&nbsp;request;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;HttpServletResponse&nbsp;response;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;LinkFactory&nbsp;linkFactory;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Infrastructure&nbsp;infrastructure;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;SERVICE_NAME&nbsp;=&nbsp;</span><span class="string">&quot;chart&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;String&nbsp;CHART_PARAS_OBJ_NAME&nbsp;=&nbsp;</span><span class="string">&quot;pcVo&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setResponse(HttpServletResponse&nbsp;response)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.response&nbsp;=&nbsp;response;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setRequest(HttpServletRequest&nbsp;request)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.request&nbsp;=&nbsp;request;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setLinkFactory(LinkFactory&nbsp;linkFactory)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.linkFactory&nbsp;=&nbsp;linkFactory;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;ILink&nbsp;getLink(</span><span class="keyword">boolean</span><span>&nbsp;post,&nbsp;Object&nbsp;parameter)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;parameters&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;HashMap();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;linkFactory.constructLink(</span><span class="keyword">this</span><span>,&nbsp;post,&nbsp;parameters,&nbsp;</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setInfrastructure(Infrastructure&nbsp;infrastructure)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.infrastructure&nbsp;=&nbsp;infrastructure;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;SERVICE_NAME;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;service(IRequestCycle&nbsp;cycle)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieChartVO&nbsp;pcVo&nbsp;=&nbsp;(PieChartVO)&nbsp;request.getSession()&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getAttribute(CHART_PARAS_OBJ_NAME);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(pcVo&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chart&nbsp;chart&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Chart();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.getPieChart3D(request,&nbsp;response,&nbsp;pcVo);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getSession().removeAttribute(CHART_PARAS_OBJ_NAME);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;功能描述：输出JFreeChart图的类</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;Chart&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;方法描述：生成3D胼状图的方法</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：HttpServletRequest</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;response</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：HttpServletResponse</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;PieChartVO&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：参数传递vo</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;IOException</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;getPieChart3D(HttpServletRequest&nbsp;request,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,&nbsp;PieChartVO&nbsp;pcVo)&nbsp;<span class="keyword">throws</span><span>&nbsp;IOException&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setDateHeader(<span class="string">&quot;Expires&quot;</span><span>,&nbsp;</span><span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(<span class="string">&quot;image/jpeg&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;title&nbsp;=&nbsp;pcVo.getTitle();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;name&nbsp;=&nbsp;pcVo.getName();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">double</span><span>[]&nbsp;value&nbsp;=&nbsp;pcVo.getValue();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;width&nbsp;=&nbsp;pcVo.getWidth();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;hight&nbsp;=&nbsp;pcVo.getHight();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(title&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;</span><span class="string">&quot;&quot;</span><span>.equals(title))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;=&nbsp;<span class="string">&quot;&nbsp;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(name&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;name.length&nbsp;==&nbsp;</span><span class="number">0</span><span>&nbsp;||&nbsp;value&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;value.length&nbsp;==&nbsp;<span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(width&nbsp;&lt;=&nbsp;</span><span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;=&nbsp;<span class="number">400</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(hight&nbsp;&lt;=&nbsp;</span><span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hight&nbsp;=&nbsp;<span class="number">400</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultPieDataset&nbsp;defaultpiedataset&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;DefaultPieDataset();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;j&nbsp;=&nbsp;name.length&nbsp;&lt;=&nbsp;value.length&nbsp;?&nbsp;name.length&nbsp;:&nbsp;value.length;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;j;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaultpiedataset.setValue(name[i],&nbsp;value[i]);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFreeChart&nbsp;chart&nbsp;=&nbsp;ChartFactory.createPieChart3D(title,&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaultpiedataset,&nbsp;<span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.setBackgroundPaint(Color.WHITE);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PiePlot&nbsp;plot&nbsp;=&nbsp;(PiePlot)&nbsp;chart.getPlot();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plot.setNoDataMessage(<span class="string">&quot;No&nbsp;data&nbsp;available&quot;</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChartUtilities.writeChartAsJPEG(response.getOutputStream(),&nbsp;chart,&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width,&nbsp;hight);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
PieChartPage.java页面类<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.ce.jfreechart.page;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.annotations.InjectObject;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.event.PageBeginRenderListener;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.tapestry.event.PageEvent;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.ce.jfreechart.service.StatChartService;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.ce.jfreechart.vo.PieChartVO;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;功能描述：公司人员统计页</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PieChartPage&nbsp;</span><span class="keyword">extends</span><span>&nbsp;org.apache.tapestry.html.BasePage&nbsp;</span><span class="keyword">implements</span><span>&nbsp;PageBeginRenderListener{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;title&nbsp;&nbsp;=&nbsp;</span><span class="string">&quot;公司人员统计饼状图&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@InjectObject</span><span>(</span><span class="string">&quot;service:tapestry.globals.HttpServletRequest)</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;HttpServletRequest&nbsp;getRequest();</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;页面开始表现时触发，或form重表现时也会触发</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;pageBeginRender(PageEvent&nbsp;event)&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!event.getRequestCycle().isRewinding())&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//画饼图</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;name&nbsp;=&nbsp;{&quot;</span><span>管理人员</span><span class="string">&quot;,&quot;</span><span>市场人员</span><span class="string">&quot;,&quot;</span><span>开发人员</span><span class="string">&quot;,&quot;</span><span>OEM人员</span><span class="string">&quot;,&quot;</span><span>其他人员&quot;};&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">double</span><span>[]&nbsp;value&nbsp;=&nbsp;{</span><span class="number">10</span><span>.02D,</span><span class="number">20</span><span>.23D,</span><span class="number">56</span><span>.80D,</span><span class="number">12</span><span>.30D,</span><span class="number">5</span><span>.98D};&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PieChartVO&nbsp;pcVo&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;PieChartVO();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcVo.setTitle(title);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcVo.setName(name);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcVo.setValue(value);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcVo.setWidth(<span class="number">450</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcVo.setHight(<span class="number">300</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.getRequest().getSession().getAttribute(StatChartService.CHART_PARAS_OBJ_NAME)==</span><span class="keyword">null</span><span>)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.getRequest().getSession().setAttribute(StatChartService.CHART_PARAS_OBJ_NAME,&nbsp;pcVo);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span class="keyword">catch</span><span>(Exception&nbsp;e){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
参数Vo对象:
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;功能描述：生成JFreeChart饼图的参数Vo对象</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PieChartVO&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Serializable&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;1L;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;图表标题</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;String&nbsp;title;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;具体项名称数组</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;String[]&nbsp;name;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;具体项值数组</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">double</span><span>[]&nbsp;value;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;图表宽度</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;width;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;图表高度</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;hight;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;方法略......&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
PieChart.html页面文件<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span></span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>PieChart.html</span><span class="tag"><!--</span--><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;keywords&quot;</span><span>&nbsp;</span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;keyword1,keyword2,keyword3&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;description&quot;</span><span>&nbsp;</span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;this&nbsp;is&nbsp;my&nbsp;page&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">http-equiv</span><span>=</span><span class="attribute-value">&quot;content-type&quot;</span><span>&nbsp;</span><span class="attribute">content</span><span>=</span><span class="attribute-value">&quot;text/html;&nbsp;charset=UTF-8&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comments"><!--图片输出--></span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">align</span><span>=</span><span class="attribute-value">&quot;center&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">img</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;app?service=chart&quot;</span><span>&nbsp;</span><span class="attribute">border</span><span>=</span><span class="attribute-value">&quot;0&quot;</span><span class="tag">/&gt;</span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
PieChart.page文件<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;GBK&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&quot;-//Apache&nbsp;Software&nbsp;Foundation//Tapestry&nbsp;Specification&nbsp;4.0//EN&quot;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&quot;http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">page-specification</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.ce.jfreechart.page.PieChartPage&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">page-specification</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/68625#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Apr 2007 14:54:30 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/68625</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/68625</guid>
      </item>
      <item>
        <title>Jfreechart与Tapestry4.0 结合实现(上)</title>
        <author>kevin_gzhz</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kevin-gzhz.javaeye.com">kevin_gzhz</a>&nbsp;
          链接：<a href="http://kevin-gzhz.javaeye.com/blog/68621" style="color:red;">http://kevin-gzhz.javaeye.com/blog/68621</a>&nbsp;
          发表时间: 2007年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1〉Jfreechart简介：<br />
&nbsp;&nbsp;&nbsp; JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目，它主要用来各种各样的图表，这些图表包括：饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等 <br />
&nbsp;&nbsp;&nbsp; 开发必须要用的两个开发包是jfreechart-1.0.0-rc1.jar(现在最新为1.0.5版本)以及Jcommon-1.0.0.jar<br />
&nbsp;&nbsp;&nbsp; 下面介绍JFreeChart中几个核心的对象类：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; JFreeChart：图表对象，任何类型的图表的最终表现形式都是在该对象 进行一些属性的定制。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXDataset：数据集对象，用于提供显示图表所用的数据。根据不同类型的图表对应着很&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
多类型的数据集对象类<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXPlot： 图表区域对象，基本上这个对象决定着什么样式的图表，创建该对象的时候需&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
要Axis、Renderer以及数据集对象的支持<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXAxis： 用于处理图表的两个轴：纵轴和横轴<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXRenderer：负责如何显示一个图表对象<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXURLGenerator ：用于生成Web图表中每个项目的鼠标点击链接<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XXXXXToolTipGenerator： 用于生成图象的帮助提示，不同类型图表对应不同类型的工具提&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 示类<br />
&nbsp;&nbsp;&nbsp; 基本上我认为JFreeChart项目本身的类结构的设计并不是很好，首先在创建图表的时候用到了大量的工厂方法，这样做虽然可以简化创建图表对象的代码，但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情；其次除图表对象本身外其余的类过于复杂，使用者必须去了解每个类型的 图表对象应该对应哪些Axis、Plot、Renderer类，并且必须非常熟悉这些类的构造函数中每个参数的具体含义。这些问题都大大困扰很多初学者。 不过，虽然存在很多问题，但是JFreeChart本身仍不失为一个非常优秀的图表引擎，况且项目本身也在逐渐的发展中。 <br />
2〉开发实例：<br />
&nbsp;&nbsp;&nbsp; 实现原理：通过文件流输出到页面显示,因为T4底层引擎已经封装了Servlet，故采用一个T4服务来进行画图操作。<br />
&nbsp;&nbsp;&nbsp; 1）创建一个Web项目JFreeChartDemo，导入所需的相关开发包。（再次创建过程不详述）<br />
&nbsp;&nbsp;&nbsp; 2）在Web.xml中添加如下配置: <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;2.4&quot;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&quot;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xsi:schemaLocation</span><span>=&quot;http://java.sun.com/xml/ns/j2ee&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>JFreeChart&nbsp;Project</span><span class="tag"><!--</span--><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>redirect</span><span class="tag"><!--</span--><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>org.apache.tapestry.RedirectFilter</span><span class="tag"><!--</span--><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>redirect</span><span class="tag"><!--</span--><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>org.apache.tapestry.ApplicationServlet</span><span class="tag"><!--</span--><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">load-on-startup</span><span class="tag">&gt;</span><span>0</span><span class="tag"><!--</span--><span class="tag-name">load-on-startup</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/app</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.page</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.external</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.direct</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.sdirect</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.svc</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>jfreechart</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/assets/*</span><span class="tag"><!--</span--><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">session-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">session-timeout</span><span class="tag">&gt;</span><span>30</span><span class="tag"><!--</span--><span class="tag-name">session-timeout</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">session-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
3)在hivemodule.xml中进行如下配置: <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;gb2312&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">module</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;jfreechart&quot;</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0.0&quot;</span><span>&nbsp;</span><span class="attribute">package</span><span>=</span><span class="attribute-value">&quot;com.ce.jfreechart&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!-- 部署FriendlyURL --></span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">contribution</span><span>&nbsp;</span><span class="attribute">configuration-id</span><span>=</span><span class="attribute-value">&quot;tapestry.url.ServiceEncoders&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">direct-service-encoder</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;direct&quot;</span><span>&nbsp;</span><span class="attribute">stateless-extension</span><span>=</span><span class="attribute-value">&quot;direct&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">stateful-extension</span><span>=</span><span class="attribute-value">&quot;sdirect&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">page-service-encoder</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;page&quot;</span><span>&nbsp;</span><span class="attribute">extension</span><span>=</span><span class="attribute-value">&quot;page&quot;</span><span>&nbsp;</span><span class="attribute">service</span><span>=</span><span class="attribute-value">&quot;page&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">page-service-encoder</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;external&quot;</span><span>&nbsp;</span><span class="attribute">extension</span><span>=</span><span class="attribute-value">&quot;external&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">service</span><span>=</span><span class="attribute-value">&quot;external&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">asset-encoder</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;asset&quot;</span><span>&nbsp;</span><span class="attribute">path</span><span>=</span><span class="attribute-value">&quot;/assets&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">extension-encoder</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;ext&quot;</span><span>&nbsp;</span><span class="attribute">extension</span><span>=</span><span class="attribute-value">&quot;svc&quot;</span><span>&nbsp;</span><span class="attribute">after</span><span>=</span><span class="attribute-value">&quot;*&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">contribution</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">contribution</span><span>&nbsp;</span><span class="attribute">configuration-id</span><span>=</span><span class="attribute-value">&quot;tapestry.services.ApplicationServices&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">service</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;chart&quot;</span><span>&nbsp;</span><span class="attribute">object</span><span>=</span><span class="attribute-value">&quot;service:jfreechart.ChartService&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">contribution</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">service-point</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;ChartService&quot;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">interface</span><span>=</span><span class="attribute-value">&quot;org.apache.tapestry.engine.IEngineService&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">invoke-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">construct</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.ce.jfreechart.service.StatChartService&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">set-object</span><span>&nbsp;</span><span class="attribute">property</span><span>=</span><span class="attribute-value">&quot;linkFactory&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;service:tapestry.url.LinkFactory&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">construct</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">invoke-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">service-point</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">module</span><span class="tag">&gt;</span><span><br />
    </span></span></span></li>
</ol>
</div>
4)jfreechart.application文件配置如下:<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;GBK&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span></li>
    <li class=""><span>&nbsp;&nbsp;&quot;-//Apache&nbsp;Software&nbsp;Foundation//Tapestry&nbsp;Specification&nbsp;4.0//EN&quot;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&quot;http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">application</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jfreechart&quot;</span><span>&nbsp;</span><span class="attribute">engine-class</span><span>=</span><span class="attribute-value">&quot;org.apache.tapestry.engine.BaseEngine&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>jfreechart&nbsp;Module</span><span class="tag"><!--</span--><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;org.apache.tapestry.disable-caching&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;org.apache.tapestry.default-page-class&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">meta</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;org.apache.tapestry.template-encoding&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!--饼图--></span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">page</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;PieChart&quot;</span><span>&nbsp;</span><span class="attribute">specification-path</span><span>=</span><span class="attribute-value">&quot;/WEB-INF/page/PieChart.page&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">application</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
<div class="code_title"><br />
</div>
          <br/>
          <span style="color:red;">
            <a href="http://kevin-gzhz.javaeye.com/blog/68621#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Apr 2007 14:44:22 +0800</pubDate>
        <link>http://kevin-gzhz.javaeye.com/blog/68621</link>
        <guid>http://kevin-gzhz.javaeye.com/blog/68621</guid>
      </item>
  </channel>
</rss>