<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>用心做事，诚信做人！</title>
    <description>我的人生哲学是微笑着去承受生活给予我的一切磨难和挫折，笑对人生。当我拥有幸福的时候，我会好好珍惜当幸福运走时，我会很痛苦，但不会绝望和消沉，因为我还拥有事业，亲人，朋友，健康，当有一天健康也离我而去，我会笑着挥挥手，这世界我曾来过。坚强的我心好软。</description>
    <link>http://wangyu.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>svn服务器安装配置与svn的eclipse的subclipse插件使用</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/230286" style="color:red;">http://wangyu.javaeye.com/blog/230286</a>&nbsp;
          发表时间: 2008年08月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          svn服务器安装配置： <br />1.安装svn-1.3.0-setup.exe（可以在http://subversion.tigris.org/下载得到） <br />2.安装成功后，在命令行输入svnadmin create D:\svnhome\workflow,建立工程，svn自动会在该目录下建立若干文件 <br />3.在该目录下有password文件，在此文件中增加用户和密码格式如下 <br />[users] <br />admin = 123 <br />在svnserve.conf文件中增加 <br />[general] <br />anon-access = read <br />auth-access = write <br />password-db = passwd <br />realm = svnhome <br />到这一步svn服务器已经配置完成了，下面是导入需要版本控制的工程 <br />4.在命令行执行import命令 <br />例如：D:\svnhome\workflow>svn import D:\eclipse\workspace\Workflowfile:///D:/svnhome\workflow -m "initial import" <br />回车后命令窗口显示 <br />新增 D:\eclipse\workspace\Workflow\.classpath <br />新增 D:\eclipse\workspace\Workflow\.project <br />新增 D:\eclipse\workspace\Workflow\src <br />新增 D:\eclipse\workspace\Workflow\src\com <br />新增 D:\eclipse\workspace\Workflow\src\com\bright <br />新增 D:\eclipse\workspace\Workflow\src\com\bright\sw............提交后的修订版为 1。 <br />说明工程引入svn控制成功5.最后在命令行执行svnserve -d命令，启动svn服务svn的eclipse插件 安装配置： <br />1.更新安装http://subclipse.tigris.org/update的subclipse插件 <br />2.安装完成后eclipse会自动重启后，在svn的透视图中可以看到svn的相关菜单 <br />3.将新的 SVN 资源库添加至“SVN 资源库。url为svn://localhost/svnhome/workflow <br />4.引用项目成功后，便可以用前面的用户名和密码来更新和提交工程内文件了。 <br />5.subclipse的较新版本都是中文的，详细操作略。svn有很多的客户端，在此只通过命令行来操作，结合eclipse的插件来控制版本并不涉及任何客户端程序。
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/230286#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Aug 2008 01:20:35 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/230286</link>
        <guid>http://wangyu.javaeye.com/blog/230286</guid>
      </item>
      <item>
        <title>struts2.0中struts.xml配置文件详解 </title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/229186" style="color:red;">http://wangyu.javaeye.com/blog/229186</a>&nbsp;
          发表时间: 2008年08月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="xml">&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
&lt;struts>

    &lt;!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
    &lt;include file="struts-default.xml">&lt;/include>
    
    
    &lt;!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name：package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址，例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    &lt;package name="com.kay.struts2" extends="struts-default" namespace="/test">
        &lt;interceptors>
            &lt;!-- 定义拦截器 
                name:拦截器名称
                class:拦截器类路径
             -->
            &lt;interceptor name="timer" class="com.kay.timer">&lt;/interceptor>
            &lt;interceptor name="logger" class="com.kay.logger">&lt;/interceptor>
            &lt;!-- 定义拦截器栈 -->
            &lt;interceptor-stack name="mystack">
                &lt;interceptor-ref name="timer">&lt;/interceptor-ref>
                &lt;interceptor-ref name="logger">&lt;/interceptor-ref>
            &lt;/interceptor-stack>
        &lt;/interceptors>
        
        &lt;!-- 定义默认的拦截器 每个Action都会自动引用
         如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        &lt;default-interceptor-ref name="mystack">&lt;/default-interceptor-ref>
        
        
        &lt;!-- 全局results配置 -->
        &lt;global-results>
            &lt;result name="input">/error.jsp&lt;/result>
        &lt;/global-results>
        
        &lt;!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
             name：action名称
             class: 对应的类的路径
             method: 调用Action中的方法名
        -->
        &lt;action name="hello" class="com.kay.struts2.Action.LoginAction">
            &lt;!-- 引用拦截器
                name:拦截器名称或拦截器栈名称
             -->
            &lt;interceptor-ref name="timer">&lt;/interceptor-ref>
        
            &lt;!-- 节点配置
                name : result名称 和Action中返回的值相同
                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
             -->
         &lt;result name="success" type="dispatcher">/talk.jsp&lt;/result>
         &lt;!-- 参数设置 
             name：对应Action中的get/set方法 
         -->
         &lt;param name="url">http://www.sina.com&lt;/param>
        &lt;/action>
    &lt;/package>
&lt;/struts></pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/229186#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Aug 2008 14:15:25 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/229186</link>
        <guid>http://wangyu.javaeye.com/blog/229186</guid>
      </item>
      <item>
        <title>Java 调用 Oracle 存储过程返回结果集 </title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/226847" style="color:red;">http://wangyu.javaeye.com/blog/226847</a>&nbsp;
          发表时间: 2008年08月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Oracle 存储过程返回结果集用 ref cursor 实现。试验步骤如下：<br /><br /><br />1. 建立 ref cursor 类型和过程<br /><pre name="code" class="sql">CREATE OR REPLACE PACKAGE types
AS
    TYPE ref_cursor IS REF CURSOR;
END;
/

CREATE TABLE STOCK_PRICES(
    RIC VARCHAR(6) PRIMARY KEY,
    PRICE NUMBER(7,2),
    UPDATED DATE );
/

CREATE OR REPLACE FUNCTION sp_get_stocks(v_price IN NUMBER) 
    RETURN types.ref_cursor
AS
    stock_cursor types.ref_cursor;
BEGIN
    OPEN stock_cursor FOR 
    SELECT ric,price,updated FROM stock_prices WHERE price &lt; v_price;

    RETURN stock_cursor;
END;
</pre><br />2. 用 sqlplus 测试过程<br /><pre name="code" class="sql">SQL> var results refcursor
SQL> exec :results := sp_get_stocks(20.0)
SQL> print results
</pre><br />3. 从 Java 调用<br /><pre name="code" class="java">import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;

public class JDBCDemo {

    /**
    * Compile-time flag for deciding which query to use
    */
    private boolean useOracleQuery = true;

    /**
    * Class name of Oracle JDBC driver
    */
    private String driver = "oracle.jdbc.driver.OracleDriver";

    /**
    * Initial url fragment
    */
    private String url = "jdbc:oracle:thin:@";


    /**
    * Standard Oracle listener port
    */
    private String port = "1521";


    /**
    * Oracle style of calling a stored procedure
    */
    private String oracleQuery = "begin ? := sp_get_stocks(?); end;";


    /**
    * JDBC style of calling a stored procedure
    */
    private String genericQuery = "{ call ? := sp_get_stocks(?) }";


    /**
    * Connection to database
    */
    private Connection conn = null;


    /**
    * Constructor. Loads the JDBC driver and establishes a connection
    *
    * @param host the host the db is on
    * @param db the database name
    * @param user user's name
    * @param password user's password
    */
    public JDBCDemo(String host, String db, String user, String password)
    throws ClassNotFoundException, SQLException {

        // construct the url
        url = url + host + ":" + port + ":" + db;

        // load the Oracle driver and establish a connection
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, user, password);
        }
        catch (ClassNotFoundException ex) {
            System.out.println("Failed to find driver class: " + driver);
            throw ex;
        }
        catch (SQLException ex) {
            System.out.println("Failed to establish a connection to: " + url);
            throw ex;
        }
    }


    /**
    * Execute the stored procedure
    *
    * @param price price parameter for stored procedure
    */
    private void execute(float price)
    throws SQLException {

        String query = useOracleQuery ? oracleQuery : genericQuery;
        System.out.println("Query: " + query + "n");
        CallableStatement stmt = conn.prepareCall(query);

        // register the type of the out param - an Oracle specific type
        stmt.registerOutParameter(1, OracleTypes.CURSOR);

        // set the in param
        stmt.setFloat(2, price);

        // execute and retrieve the result set
        stmt.execute();
        ResultSet rs = (ResultSet)stmt.getObject(1);

        // print the results
        while (rs.next()) {
            System.out.println(rs.getString(1) + "t" +
            rs.getFloat(2) + "t" +
            rs.getDate(3).toString());
        }

        rs.close();
        stmt.close();
    }


    /**
    * Cleanup the connection
    */
    private void cleanup() throws SQLException {

        if (conn != null)
            conn.close();
        }


    /**
    * Prints usage statement on stdout
    */
    static private void usage() {

        System.out.println("java com.enterprisedt.demo.oracle.JDBCDemo " +
        " host db user password price");
    }


    /**
    * Runs the class
    */
    public static void main(String[] args) throws Exception {

        if (args.length != 5) {
            JDBCDemo.usage();
            System.exit(1);
        }
        else {
            try {
                // assign the args to sensible variables for clarity
                String host = args[0];
                String db = args[1];
                String user = args[2];
                String password = args[3];
                float price = Float.valueOf(args[4]).floatValue();

                // and execute the stored proc
                JDBCDemo jdbc = new JDBCDemo(host, db, user, password);
                jdbc.execute(price);
                jdbc.cleanup();
            }
            catch (ClassNotFoundException ex) {
                System.out.println("Demo failed");
            }
            catch (SQLException ex) {
                System.out.println("Demo failed: " + ex.getMessage());
            }
        }
    }
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/226847#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Aug 2008 08:16:17 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/226847</link>
        <guid>http://wangyu.javaeye.com/blog/226847</guid>
      </item>
      <item>
        <title>java的property配置文件的用法</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/221154" style="color:red;">http://wangyu.javaeye.com/blog/221154</a>&nbsp;
          发表时间: 2008年07月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">

package configuration;    
import Java.io.FileInputStream;    
import Java.io.FileNotFoundException;    
import Java.io.FileOutputStream;    
import Java.io.IOException;    
import Java.util.Properties;    
/** *//**   
* 读取properties文件   
* @author Qutr   
*   
*/   
public class Configuration    
...{    
    private Properties propertie;    
    private FileInputStream inputFile;    
    private FileOutputStream outputFile;    
        
    /** *//**   
     * 初始化Configuration类   
     */   
    public Configuration()    
    ...{    
        propertie = new Properties();    
    }    
        
    /** *//**   
     * 初始化Configuration类   
     * @param filePath 要读取的配置文件的路径+名称   
     */   
    public Configuration(String filePath)    
    ...{    
        propertie = new Properties();    
        try ...{    
            inputFile = new FileInputStream(filePath);    
            propertie.load(inputFile);    
            inputFile.close();    
        } catch (FileNotFoundException ex) ...{    
            System.out.println("读取属性文件--->失败！- 原因：文件路径错误或者文件不存在");    
            ex.printStackTrace();    
        } catch (IOException ex) ...{    
            System.out.println("装载文件--->失败!");    
            ex.printStackTrace();    
        }    
    }//end ReadConfigInfo(...)    
        
    /** *//**   
     * 重载函数，得到key的值   
     * @param key 取得其值的键   
     * @return key的值   
     */   
    public String getValue(String key)    
    ...{    
        if(propertie.containsKey(key))...{    
            String value = propertie.getProperty(key);//得到某一属性的值    
            return value;    
        }    
        else     
            return "";    
    }//end getValue(...)    
        
    /** *//**   
     * 重载函数，得到key的值   
     * @param fileName properties文件的路径+文件名   
     * @param key 取得其值的键   
     * @return key的值   
     */   
    public String getValue(String fileName, String key)    
    ...{    
        try ...{    
            String value = "";    
            inputFile = new FileInputStream(fileName);    
            propertie.load(inputFile);    
            inputFile.close();    
            if(propertie.containsKey(key))...{    
                value = propertie.getProperty(key);    
                return value;    
            }else   
                return value;    
        } catch (FileNotFoundException e) ...{    
            e.printStackTrace();    
            return "";    
        } catch (IOException e) ...{    
            e.printStackTrace();    
            return "";    
        } catch (Exception ex) ...{    
            ex.printStackTrace();    
            return "";    
        }    
    }//end getValue(...)    
        
    /** *//**   
     * 清除properties文件中所有的key和其值   
     */   
    public void clear()    
    ...{    
        propertie.clear();    
    }//end clear();      
    /** *//**   
     * 改变或添加一个key的值，当key存在于properties文件中时该key的值被value所代替，   
     * 当key不存在时，该key的值是value   
     * @param key 要存入的键   
     * @param value 要存入的值   
     */   
    public void setValue(String key, String value)    
    ...{    
        propertie.setProperty(key, value);    
    }//end setValue(...)    
        
    /** *//**   
     * 将更改后的文件数据存入指定的文件中，该文件可以事先不存在。   
     * @param fileName 文件路径+文件名称   
     * @param description 对该文件的描述   
     */   
    public void saveFile(String fileName, String description)    
    ...{    
        try ...{    
            outputFile = new FileOutputStream(fileName);    
            propertie.store(outputFile, description);    
            outputFile.close();    
        } catch (FileNotFoundException e) ...{    
            e.printStackTrace();    
        } catch (IOException ioe)...{    
            ioe.printStackTrace();    
        }    
    }//end saveFile(...)    
        
    public static void main(String[] args)    
    ...{    
        Configuration rc = new Configuration(".\config\test.properties");//相对路径    
            
        String ip = rc.getValue("ipp");//以下读取properties文件的值    
        String host = rc.getValue("host");    
        String tab = rc.getValue("tab");    
            
        System.out.println("ip = " + ip + "ip-test leng = " + "ip-test".length());//以下输出properties读出的值    
        System.out.println("ip's length = " + ip.length());    
        System.out.println("host = " + host);    
        System.out.println("tab = " + tab);    
        Configuration cf = new Configuration();    
        String ipp = cf.getValue(".\config\test.properties", "ip");    
        System.out.println("ipp = " + ipp);    
//        cf.clear();    
        cf.setValue("min", "999");    
        cf.setValue("max", "1000");    
        cf.saveFile(".\config\save.perperties", "test");    
            
//        Configuration saveCf = new Configuration();    
//        saveCf.setValue("min", "10");    
//        saveCf.setValue("max", "1000");    
//        saveCf.saveFile(".\config\save.perperties");    
            
    }//end main()    
        
}//end class ReadConfigInfo  
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/221154#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Jul 2008 16:26:33 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/221154</link>
        <guid>http://wangyu.javaeye.com/blog/221154</guid>
      </item>
      <item>
        <title>VS2008正式版序列号</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/219735" style="color:red;">http://wangyu.javaeye.com/blog/219735</a>&nbsp;
          发表时间: 2008年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>VS2008中文试用版刚出来不久就上网拖了下来<br />可是安装的时候却出问题了。后来，Google了下，把自己遇到的问题和解决方法跟大家分享。<br />1.让试用版变成正式版<br />&nbsp; &nbsp; 从Microsoft那下了7个压缩文件分包后，解压后是一个ISO文件。<br />&nbsp; 我用UltraISO编辑了下ISO文件：Setup--&gt;setup.sdb文件提取出来编辑，将<br />&nbsp; &nbsp; [Product Key]<br />&nbsp; &nbsp; T2CRQGDKBVW7KJR8C6CKXMW3D<br />改成<br />&nbsp; &nbsp; [Product Key]<br />&nbsp; &nbsp; PYHYPWXB3BB2CCMV9DX9VDY8T<br />这样，安装的时候就默认是这个正版的序列号了。<br />还有一种方法就是，不改这个文件，安装后，再添加删除程序的时候可以输入序列号：<br />&nbsp; &nbsp; PYHYP－WXB3B－B2CCM－V9DX9－VDY8T<br />也可以变成正版。<br />好了，可以安装了^_^<br />顺便把下载连接贴出来：<br />官方下载地址：<br /><span style="text-decoration: underline;"><br /><a href="http://www.microsoft.com/downloads/details.aspx?familyid=D95598D7-AA6E-4F24-82E3-81570C5384CB&amp;displaylang=zh-cn" target="_blank"><span style="color: #56b6e9;">http://www.microsoft.com/downloads/details.aspx?familyid=D95598D7-AA6E-4F24-82E3-81570C5384CB&amp;displaylang=zh-cn</span></a><br /></span><br />或直接下载压缩：<br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part1.exe" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part1.exe</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part2.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part2.rar</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part3.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part3.rar</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part4.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part4.rar</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part5.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part5.rar</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part6.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part6.rar</span></a><br /><a href="http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part7.rar" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part7.rar</span></a><br />团队资源管理器：<br /><a href="http://download.microsoft.com/download/d/7/2/d72f8415-7b4b-4168-ba3b-65c3ca4c1f81/VS2008TeamExplorerCHS.iso" target="_blank"><span style="color: #56b6e9;">http://download.microsoft.com/download/d/7/2/d72f8415-7b4b-4168-ba3b-65c3ca4c1f81/VS2008TeamExplorerCHS.iso</span></a> <br /><br />一些VS2008介绍及学习资料:<br /><span style="font-family: Verdana;">Visual Studio 2008的性能改进以及十大新功能:<br /><span style="font-family: Verdana;"><a href="http://news.csdn.net/n/20080125/113132.html" target="_blank"><span style="font-family: Verdana;"><span style="color: #56b6e9;">http://news.csdn.net/n/20080125/113132.html</span><br /><br /></span></a><span style="font-family: Verdana;">CSDN--Visual Studio 2008专题<br /><a href="about:blank" target="_blank"></a><a href="http://subject.csdn.net/vs2008/"><span style="color: #56b6e9; font-family: Verdana;">http://subject.csdn.net/vs2008/</span></a></span></span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/219735#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 26 Jul 2008 07:00:17 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/219735</link>
        <guid>http://wangyu.javaeye.com/blog/219735</guid>
      </item>
      <item>
        <title>editplus 配置FLEX 3 SDK编译AS3 和实现AS3代码高亮</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/216694" style="color:red;">http://wangyu.javaeye.com/blog/216694</a>&nbsp;
          发表时间: 2008年07月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="cnt" id="blog_text">
<p>打开editplus 3编辑器，选择菜单 工具--配置用户工具，选择工具-用户工具 添加--应用程序</p>
<p>菜单文本输入：flex<br />
命令：D:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\bin\mxmlc.exe (我电脑路径,可以直接用sdks包 不需要安装flex )<br />
参数：$(FilePath) 下拉菜单第一个就行</p>
<p>然后确定 编译环境就配置好了</p>
<p>然后点击 工具菜单 最下面会出现 flex菜单项目</p>
<p>只要你写个 AS3的类 然后直接点 flex菜单项 就会在这个AS3类的同一目录下生成一个swf文件</p>
<p>配置环境就配置完成了</p>
<p>代码高亮：<br />
到这个地址下个语法和高亮提示包：<br />
&nbsp;&nbsp;<a href="http://editplus.com/others.html">http://editplus.com/others.html</a>
<br />
你也可以直接点这个地址直接下载：<br />
&nbsp;&nbsp;<a href="http://www.editplus.com/dn.cgi?as2_3.zip">http://www.editplus.com/dn.cgi?as2_3.zip</a>
 Flash ActionScript v2 + v3 stx, acp - Yoon js <br />
&nbsp;&nbsp;<a href="http://www.editplus.com/dn.cgi?as3.zip">http://www.editplus.com/dn.cgi?as3.zip</a>
&nbsp;&nbsp;  Flash ActionScript 3.0 / Flex 2.0 stx - mike <br />
下载完以后将压缩包解压出来两面有以下两个文件：<br />
&nbsp;&nbsp;  as.acp as.stx<br />
直接把这两个文件复制到editplus安装目录下 我的电脑路径：D:\Program Files\EditPlus 3<br />
<br />
然后点击 工具--程序选项(第一个菜单)<br />
&nbsp;&nbsp;  在弹出对话框里选择文件--设置与语法</p>
<p>点添加(压缩包里有图解)<br />
&nbsp;&nbsp;  描述：ActionScript3<br />
&nbsp;&nbsp;  文件扩展名：as<br />
设置与语法：<br />
&nbsp;&nbsp;  语法文件：as.stx<br />
&nbsp;&nbsp;  自动完成：as.acp</p>
<p>然后点确定 设置代码高亮就完成了！！现在就可以开始编写代码了^_^</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/216694#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Jul 2008 15:11:33 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/216694</link>
        <guid>http://wangyu.javaeye.com/blog/216694</guid>
      </item>
      <item>
        <title>分页技术</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/216468" style="color:red;">http://wangyu.javaeye.com/blog/216468</a>&nbsp;
          发表时间: 2008年07月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在使用数据库的过程中，不可避免的需要使用到分页的功能，可是JDBC的规范对此却没有很好的解决。对于这个需求很多朋友都有自己的解决方案，比如使用Vector等集合类先保存取出的数据再分页。但这种方法的可用性很差，与JDBC本身的接口完全不同，对不同类型的字段的支持也不好。这里提供了一种与JDBC兼容性非常好的方案。&nbsp; </p>
<p>　　<strong>JDBC和分页</strong></p>
<p>　　Sun的JDBC规范的制定，有时很让人哭笑不得，在JDBC1.0中，对于一个结果集（ResultSet）你甚至只能执行next()操作，而无法让其向后滚动，这就直接导致在只执行一次SQL查询的情况下无法获得结果集的大小。所以，如果你使用的是JDBC1.0的驱动，那么是几乎无法实现分页的。</p>
<p>　　好在Sun的JDBC2规范中很好的弥补了这一个不足，增加了结果集的前后滚动操作，虽然仍然不能直接支持分页，但我们已经可以在这个基础上写出自己的可支持分页的ResultSet了。</p>
<p>　　<strong>和具体数据库相关的实现方法</strong></p>
<p>　　有一些数据库，如Mysql, Oracle等有自己的分页方法，比如Mysql可以使用limit子句，Oracle可以使用ROWNUM来限制结果集的大小和起始位置。这里以Mysql为例，其典型代码如下： </p>
<p class="code">&nbsp;&nbsp;&nbsp; // 计算总的记录条数<br />&nbsp;&nbsp;&nbsp; String SQL = "SELECT Count(*) AS total " + this.QueryPart; <br />&nbsp;&nbsp;&nbsp; rs = db.executeQuery(SQL);&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; if (rs.next()) <br />&nbsp;&nbsp;&nbsp; Total = rs.getInt(1);&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; // 设置当前页数和总页数<br />&nbsp;&nbsp;&nbsp; TPages = (int)Math.ceil((double)this.Total/this.MaxLine); <br />&nbsp;&nbsp;&nbsp; CPages = (int)Math.floor((double)Offset/this.MaxLine+1); <br />&nbsp;&nbsp;&nbsp; // 根据条件判断，取出所需记录<br />&nbsp;&nbsp;&nbsp; if (Total &gt; 0) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL = Query + " LIMIT " + Offset + " , " + MaxLine; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs = db.executeQuery(SQL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return rs; <br />&nbsp; }&nbsp; </p>
<p>　　毫无疑问，这段代码在数据库是Mysql时将会是漂亮的，但是作为一个通用的类（事实上我后面要提供的就是一个通用类库中的一部分），需要适应不同的数据库，而基于这个类（库）的应用，也可能使用不同的数据库，所以，我们将不使用这种方法。</p>
<p><strong>　　另一种繁琐的实现方法</strong></p>
<p>　　我看过一些人的做法（事实上包括我在内，一开始也是使用这种方法的），即不使用任何封装，在需要分页的地方，直接操作ResultSet滚到相应的位置，再读取相应数量的记录。其典型代码如下： </p>
<p class="code">&lt;%<br />sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,<br />java.sql.ResultSet.CONCUR_READ_ONLY);<br />strSQL = "select name,age from test";<br />//执行SQL语句并获取结果集<br />sqlRst = sqlStmt.executeQuery(strSQL);<br />//获取记录总数<br />sqlRst.last();<br />intRowCount = sqlRst.getRow();<br />//记算总页数<br />intPageCount = (intRowCount+intPageSize-1) / intPageSize;<br />//调整待显示的页码<br />if(intPage&gt;intPageCount) intPage = intPageCount;<br />%&gt;<br />&lt;table border="1" cellspacing="0" cellpadding="0"&gt;<br />&lt;tr&gt;<br />&nbsp;&nbsp; &lt;th&gt;姓名&lt;/th&gt;<br />&nbsp;&nbsp; &lt;th&gt;年龄&lt;/th&gt;<br />&lt;/tr&gt;<br />&lt;%<br />if(intPageCount&gt;0){<br />&nbsp;&nbsp; //将记录指针定位到待显示页的第一条记录上<br />&nbsp;&nbsp; sqlRst.absolute((intPage-1) * intPageSize + 1);<br />&nbsp;&nbsp; //显示数据<br />&nbsp;&nbsp; i = 0;<br />&nbsp;&nbsp; while(i&lt;intPageSize &amp;&amp; !sqlRst.isAfterLast()){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %&gt;<br />&lt;tr&gt;<br />&nbsp;&nbsp; &lt;td&gt;&lt;%=sqlRst.getString(1)%&gt;&lt;/td&gt;<br />&nbsp;&nbsp; &lt;td&gt;&lt;%=sqlRst.getString(2)%&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sqlRst.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp; }<br />}<br />%&gt;<br />&lt;/table&gt;&nbsp; </p>
<p>　　很显然，这种方法没有考虑到代码重用的问题，不仅代码数量巨大，而且在代码需要修改的情况下，将会无所适从。</p>
<p><strong>　　使用Vector进行分页</strong></p>
<p>　　还见过另一些实现分页的类，是先将所有记录都select出来，然后将ResultSet中的数据都get出来，存入Vector等集合类中，再根据所需分页的大小，页数，定位到相应的位置，读取数据。或者先使用前面提到的两种分页方法，取得所需的页面之后，再存入Vector中。</p>
<p>　　扔开代码的效率不说，单是从程序结构和使用的方便性上讲，就是很糟糕的。比如，这种做法支持的字段类型有限，int, double, String类型还比较好处理，如果碰到Blob, Text等类型，实现起来就很麻烦了。这是一种更不可取的方案。</p>
<p>　　<strong>一个新的Pageable接口及其实现</strong></p>
<p>　　很显然，看过上面三种实现方法后，我们对新的分页机制有了一个目标，即：不与具体数据库相关；尽可能做到代码重用；尽可能与原JDBC接口的使用方法保持一致；尽可能高的效率。</p>
<p>　　首先，我们需要提供一个与java.sql.ResultSet向下兼容的接口，把它命名为Pageable，接口定义如下：</p>
<p class="code">public interface Pageable extends java.sql.ResultSet{<br />/**返回总页数<br />*/<br />int getPageCount();<br />/**返回当前页的记录条数<br />*/<br />int getPageRowsCount();<br />/**返回分页大小<br />*/<br />int getPageSize();<br />/**转到指定页<br />*/<br />void gotoPage(int page) ;<br />/**设置分页大小<br />*/<br />void setPageSize(int pageSize);<br />/**返回总记录行数<br />*/<br />int getRowsCount();<br />/**<br />&nbsp;* 转到当前页的第一条记录<br />&nbsp;* @exception java.sql.SQLException 异常说明。<br />&nbsp;*/<br />void pageFirst() throws java.sql.SQLException;<br />/**<br />&nbsp;* 转到当前页的最后一条记录<br />&nbsp;* @exception java.sql.SQLException 异常说明。<br />&nbsp;*/<br />void pageLast() throws java.sql.SQLException;<br />/**返回当前页号<br />*/<br />int getCurPage();<br />}&nbsp; </p>
<p>　　这是一个对java.sql.ResultSet进行了扩展的接口，主要是增加了对分页的支持，如设置分页大小，跳转到某一页，返回总页数等等。</p>
<p>　　接着，我们需要实现这个接口，由于这个接口继承自ResultSet，并且它的大部分功能也都和ResultSet原有功能相同，所以这里使用了一个简单的Decorator模式。</p>
<p>　　PageableResultSet2的类声明和成员声明如下：</p>
<p class="code">public class PageableResultSet2 implements Pageable {<br />&nbsp;&nbsp;&nbsp; protected java.sql.ResultSet rs=null;<br />&nbsp;&nbsp;&nbsp; protected int rowsCount;<br />&nbsp;&nbsp;&nbsp; protected int pageSize;<br />&nbsp;&nbsp;&nbsp; protected int curPage;<br />&nbsp;&nbsp;&nbsp; protected String command = "";<br />}&nbsp; </p>
<p>　　可以看到，在PageableResultSet2中，包含了一个ResultSet的实例（这个实例只是实现了ResultSet接口，事实上它是由各个数据库厂商分别实现的），并且把所有由ResultSet继承来的方法都直接转发给该实例来处理。</p>
<p>　　PageableResultSet2中继承自ResultSet的主要方法：</p>
<p class="code">//&hellip;&hellip;<br />public boolean next() throws SQLException {<br />&nbsp;&nbsp;&nbsp; return rs.next();<br />}<br />//&hellip;&hellip;<br />public String getString(String columnName) throws SQLException {<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return rs.getString(columnName);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; catch (SQLException e) {//这里是为了增加一些出错信息的内容便于调试<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new SQLException (e.toString()+" columnName="<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +columnName+" SQL="+this.getCommand());<br />&nbsp;&nbsp;&nbsp; }<br />}<br />//&hellip;&hellip;&nbsp; <br />　　只有在Pageable接口中新增的方法才需要自己的写方法处理。<br />/**方法注释可参考Pageable.java<br />*/<br />public int getCurPage() {<br />&nbsp;&nbsp;&nbsp; return curPage;<br />}<br />public int getPageCount() {<br />&nbsp;&nbsp;&nbsp; if(rowsCount==0) return 0;<br />&nbsp;&nbsp;&nbsp; if(pageSize==0) return 1;<br />&nbsp;&nbsp;&nbsp; //calculate PageCount<br />&nbsp;&nbsp;&nbsp; double tmpD=(double)rowsCount/pageSize;<br />&nbsp;&nbsp;&nbsp; int tmpI=(int)tmpD;<br />&nbsp;&nbsp;&nbsp; if(tmpD&gt;tmpI) tmpI++;<br />&nbsp;&nbsp;&nbsp; return tmpI;<br />}<br />public int getPageRowsCount() {<br />&nbsp;&nbsp;&nbsp; if(pageSize==0) return rowsCount;<br />&nbsp;&nbsp;&nbsp; if(getRowsCount()==0) return 0;<br />&nbsp;&nbsp;&nbsp; if(curPage!=getPageCount()) return pageSize;<br />&nbsp;&nbsp;&nbsp; return rowsCount-(getPageCount()-1)*pageSize;<br />}<br />public int getPageSize() {<br />&nbsp;&nbsp;&nbsp; return pageSize;<br />}<br />public int getRowsCount() {<br />&nbsp;&nbsp;&nbsp; return rowsCount;<br />}<br />public void gotoPage(int page) {<br />&nbsp;&nbsp;&nbsp; if (rs == null)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp; if (page &lt; 1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page = 1;<br />&nbsp;&nbsp;&nbsp; if (page &gt; getPageCount())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page = getPageCount();<br />&nbsp;&nbsp;&nbsp; int row = (page - 1) * pageSize + 1;<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.absolute(row);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curPage = page;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; catch (java.sql.SQLException e) {<br />&nbsp;&nbsp;&nbsp; }<br />}<br />public void pageFirst() throws java.sql.SQLException {<br />&nbsp;&nbsp;&nbsp; int row=(curPage-1)*pageSize+1;<br />&nbsp;&nbsp;&nbsp; rs.absolute(row);<br />}<br />public void pageLast() throws java.sql.SQLException {<br />&nbsp;&nbsp;&nbsp; int row=(curPage-1)*pageSize+getPageRowsCount();<br />&nbsp;&nbsp;&nbsp; rs.absolute(row);<br />}<br />public void setPageSize(int pageSize) {<br />&nbsp;&nbsp;&nbsp; if(pageSize&gt;=0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSize=pageSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curPage=1;<br />&nbsp;&nbsp;&nbsp; }<br />}&nbsp; <br />　　//PageableResultSet2的构造方法：<br />public PageableResultSet2(java.sql.ResultSet rs) throws java.sql.SQLException {<br />&nbsp;&nbsp;&nbsp; if(rs==null) throw new SQLException("given ResultSet is NULL","user");</p>
<p>&nbsp;&nbsp;&nbsp; rs.last();<br />&nbsp;&nbsp;&nbsp; rowsCount=rs.getRow();<br />&nbsp;&nbsp;&nbsp; rs.beforeFirst();<br />&nbsp;&nbsp;&nbsp; this.rs=rs;<br />}&nbsp; </p>
<p>/*如果要提高效率,可以利用select count(*) 语句取得所有记录数,注释掉构造函数的rs.last();rowsCount=rs.getRow();rs.beforeFirst();三句。在调用构造函数后调用此方法获得所有的记录,参数是select count(*)后的结果集<br />*/<br />public void setRowsCount(java.sql.ResultSet rs)throws java.sql.SQLException {<br />&nbsp;&nbsp; if(rs==null) throw new SQLException("given ResultSet is NULL","user");<br />&nbsp;&nbsp; rowCount=rs.getInt(1);<br />}</p>
<p>　　这里只是简单的取得一个总记录数，并将记录游标移回初始位置（before first），同时将参数中的ResultSet赋给成员变量。</p>
<p>　　这里只是简单的取得一个总记录数，并将记录游标移回初始位置（before first），同时将参数中的ResultSet赋给成员变量。</p>
<p><strong>　　Pageable的使用方法</strong></p>
<p>　　因为Pageable接口继承自ResultSet，所以在使用方法上与ResultSet一致，尤其是在不需要分页功能的时候，可以直接当成ResultSet使用。而在需要分页时，只需要简单的setPageSize, gotoPage，即可。</p>
<p class="code">PreparedStatement pstmt=null;<br />Pageable rs=null;<br />&hellip;&hellip;//构造SQL，并准备一个pstmt.<br />rs=new PageableResultSet2(pstmt.executeQuery());//构造一个Pageable<br />rs.setPageSize(20);//每页20个记录<br />rs.gotoPage(2);//跳转到第2页<br />for(int i=0; i&lt;rs.getPageRowsCount(); i++){//循环处理<br />int id=rs.getInt(&ldquo;ID&rdquo;);<br />&hellip;&hellip;//继续处理<br />rs.next();<br />}</p>
<p>　<strong>　总结</strong></p>
<p>　　一个好的基础类应该是便于使用，并且具备足够的可移植性，同时要保证其功能的完善。在上面的实现中，我们从java.sql.ResultSet接口继承出Pageable，并实现了它。这就保证了在使用中与JDBC原有操作的一致性，同时对原有功能没有缩减。</p>
<p>　　同时它也是易于使用的，因为封装了一切必要的操作，所以在你的代码中唯一显得"难看"和"不舒服"的地方就是需要自己去构造一个PageableResultSet2。不过只要你愿意，这也是可以解决的。</p>
<p>　　当然它也有具有充分的可移植性，当你将数据库由Oracle变为Mysql或者SQLServer的时候，你仍然可以使用这些分页的代码。它在使用中（或者说在移植的过程中）唯一的限制就是你必须要使用一个支持JDBC2的驱动（现在明白为什么我把类命名为PageableResultSet2了吧。:P），不过，好在JDBC2已经成为标准了，绝大多数的数据库（如Oracle, Mysql, SQLServer）都有自己的或者第三方提供的JDBC2的驱动。</p>
<p>　　OK，这个分页的实现是否对你的编程有帮助呢？仔细看看，其实真正自己写的代码并不多的，大部分都只是简单的转发操作。一个合适的模式应用可以帮你很大忙。</p>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/216468#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jul 2008 11:33:36 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/216468</link>
        <guid>http://wangyu.javaeye.com/blog/216468</guid>
      </item>
      <item>
        <title>对分页的封装</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/215544" style="color:red;">http://wangyu.javaeye.com/blog/215544</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package com.bjsxt.oa.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import com.bjsxt.oa.SystemContext;

public class PagerFilter implements Filter {

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest httpRequest = (HttpServletRequest)request;
		SystemContext.setOffset(getOffset(httpRequest));
		SystemContext.setPagesize(getPagesize(httpRequest));
		
		try{
			chain.doFilter(request, response);
		}finally{
			//清空ThreadLocal中的值
			SystemContext.removeOffset();
			SystemContext.removePagesize();
		}
		
	}
	
	protected int getOffset(HttpServletRequest request){
		int offset = 0;
		try {
			offset = Integer.parseInt(request.getParameter("pager.offset"));
		} catch (NumberFormatException ignore) {
		}
		return offset;
	}
	
	protected int getPagesize(HttpServletRequest request){
		return 10;
	}

	public void init(FilterConfig arg0) throws ServletException {
	}

}
</pre><br /><pre name="code" class="java">package com.bjsxt.oa;

public class SystemContext {
	private static ThreadLocal offset = new ThreadLocal();
	private static ThreadLocal pagesize = new ThreadLocal();
	
	public static int getOffset(){
		Integer os = (Integer)offset.get();
		if(os == null){
			return 0;
		}
		return os;
	}
	
	public static void setOffset(int offsetvalue){
		offset.set(offsetvalue);
	}
	
	public static void removeOffset(){
		offset.remove();
	}
	
	public static int getPagesize(){
		Integer ps = (Integer)pagesize.get();
		if(ps == null){
			return Integer.MAX_VALUE;
		}
		return ps;
	}
	
	public static void setPagesize(int pagesizevalue){
		pagesize.set(pagesizevalue);
	}
	
	public static void removePagesize(){
		pagesize.remove();
	}
	
}
</pre><br /><pre name="code" class="java">package com.bjsxt.oa.manager.impl;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.SystemContext;
import com.bjsxt.oa.manager.SystemException;

public class AbstractManager extends HibernateDaoSupport {
	
	public PagerModel searchPaginated(String hql){
		return searchPaginated(hql,null,SystemContext.getOffset(),SystemContext.getPagesize());
	}
	
	public PagerModel searchPaginated(String hql,Object param){
		return searchPaginated(hql,new Object[]{param},SystemContext.getOffset(),SystemContext.getPagesize());
	}
	
	public PagerModel searchPaginated(String hql,Object[] params){
		return searchPaginated(hql,params,SystemContext.getOffset(),SystemContext.getPagesize());
	}
	
	public PagerModel searchPaginated(String hql,int offset,int pagesize){
		return searchPaginated(hql,null,offset,pagesize);
	}
	 
	public PagerModel searchPaginated(String hql,Object obj,int offset,int pagesize){
		return searchPaginated(hql,new Object[]{obj},offset,pagesize);
	}
	
	/**
	 * 根据HQL语句进行分页查询
	 * @param hql HQL语句
	 * @param params HQL语句带的多个参数值
	 * @param offset 从第几条记录开始查询
	 * @param pagesize 每页显示多少行
	 * @return
	 */
	public PagerModel searchPaginated(String hql,Object[] params,int offset,int pagesize){
		
		//获取记录总数
		String countHql = getCountQuery(hql);
		Query query = getSession().createQuery(countHql);
		if(params != null && params.length > 0){
			for(int i=0; i&lt;params.length; i++){
				query.setParameter(i, params[i]);
			}
		}
		int total = ((Long)query.uniqueResult()).intValue();
		
		//获取当前页的结果集
		query = getSession().createQuery(hql);
		if(params != null && params.length > 0){
			for(int i=0; i&lt;params.length; i++){
				query.setParameter(i, params[i]);
			}
		}
		
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		List datas = query.list();
		
		PagerModel pm = new PagerModel();
		pm.setTotal(total);
		pm.setDatas(datas);
		return pm;
	}
	
	/**
	 * 根据HQL语句，获得查找总记录数的HQL语句
	 * 如：
	 * select ... from Orgnization o where o.parent is null
	 * 经过转换，可以得到：
	 * select count(*) from Orgnization o where o.parent is null
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql){
		int index = hql.indexOf("from");
		if(index != -1){
			return "select count(*) " + hql.substring(index);
		}
		
		throw new SystemException("无效的HQL查询语句！");
	}
}
</pre><pre name="code" class="java">package com.bjsxt.oa;

import java.util.List;

public class PagerModel {
	
	/**
	 * 总记录数
	 */
	private int total;
	
	/**
	 * 当前页结果集
	 */
	private List datas;

	public List getDatas() {
		return datas;
	}

	public void setDatas(List datas) {
		this.datas = datas;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/215544#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 19:59:04 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/215544</link>
        <guid>http://wangyu.javaeye.com/blog/215544</guid>
      </item>
      <item>
        <title>Pagger-taglib分页</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/215515" style="color:red;">http://wangyu.javaeye.com/blog/215515</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="html">&lt;%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
&lt;%@ taglib prefix="pg"  uri="http://jsptags.com/tags/navigation/pager" %>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=GB18030">
&lt;title>分页处理演示&lt;/title>
&lt;/head>
&lt;body>
&lt;pg:pager items="1001" export="currentPageNumber=pageNumber">
	&lt;pg:first>
		&lt;a href="${pageUrl}">首页&lt;/a>
	&lt;/pg:first>
	&lt;pg:prev>
		&lt;a href="${pageUrl }">前页&lt;/a>
	&lt;/pg:prev>
	&lt;pg:pages>
		&lt;c:choose>
			&lt;c:when test="${currentPageNumber eq pageNumber }">
			&lt;font color="red">${pageNumber }&lt;/font>
			&lt;/c:when>
			&lt;c:otherwise>
				&lt;a href="${pageUrl }">${pageNumber }&lt;/a>
			&lt;/c:otherwise>
		&lt;/c:choose>
	&lt;/pg:pages>
	&lt;pg:next>
		&lt;a href="${pageUrl }">后页&lt;/a>
	&lt;/pg:next>
	&lt;pg:last>
		&lt;a href="${pageUrl }">尾页&lt;/a>
	&lt;/pg:last>
&lt;/pg:pager>
&lt;/body>
&lt;/html></pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/215515#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 17:57:47 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/215515</link>
        <guid>http://wangyu.javaeye.com/blog/215515</guid>
      </item>
      <item>
        <title>统一异常处理</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/215476" style="color:red;">http://wangyu.javaeye.com/blog/215476</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package com.bjsxt.oa.manager;

public class SystemException extends RuntimeException {

	//异常代码
	private String key;
	
	private Object[] values;
	
	public SystemException() {
		super();
	}

	public SystemException(String message, Throwable throwable) {
		super(message, throwable);
	}

	public SystemException(String message) {
		super(message);
	}

	public SystemException(Throwable throwable) {
		super(throwable);
	}
	
	public SystemException(String message,String key){
		super(message);
		this.key = key;
	}
	
	public SystemException(String message,String key,Object value){
		super(message);
		this.key = key;
		this.values = new Object[]{value};
	}
	
	public SystemException(String message,String key,Object[] values){
		super(message);
		this.key = key;
		this.values = values;
	}

	public String getKey() {
		return key;
	}

	public Object[] getValues() {
		return values;
	}

}
</pre><br /><br /><pre name="code" class="xml">	&lt;global-exceptions>
		&lt;exception 
			key="errors.detail" 
			type="java.lang.Exception"
			path="/common/exception.jsp"
			scope="request"
			handler="com.bjsxt.oa.web.SystemExceptionHandler"
		>&lt;/exception>
	&lt;/global-exceptions></pre><br /><pre name="code" class="java">package com.bjsxt.oa.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ExceptionHandler;
import org.apache.struts.config.ExceptionConfig;

import com.bjsxt.oa.manager.SystemException;

public class SystemExceptionHandler extends ExceptionHandler {

	private static Log logger = LogFactory.getLog(SystemExceptionHandler.class);
	
	/**
	 * 处理SystemException异常
	 */
	@Override
	public ActionForward execute(
			Exception ex, 
			ExceptionConfig ae, 
			ActionMapping mapping, 
			ActionForm formInstance, 
			HttpServletRequest request, 
			HttpServletResponse response) throws ServletException {
		
		ActionForward forward = null;
		if(ae.getPath() != null){
			forward = new ActionForward(ae.getPath());
		}else{
			forward = mapping.getInputForward();
		}
		
		logger.debug("出现异常", ex);
		
		//ex.printStackTrace();
		
		if(ex instanceof SystemException){
			SystemException se = (SystemException)ex;
			
			//取出key值
			String key = se.getKey();
			
			ActionMessage error = null;
			if( key == null){
				error = new ActionMessage(ae.getKey(),se.getMessage());
			}else{
				if(se.getValues() != null){
					error = new ActionMessage(key,se.getValues());
				}else{
					error = new ActionMessage(key);
				}
			}
			
			this.storeException(request, key, error, forward, ae.getScope());
			
			return forward;
		}
		
		
		return super.execute(ex, ae, mapping, formInstance, request, response);
	}

}
</pre><br /><br /><pre name="code" class="java">		if(org.getChildren().size() > 0){
			throw new SystemException("存在子机构，不允许删除","exception.org.del",org.getId());
		}
		</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/215476#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 16:47:37 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/215476</link>
        <guid>http://wangyu.javaeye.com/blog/215476</guid>
      </item>
      <item>
        <title>js应用</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/214542" style="color:red;">http://wangyu.javaeye.com/blog/214542</a>&nbsp;
          发表时间: 2008年07月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="js">/*
 * 打开新窗口
 * f:链接地址
 * n:窗口的名称
 * w:窗口的宽度
 * h:窗口的高度
 * s:窗口是否有滚动条，1：有滚动条；0：没有滚动条
 */
function openWin(f,n,w,h,s){
	sb = s == "1" ? "1" : "0";
	l = (screen.width - w)/2;
	t = (screen.height - h)/2;
	sFeatures = "left="+ l +",top="+ t +",height="+ h +",width="+ w
			+ ",center=1,scrollbars=" + sb + ",status=0,directories=0,channelmode=0";
	openwin = window.open(f , n , sFeatures );
	if (!openwin.opener)
		openwin.opener = self;
	openwin.focus();
	return openwin;
}

/*
 * 打开删除窗口
 */
function openDeleteDialog(url,confirmString){
	var c = confirmString;
	if(c == null || c == ''){
		c = "你确认要删除记录吗？";
	}
	if(confirm(c)){
		return window.showModalDialog(url,"window123","dialogHeight:234px;dialogWidth:271px;resizable:no;help:yes;status:no;scroll:no");
	}
	return false;
}

/*
 * 删除记录
 */
function del(url,info){
	if(openDeleteDialog(url,info)){
		window.location.reload(true);
	}
}

/*
 * 校验checkbox
 */
function checkAll( chkName, checkboxName, pageSize ) {
    var src = event.srcElement;
	var chkN=eval("document.all."+chkName);

    if (src.checked) {
		chkN[0].checked = true;
		chkN[1].checked = true;
		for(var i=0; i&lt;pageSize; i++) {
			var chk = eval("document.all." + checkboxName + i);
			if (chk) {
				chk.checked=true;
			}
    	}
    } else {
		chkN[0].checked = false;
		chkN[1].checked = false;
    	for(var i=0; i&lt;pageSize; i++) {
			var chk = eval("document.all." + checkboxName + i);
			if(chk) {
				chk.checked=false;
			}
    	}
    }
}

/*
 * 
 */
function makePages(maxPage, selectedPage, selectName) {
	var sel=eval("document.all."+selectName);
	sel.length=0;
	for(var i=1; i&lt;=maxPage; i++) {
		sel.options[i]=new Option(i,i);
		if(sel.options[i]==selectedPage) {
			sel.options[i].selected=true;
		}
	}
}

/*
 * 替换字符串
 */
function replaceStr( str ) {
    var re="/( )/gi";
    str = str.replace(re,"");
    re="/\&lt;/gi";
    str = str.replace(re,"&lt;");

    return str;
}

/*
 * 去掉左边空格
 */
function LTrim(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1) {
        var j=0, i = s.length;
        while (j &lt; i && whitespace.indexOf(s.charAt(j)) != -1) {
           j++;
        }
        s = s.substring(j, i);
    }
    return s;
}

/*
 * 去掉右边空格
 */
function RTrim(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
        var i = s.length - 1;
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1) {
            i--;
        }
        s = s.substring(0, i+1);
    }
    return s;
}

/*
 * 去掉两边空格
 */
function Trim(str) {
    return RTrim(LTrim(str));
}

/*
 *
 */
function exeOperation( exePath ){
    var obj = new ActiveXObject("Microsoft.XMLHTTP");
    obj.open("post",exePath,false);
    obj.send();
    var res = obj.responseText;
    var rs = Trim(res);
    if (rs.indexOf('true',0) != -1) {
    	return true;
    } else {
        return false;
    }
}

/*
 *
 */
function exeValidate( exePath ){
    var obj = new ActiveXObject("Microsoft.XMLHTTP");
    obj.open("post",exePath,false);
    obj.send();
    var res = obj.responseText;
    var rs = Trim(res);
    if (rs.indexOf('validate_login_user',0) != -1) {
    	return true;
    } else {
        return false;
    }
}

/*
 * 显示
 */
function validate_date( exePath ) {
	 var obj = new ActiveXObject("Microsoft.XMLHTTP");
     obj.open("post",exePath,false);
     obj.send();
     var res = obj.responseText;
     var rs = Trim(res);
	 var begin_str = "&lt;!--begin-->";
	 var beginIndex = rs.indexOf(begin_str) + begin_str.length;
	 var endIndex   = rs.indexOf("&lt;!--end-->");
	 rs = ((beginIndex >= 0) && (endIndex >= 0)) ? rs.substring(beginIndex,endIndex) : "";
	 return Trim(rs);
}

/*
 * 校验是否数字
 */
function checkNumber(name, TempS) {
	for(Count=0;Count&lt;TempS.length;Count++) {
		TempChar=TempS.substring(Count,Count+1);
		RefString="0123456789";
		if (RefString.indexOf(TempChar,0)==-1) {
			alert("请输入数字");
			eval("document.all." + name).focus();
			return false;
		}
	}
}

/*
 * 是否有非法字符
 */
function chksafe(a){
	fibdn = new Array ("'" ,"\\");
	i=fibdn.length;
	j=a.length;
	for (ii=0; ii&lt;i; ii++) {
		for (jj=0; jj&lt;j; jj++) {
			temp1=a.charAt(jj);
			temp2=fibdn[ii];
			if (temp1==temp2){
				return false;
			}
		}
	}
	return true;
}

/*
 *
 */
function fucCheckNUM(NUM){
	var i,j,strTemp;
	strTemp="0123456789";
	if ( NUM.length== 0)  
		return false;
	for (i=0;i&lt;NUM.length;i++) {
		j=strTemp.indexOf(NUM.charAt(i));
		if (j==-1){
			return false;
		}
	}
	return true;
}

/*
 *
 */
function fucCheckLength(strTemp) {
	var i,sum;
	sum=0;
	for(i=0;i&lt;strTemp.length;i++) {
		if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)&lt;=255)) {
			sum=sum+1;
		} else {
			sum=sum+2;
		}
	}
	return sum;
}

/*
 *
 */
function chkElements( name, errMsg, max_length, lengthMsg ) {
    var el_name = eval("document.all." + name);
	var v = el_name.value;
	if (!chksafe(v)) {
		el_name.focus();
		alert(errMsg);
		return false;
	} else if (fucCheckLength(v) > max_length) {
		el_name.focus();
		alert(lengthMsg);
		return false;
	}
	return true;
}

/*
 * 校验空字符串
 */
function checkNullStr(name, msg) {
	var el_name = eval("document.all."+name);
	if (Trim(el_name.value).length==0) {
		alert(msg);
		el_name.focus();
		return false;
	}
	return	true;
}

/*
 * 显示日期控件
 */
function GetDate(nText,para){
	var v_url = para=="1"?"./common/data.html":"../../common/data.html";
  	var reVal = window.showModalDialog(v_url, 'data',"status:no;center:yes;scroll:no;resizable:no;dialogWidth:255px;dialogHeight:260px");
  	if (reVal != null) {
		var n = eval("document.all." + nText);
		n.value=reVal;
  	}
}

/*
 * 按比例缩小图片
 */
function DrawImage(ImgD,iwidth,iheight){
	var flag=false;
	var image=new Image();
	image.src=ImgD.src;
	if(image.width>0 && image.height>0){
		flag=true;
		if(image.width/image.height>= iwidth/iheight){
			if(image.width>iwidth){ 
				ImgD.width=iwidth;
				ImgD.height=(image.height*iwidth)/image.width;
			}else{
				ImgD.width=image.width; 
				ImgD.height=image.height;
			}
//			ImgD.alt=image.width+"×"+image.height;
		}else{
			if(image.height>iheight){ 
				ImgD.height=iheight;
				ImgD.width=(image.width*iheight)/image.height; 
			}else{
				ImgD.width=image.width; 
				ImgD.height=image.height;
			}
//			ImgD.alt=image.width+"×"+image.height;
		}
	}
	ImgD.style.visibility = "visible";
} 

/*
 * 回车键转为Tab键
 */
function enterTab(){
	if(event.keyCode==13){
		oElement = document.activeElement;
		if(oElement.tagName != "TEXTAREA" && oElement.type != "button")
			event.keyCode=9;
		return ;
   	}
}

/*
 *
 */
function objectEval(text) {
    text = text.replace(/\n/g, " ");
    text = text.replace(/\r/g, " ");
    if (text.match(/^\s*\{.*\}\s*$/)) {
        text = "[" + text + "]";
    }
    return eval(text)[0];
}

/*
 * 打开领导查询页面
 * action	- 查询的Action
 * method	- 调用的方法
 * title	- 标题message
 * name		- 员工选择域的name
 */
function openLeaderQuery(action,method,title,name){
	openWin("../../common/selectStaff.jsp?action="+action+"&method="+method+"&title="+title+"&name="+name,"public_leader_find_page","400","150");
}

/*
 * 第一行变色
 */
function chgColor(){
	var v_table = document.all["PowerTable"];
	var v_row = v_table.rows[1];
	var len = v_row.cells.length;
	for(var i=0;i&lt;len;i++){
		var v_cell = v_row.cells[i];
		v_cell.style.backgroundColor = "yellow";
	}
}

/*
 * 第一行变色
 */
function chgColor2(){
	var v_table = document.all["PowerTable"];
	var rows_count=v_table.rows.length;
	var v_row,v_cell,temp_len,len;
	var rowspan=0;
	
	//get rowspan
	if (v_table.rows.length > 1) {
		len = v_table.rows[1].cells.length;
		for (var r=2; r &lt; rows_count; r++) {
			v_row = v_table.rows[r];
			temp_len = v_row.cells.length;
			if (temp_len==len) {
				rowspan=r-1;
				break;
			}
		}
		
		rowspan=(rowspan>0) ? (rowspan+1) : rows_count;		
		for(var r=1; r &lt; rowspan; r++) {
			v_row=v_table.rows[r];
			for (var t=0; t &lt; v_row.cells.length; t++) {
				v_cell = v_row.cells[t];
				v_cell.style.backgroundColor = "yellow";
			}
		}			
	}	
}

/*
 * 添加页面载入后触发的事件
 */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof(window.onload) != "function") {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}
//adsName:名称,adsUrl:地址,sTime:时间(小时) add by wujie 2005.12.12
function PopAds(adsName,adsUrl,sTime,number,w,h,s)
{
	if(document.cookie.indexOf(adsName)==-1)
	{
		window.open(adsUrl,adsName);
		self.focus();
	            var expireDate = new Date();
	            var lefttime = 1000 * (3600 * sTime);
	            expireDate.setTime (expireDate.getTime() + lefttime);
	            document.cookie = adsName +"=yes" + "; expires=" + expireDate.toGMTString() +  ";";
	}
openWin(adsUrl,number,w,h,s);
}
document.onkeydown=enterTab;</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/214542#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jul 2008 13:03:45 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/214542</link>
        <guid>http://wangyu.javaeye.com/blog/214542</guid>
      </item>
      <item>
        <title>Quartz调度任务</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/213840" style="color:red;">http://wangyu.javaeye.com/blog/213840</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
package example.chapter9;

import java.util.Date;

public class CheckDiskFreeSpace {

    public void check() {
        // get disk free space:
        long freeSpace = Math.random() > 0.5 ? 100000000 : 200000000;
        System.out.println("Check disk free space at " + new Date());
        if(freeSpace&lt;100*1024*1024) { // &lt;100MB
            System.out.println("Warning! Low disk free space...");
        }
    }
}
</pre><br /><br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd"
>

    &lt;bean name="checkDiskFreeSpace" class="example.chapter9.CheckDiskFreeSpace" />

    &lt;bean name="checkDiskJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        &lt;property name="targetObject" ref="checkDiskFreeSpace" />
        &lt;property name="targetMethod" value="check" />
        &lt;property name="concurrent" value="false" />
    &lt;/bean>

    &lt;!-- Trigger -->

    &lt;!-- 周期性运行checkDiskJob -->
    &lt;bean id="repeatTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        &lt;property name="jobDetail" ref="checkDiskJob" />
        &lt;!-- 1分钟后启动 -->
        &lt;property name="startDelay" value="600" />
        &lt;!-- 5分钟检查一次 -->
        &lt;property name="repeatInterval" value="300" />
    &lt;/bean>



    &lt;!-- 启动调度器 -->

    &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        &lt;property name="triggers">
            &lt;list>
                &lt;ref bean="repeatTrigger" />
            &lt;/list>
        &lt;/property>
    &lt;/bean>

&lt;/beans>

</pre><br /><br /><pre name="code" class="java">package example.chapter9;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("config.xml");
    }

}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/213840#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 11:29:14 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/213840</link>
        <guid>http://wangyu.javaeye.com/blog/213840</guid>
      </item>
      <item>
        <title>配置邮件服务mail</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/213821" style="color:red;">http://wangyu.javaeye.com/blog/213821</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ApplicationContext.xml<br /><br /><pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd"
>
    &lt;!-- 配置MailSender -->

    &lt;bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        &lt;property name="host" value="smtp.gmail.com" />
        &lt;property name="port" value="465" />
        &lt;property name="username" value="livebookstore" />
        &lt;property name="password" value="LiVe-BoOkStOrE" />
        &lt;property name="javaMailProperties">
            &lt;props>
                &lt;prop key="mail.smtp.auth">true&lt;/prop>
                &lt;prop key="mail.smtp.starttls.enable">true&lt;/prop>
                &lt;prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory&lt;/prop>
            &lt;/props>
        &lt;/property>
    &lt;/bean>

&lt;/beans>
</pre><br /><pre name="code" class="java">
package example.chapter9;

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class Main {

    public static void main(String[] args) throws Exception {
        // 直接使用JavaMail API:
        Properties props = new Properties();
        // 设置SMTP服务器:
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.auth", "true");
        // 使用SSL安全连接:
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        send(
            props,
            "livebookstore", // Username
            "LiVe-BoOkStOrE", // Password
            "livebookstore@gmail.com", // From
            new String[] {"livebookstore2@gmail.com"}, // To
            "A test mail", // Subject
            "测试使用JavaMail API发送邮件" // Text
        );
//-----------------------------------------------------------------Spring发送文本文件----------------------------------------
        // 使用Spring提供的MailSender:
        ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
        JavaMailSender mailSender = (JavaMailSender)context.getBean("mailSender");
        // 创建一个纯文本邮件:
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setFrom("livebookstore@gmail.com");
        mail.setTo("livebookstore2@gmail.com");
        mail.setSubject("Another test mail");
        mail.setText("测试使用Spring MailSender发送邮件");
        // 发送:
        mailSender.send(mail);

//-----------------------------------------------------------------Spring发送带两个附件的邮件----------------------------------------
        // 发送Mime邮件:
        MimeMessage mime = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mime, true, "UTF-8");
        helper.setFrom("livebookstore@gmail.com");
        helper.setTo("livebookstore2@gmail.com");
        helper.setSubject("Test mime mail");
        // 设定为HTML格式:
        helper.setText("&lt;html>&lt;body>访问Live在线书店：&lt;br>"
                + "&lt;a href='http://www.livebookstore.net' target='_blank'>"
                + "&lt;img src='cid:logo'>&lt;/a>&lt;/body>&lt;/html>",
                true);
        helper.addInline("logo", new ClassPathResource("logo.gif"));
        helper.addAttachment("freebsd.gif", new ClassPathResource("freebsd.gif"));
        // 发送:
        mailSender.send(mime);
    }
//-------------------------------------------------------------普通邮件调用的方法-----------------------------------------------------
    public static void send(Properties props, final String username, final String password, String from, String[] to, String subject, String text) throws MessagingException {
        Session session = Session.getInstance(props, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        session.setDebug(true);
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setSubject(subject);
        message.setText(text);
        message.setSentDate(new Date());
        Address[] addressTo = new Address[to.length];
        for(int i=0; i&lt;to.length; i++) {
            addressTo[i] = new InternetAddress(to[i]);
        }
        message.setRecipients(Message.RecipientType.TO, addressTo);
        message.saveChanges();
        Transport.send(message, addressTo);
    }

}

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/213821#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 10:47:43 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/213821</link>
        <guid>http://wangyu.javaeye.com/blog/213821</guid>
      </item>
      <item>
        <title>JasperReports</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211883" style="color:red;">http://wangyu.javaeye.com/blog/211883</a>&nbsp;
          发表时间: 2008年07月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          生成*.Jasper文件<br /><pre name="code" class="java">import net.sf.jasperreports.engine.*;

public class MyCompile
{
    public static void main(String[] args) throws Exception
    {
		JasperCompileManager.compileReportToFile("static.jrxml" , "static.jasper");
		System.out.println("成功编译成JasperReport文件(*.jasper)");
		System.exit(0);
    }
}
</pre><br /><br />为报表填充数据 可以填充报表的数据源，参数等 。使用JasperFillManager类完成。生成*.jsprint文件<br /><pre name="code" class="java">import net.sf.jasperreports.engine.*;

public class MyFill
{
    public static void main(String[] args) throws Exception
    {
		//填充时，即使没有使用数据源，也必须指定一个新建的JREmptyDataSource实例，而不能直接使用null
		JasperFillManager.fillReportToFile("static.jasper" , null , new JREmptyDataSource());
		System.out.println("成功填充了一个报表文件(*.jrprint)");
		System.exit(0);
    }
}</pre><br />-------------------------------------------------------------------------------------------------------<br />用JFrame 来装载JRViewer，从而允许以窗口的方式查看<br /><br /><pre name="code" class="java">import net.sf.jasperreports.view.*;
import javax.swing.JFrame;

public class MyJRViewer
{
    public static void main(String[] args) throws Exception
    {
		JRViewer jr = new JRViewer("static.jrprint" , false);
		JFrame jf = new JFrame("报表预览");
		jf.add(jr);
		jf.pack();
		jf.setVisible(true);

    }
}</pre><br /><br />生成Excel文档，导入POI项目 <br /><pre name="code" class="java">import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.util.*;

public class MyExportExcel
{
    public static void main(String[] args) throws Exception
    {
		JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject("static.jrprint");
		JRXlsExporter exporter = new JRXlsExporter();
		//设置要导出的jasperPrint
		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "static.xls");
		exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
		
		exporter.exportReport();

		System.out.println("成功创建了一个XML文档");
		System.exit(0);
    }
}
</pre><br />导出PDF文件<br /><pre name="code" class="java">import net.sf.jasperreports.engine.*;

public class MyExportPdf
{
    public static void main(String[] args) throws Exception
    {
		JasperExportManager.exportReportToPdfFile("static.jrprint" , "static.pdf");
		System.out.println("成功创建了一个PDF文档");
		System.exit(0);
    }
}
</pre><br />导出xml文件<br /><pre name="code" class="java">import net.sf.jasperreports.engine.*;

public class MyExportXml
{
    public static void main(String[] args) throws Exception
    {
		JasperExportManager.exportReportToXmlFile("static.jrprint" , "static.xml" , true);
		System.out.println("成功创建了一个XML文档");
		System.exit(0);
    }
}
</pre><br /><br /><br />开发流程：<br />1，定义*.jrxml文件<br />2，使用JasperReports提供的JasperCompileManager工具编译。*.jrxml文件,生成*.jasper<br />3,使用JasperReports提供的JasperFileManager工具填充编译后的*.jasper文件<br />4，使用JasperExportManager 或 JRXxxExporter,将*.jrprint文件导出报表。
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211883#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 05 Jul 2008 16:55:34 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211883</link>
        <guid>http://wangyu.javaeye.com/blog/211883</guid>
      </item>
      <item>
        <title> ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211793" style="color:red;">http://wangyu.javaeye.com/blog/211793</a>&nbsp;
          发表时间: 2008年07月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span>Ireport+jasperreport</span><span style="font-family: 宋体;">是一款优秀的开源报表工具，支持数据库、</span><span>javabean</span><span style="font-family: 宋体;">等多种数据源支持，可以在</span><span>web</span><span style="font-family: 宋体;">上生成</span><span>html</span><span style="font-family: 宋体;">、</span><span>pdf</span><span style="font-family: 宋体;">、</span><span>xls</span><span style="font-family: 宋体;">、</span><span>rtf</span><span style="font-family: 宋体;">等多种格式的报表。下面是本人使用</span><span>javabean</span><span style="font-family: 宋体;">数据源实现报表的具体步骤</span></p>
<p>&nbsp;</p>
<p><span style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;">1.<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">实现环境</span><span> Ireport:1.3.2(jasperreport1.3.2)</span></p>
<p><span style="font-family: 宋体;">操作系统：</span><span>windowsXP</span></p>
<p><span style="font-family: 宋体;">程序环境：</span><span>eclipse3.1.1+myeclispe4.1.1</span></p>
<p><span style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;">2.<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">程序支持</span><span>:</span></p>
<p><span>a) </span><span style="font-family: 宋体;">使用</span><span>javabean</span><span style="font-family: 宋体;">做数据源，首先一定要有一个</span><span>javabean</span><span style="font-family: 宋体;">类来支持，</span><span>javabean</span><span style="font-family: 宋体;">中对每个成员变量都要一个</span><span>getter</span><span style="font-family: 宋体;">和</span><span>setter</span><span style="font-family: 宋体;">方法</span></p>
<p><span>b) </span><span style="font-family: 宋体;">使用</span><span>javabean</span><span style="font-family: 宋体;">做为数据源，为了在设计报表时能够看到数据，在程序中要为</span><span>ipreport</span><span style="font-family: 宋体;">提供一个静态方法，该方法返回上面定义</span><span>javabean</span><span style="font-family: 宋体;">的一个结果集，这个静态方法可能在程序运行中并不是必须的，但是在</span><span>ireport</span><span style="font-family: 宋体;">中它确实必须的，换句话说，这个静态方法是专门为</span><span>ipreport</span><span style="font-family: 宋体;">量身定做的，为了</span><span>ireport</span><span style="font-family: 宋体;">在设计报表时能够调用这个静态方法返回相应的</span><span>javabean</span><span style="font-family: 宋体;">结果集，以便设计的报表在放在</span><span>java</span><span style="font-family: 宋体;">项目中之前就能像使用</span><span>sql</span><span style="font-family: 宋体;">数据库数据源一样可以浏览。（刚开始还以为是必须程序中实现也要用静态方法，郁闷了好久，觉得这样太不方便了，后来醒悟，根本不是那么一回事）</span></p>
<p><span style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;">3.<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">在</span><span>ireport</span><span style="font-family: 宋体;">中设置</span><span>javabean</span><span style="font-family: 宋体;">连接</span></p>
<p><span style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;">a)<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">设置</span><span>classpath</span><span style="font-family: 宋体;">，把</span><span>java</span><span style="font-family: 宋体;">项目中的类路径加入到</span><span>classpath</span><span style="font-family: 宋体;">中，注意是</span><span>class</span><span style="font-family: 宋体;">文件而不是</span><span>java</span><span style="font-family: 宋体;">文件，因为</span><span>ireport</span><span style="font-family: 宋体;">是不会去编译</span><span>classpath</span><span style="font-family: 宋体;">中的</span><span>java</span><span style="font-family: 宋体;">文件的</span></p>
<p><span style="font-family: 宋体;">
<p style="text-indent: 2em;"><a href="http://img.blog.163.com/photo/DAEe61u-HDjh8BTCEBgJwA==/3428928166289368070.jpg"><img src="http://img.blog.163.com/photo/DAEe61u-HDjh8BTCEBgJwA==/3428928166289368070.jpg" border="0" alt="" /></a></p>
</span><span style="font-family: 宋体;"><a href="http://img.blog.163.com/photo/Lyg7of--MpvYLVK8y_FOKg==/431219664321336788.jpg" target="_blank"><img src="http://img.blog.163.com/photo/Lyg7of--MpvYLVK8y_FOKg==/431219664321336788.jpg" alt="" /></a></span><span style="font-family: Arial;"> </span></p>
<p>&nbsp;</p>
<p style="text-indent: 2em;"><span style="font-family: 宋体;">&nbsp; </span></p>
<p><span><span style="mso-list: Ignore;">b)<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">设置数据源</span></p>
<p><span style="font-family: 宋体;"><a href="http://img.blog.163.com/photo/SK8sZJGpumVWYBtM5ag49Q==/432627039204885277.jpg" target="_blank"><img src="http://img.blog.163.com/photo/SK8sZJGpumVWYBtM5ag49Q==/432627039204885277.jpg" alt="" /></a></span></p>
<p><span style="font-family: 宋体;"><a href="http://img.blog.163.com/photo/SfNGNrOQ-sDZ0bOHNITqsA==/436849163855544835.jpg"><img src="http://img.blog.163.com/photo/SfNGNrOQ-sDZ0bOHNITqsA==/436849163855544835.jpg" border="0" alt="" /></a></span></p>
<p><span style="font-family: 宋体;"><a href="http://img.blog.163.com/photo/SK8sZJGpumVWYBtM5ag49Q==/432627039204885277.jpg"></a><a href="http://img.blog.163.com/photo/DAEe61u-HDjh8BTCEBgJwA==/3428928166289368070.jpg"></a><a href="http://img.blog.163.com/photo/DAEe61u-HDjh8BTCEBgJwA==/3428928166289368070.jpg" target="_blank"></a></span><a href="http://img.blog.163.com/photo/5yjFldwQrk232tozvvsLuA==/435441788971991477.jpg" target="_blank"><img src="http://img.blog.163.com/photo/5yjFldwQrk232tozvvsLuA==/435441788971991477.jpg" alt="" /></a></p>
<p><a href="http://img.blog.163.com/photo/SfNGNrOQ-sDZ0bOHNITqsA==/436849163855544835.jpg" target="_blank"></a><a href="http://img.blog.163.com/photo/SK8sZJGpumVWYBtM5ag49Q==/432627039204885277.jpg" target="_blank"></a>&nbsp; </p>
<p><span><span style="mso-list: Ignore;">c)<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">报表查询</span></p>
<p><a href="http://img.blog.163.com/photo/tUFKpa7j0AGZXeOBfw3hsw==/432345564228174612.jpg" target="_blank"><img src="http://img.blog.163.com/photo/tUFKpa7j0AGZXeOBfw3hsw==/432345564228174612.jpg" alt="" /></a><a href="http://img.blog.163.com/photo/ffZ9PUdAEx9itRW1i3D_OA==/432627039204885310.jpg" target="_blank"><img src="http://img.blog.163.com/photo/ffZ9PUdAEx9itRW1i3D_OA==/432627039204885310.jpg" alt="" /></a></p>
<p>&nbsp; </p>
<p><span><span style="mso-list: Ignore;">4.<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">设计报表</span></p>
<p><span style="font-family: 宋体;">使用</span><span>javabean</span><span style="font-family: 宋体;">数据源来设计报表与使用</span><span>sql</span><span style="font-family: 宋体;">数据库做数据源是完全相同的，只不过它的</span><span>filed</span><span style="font-family: 宋体;">不是来自</span><span>sql</span><span style="font-family: 宋体;">语句，而是</span><span>javabean</span><span style="font-family: 宋体;">中的成员变量。本例是一个使用</span><span>javabean</span><span style="font-family: 宋体;">数据源制作的交叉表。</span></p>
<p><span style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;">5.<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">报表的预览</span></p>
<p><span style="font-family: 宋体;">报表预览时，</span><span>ireport</span><span style="font-family: 宋体;">会自动调用在数据源中设置的静态方法，返回</span><span>javabean</span><span style="font-family: 宋体;">的数据集。</span></p>
<p><span style="font-family: 宋体;">下面是交叉报表的html格式预览图片</span></p>
<p><a href="http://img.blog.163.com/photo/Fv9q24F2QBO7KwhKgcZOXQ==/431782614274758298.jpg" target="_blank"><img src="http://img.blog.163.com/photo/Fv9q24F2QBO7KwhKgcZOXQ==/431782614274758298.jpg" alt="" /></a></p>
<p>下图是设置外部程序选项</p>
<p><a href="http://img.blog.163.com/photo/k1M04Ky4tnNhka_KleMu4g==/1138566280794764305.jpg" target="_blank"><img src="http://img.blog.163.com/photo/k1M04Ky4tnNhka_KleMu4g==/1138566280794764305.jpg" alt="" /></a></p>
<p>&nbsp; </p>
<p><span>6. </span><span style="font-family: 宋体;">报表和项目的集成</span></p>
<p><span style="font-family: 宋体;">将做好的报表</span><span>.jasper</span><span style="font-family: 宋体;">文件拷贝到项目中，程序取得数据集后，调用最初设计的报表通用接口，即可在</span><span>web</span><span style="font-family: 宋体;">项目中显示这个交叉报表了。</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体;">以后几天会陆续整理出在开发时遇到的问题以及解决方法</span><span> </span></p>
<p><span style="font-family: Wingdings;"><span style="mso-list: Ignore;">l<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>ireport</span><span style="font-family: 宋体;">实现</span><span>javabean</span><span style="font-family: 宋体;">数据源的详细过程</span></p>
<p><span style="font-family: Wingdings;"><span style="mso-list: Ignore;">l<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">在</span><span>ireport(jasperreport)</span><span style="font-family: 宋体;">中使用</span><span>javabean</span><span style="font-family: 宋体;">数据源实现图文混排表、子报表</span></p>
<p><span style="font-family: Wingdings;"><span style="mso-list: Ignore;">l<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">解决</span><span>ireport</span><span style="font-family: 宋体;">输出</span><span>html</span><span style="font-family: 宋体;">页面是图片不显示以及图片不刷新问题</span></p>
<p><span style="font-family: Wingdings;"><span style="mso-list: Ignore;">l<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">解决</span><span>ireport1.2.8</span><span style="font-family: 宋体;">中插入的饼图直方图等图表在</span><span>pdf</span><span style="font-family: 宋体;">中不能显示中文的问题</span><span>&hellip;.</span></p>
<p><span style="font-size: 10.5pt; font-family: 宋体;">等等</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211793#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 05 Jul 2008 08:00:30 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211793</link>
        <guid>http://wangyu.javaeye.com/blog/211793</guid>
      </item>
      <item>
        <title>使用代理解决SourceForge.net不能访问</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211751" style="color:red;">http://wangyu.javaeye.com/blog/211751</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; SourceForge不能访问了，这个网站最近莫名其妙的被封了。</p>
<p>能过FireFox的代理可以实现访问，可以安装Gladder这个插件，地址如下：</p>
<p><a href="https://addons.mozilla.org/zh-CN/firefox/addon/2864">https://addons.mozilla.org/zh-CN/firefox/addon/2864</a></p>
<p>兼容FireFox3.0，装上这个之后可以访问中文维基百科，在FireFox的右下角会出现这个图标 ，如下图中的梯子形状的图标。</p>
<p align="center"><img class="blogimg" src="http://hiphotos.baidu.com/huqiwen/pic/item/721c5d6014fde9ca8db10dfc.jpg" border="0" alt="" /></p>
<p align="left">安装完之后，点右键，在选项的&ldquo;自定义被封站点列表&rdquo;中加入SourceForge.net，就可以通过代理访问了，这个代理是自动的，不需要自己手动寻找代理服务器。</p>
<p align="center"><img class="blogimg" src="http://hiphotos.baidu.com/huqiwen/pic/item/277d342a223aa72d5343c1ce.jpg" border="0" alt="" /></p>
<p align="left"><span style="color: #ff0000;">PS:这样仅仅是可以访问罢了，如何下载上面的项目，请参看：</span><span><a href="../../../blog/211750">http://wangyu.javaeye.com/blog/211750</a></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211751#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 18:46:20 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211751</link>
        <guid>http://wangyu.javaeye.com/blog/211751</guid>
      </item>
      <item>
        <title>下载被封的SourceForge.net上面的源码</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211750" style="color:red;">http://wangyu.javaeye.com/blog/211750</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; SourceForge.net被封了，虽然可以通过代理访问，但是上面的源代码和开源的项目还是下载不了。今天早上用Google搜索文件时，无意中发现了一个可以下载SourceForge.net上面的源码和项目的网站，这是SourceForge.net的一个镜像网站。</p>
<p><a href="http://www.mirrorservice.org/mirrors">http://www.mirrorservice.org/mirrors</a> 这是镜像的主页，打开后可以看到里面有许多网站的镜像，其他的我们就不管了，我们只管SourceForge.net这个网站的镜像，地址如下，可以直接打开下面的地址就OK了，建议使用FireFox访问，速度明显快很多~~</p>
<p><a href="http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/%5Bpeek%5D">http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/%5Bpeek%5D</a></p>
<p>这个地方是按字典目录时的排列的，如我要找hibernate项目，就在上面点H，如下图</p>
<p align="center"><img class="blogimg" src="http://hiphotos.baidu.com/huqiwen/pic/item/76237aeca254f3c42f2e2193.jpg" border="0" alt="" /></p>
<p align="left">下面又会出现一个以H开头的二级目录，再点hi，就可以在下面的目录中看到了，如下图，其他的项目搜索方法是一样的！</p>
<div><img class="blogimg" src="http://hiphotos.baidu.com/huqiwen/pic/item/433d00e9cbbde42ab90e2d64.jpg" border="0" alt="" /></div>
<p align="left"><span style="font-size: small;">hibernate-3.2.6的下载地址如下：</span></p>
<p align="left"><a href="http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/hi/hibernate/hibernate-3.2.6.ga.zip">http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/hi/hibernate/hibernate-3.2.6.ga.zip</a></p>
<p align="left"><br /><span style="font-size: small; background-color: #ffffff;">spring-framework-2.5.5-with-docs的下载地址如下：</span></p>
<p align="left"><a href="http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/s/sp/springframework/spring-framework-2.5.5-with-docs.zip">http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/s/sp/springframework/spring-framework-2.5.5-with-docs.zip</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211750#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 18:45:30 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211750</link>
        <guid>http://wangyu.javaeye.com/blog/211750</guid>
      </item>
      <item>
        <title>使用JFreeChart生成带交互功能的统计图例　</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211274" style="color:red;">http://wangyu.javaeye.com/blog/211274</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          a.jsp<br />代码：<br /><pre name="code" class="html">&lt;%@ page language="java"
    import="org.jfree.chart.*,org.jfree.data.general.DefaultPieDataset,org.jfree.chart.plot.PiePlot3D,java.awt.Font,org.jfree.chart.JFreeChart,org.jfree.chart.title.TextTitle,org.jfree.chart.title.LegendTitle,org.jfree.chart.labels.StandardPieToolTipGenerator,org.jfree.chart.urls.StandardPieURLGenerator,org.jfree.chart.entity.StandardEntityCollection,java.io.PrintWriter,org.jfree.chart.servlet.ServletUtilities"
    pageEncoding="utf-8"%>
&lt;%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
    &lt;head>
        &lt;base href="&lt;%=basePath%>">

        &lt;title>My JSP 'a.jsp' starting page&lt;/title>

        &lt;meta http-equiv="pragma" content="no-cache">
        &lt;meta http-equiv="cache-control" content="no-cache">
        &lt;meta http-equiv="expires" content="0">
        &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        &lt;meta http-equiv="description" content="This is my page">
        &lt;!--
    &lt;link rel="stylesheet" type="text/css" href="styles.css">
    -->
    
    &lt;/head>
    &lt;%
            DefaultPieDataset data = new DefaultPieDataset();
            data.setValue("Spring2.0宝典", 47000);
            data.setValue("轻量级J2EE企业应用实战", 38000);
            data.setValue("基于J2EE的Ajax宝典", 31000);
            data.setValue("Ajax in Action", 25000);
            data.setValue("JavaScript权威指南", 29000);
            PiePlot3D plot = new PiePlot3D(data);
            plot.setLabelFont(new Font("隶书", Font.BOLD, 16));
            JFreeChart chart = new JFreeChart("",
                    JFreeChart.DEFAULT_TITLE_FONT, plot, true);
            chart.setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC,
                    22)));
            LegendTitle legend = chart.getLegend(0);
            legend.setItemFont(new Font("宋体", Font.BOLD,18));

            plot.setToolTipGenerator(new StandardPieToolTipGenerator());
            plot.setURLGenerator(new StandardPieURLGenerator("jfreechart/b.jsp"));
            StandardEntityCollection entityCollection = new StandardEntityCollection();
            ChartRenderingInfo info = new ChartRenderingInfo(entityCollection);
            PrintWriter pw = new PrintWriter(out);
            String filename = ServletUtilities.saveChartAsPNG(chart, 720, 450,
                    info, null);
            ChartUtilities.writeImageMap(pw, "map0", info, false);
        %>
    &lt;body>
        
        &lt;img src="DisplayChart?filename=&lt;%=filename%>" width="720"
            height="450" usemap="#map0" 　/>
    &lt;/body>
&lt;/html></pre><br /><br />b.jsp<br />代码：<br /><pre name="code" class="html">&lt;%@ page language="java"
    import="org.jfree.chart.*,java.awt.Font,org.jfree.chart.JFreeChart,org.jfree.chart.title.TextTitle,org.jfree.chart.title.LegendTitle,org.jfree.chart.servlet.ServletUtilities,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.plot.CategoryPlot,org.jfree.chart.axis.NumberAxis,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.CategoryLabelPositions,org.jfree.data.category.CategoryDataset,org.jfree.data.category.DefaultCategoryDataset"
    pageEncoding="UTF-8"%>

&lt;%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
    &lt;head>
        &lt;base href="&lt;%=basePath%>">

        &lt;title>My JSP 'b.jsp' starting page&lt;/title>

        &lt;meta http-equiv="pragma" content="no-cache">
        &lt;meta http-equiv="cache-control" content="no-cache">
        &lt;meta http-equiv="expires" content="0">
        &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        &lt;meta http-equiv="description" content="This is my page">
        &lt;!--
    &lt;link rel="stylesheet" type="text/css" href="styles.css">
    -->

    &lt;/head>

    &lt;body>
        &lt;%
           
            CategoryDataset dataset;
            String queryString = request.getQueryString();
            queryString = java.net.URLDecoder.decode(queryString, "UTF-8");
            String category = null;
            String[] queryStrings=queryString.split("&");
            for (int i = 0; i &lt; queryStrings.length; i++) {
            String[] nameValue = queryStrings[i].split("=");
            category = nameValue[0].equals("category") ? nameValue[1]
            : category;
            } 
            
            String subTitle = "";
            if (category.equals("Spring2.0宝典")
                    || category.equals("轻量级J2EE企业应用实战")
                    || category.equals("基于J2EE的Ajax宝典")) {
                dataset = leeGetDataSet();
                subTitle = "作者李刚的";
            } else {
                dataset = getDataSet();
                subTitle = "其它";
            }
            String title = subTitle + "图书的销售情况";
            JFreeChart chart = ChartFactory.createBarChart3D(title, "月份", "销量",
                    dataset, PlotOrientation.VERTICAL, true, false, false);
            chart.setTitle(new TextTitle(title, new Font("黑体", Font.ITALIC,
                    22)));
            LegendTitle legend = chart.getLegend(0);
            legend.setItemFont(new Font("宋体", Font.BOLD, 20));//设置图例的字体
            CategoryPlot plot = (CategoryPlot) chart.getPlot();

            CategoryAxis categoryAxis = plot.getDomainAxis();//取得横轴
            categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));//设置横轴显示标签的字体
            categoryAxis
                    .setCategoryLabelPositions(CategoryLabelPositions.UP_45);//分类标签以４５度倾斜
            categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));//分类标签字体

            NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();//取得纵轴
            numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));

            String filename = ServletUtilities.saveChartAsPNG(chart, 650, 390,
                    null, session);
        %>

        &lt;img src="DisplayChart?filename=&lt;%=filename%>" width="720"
            height="450" border="0" 　/>

    &lt;/body>
    &lt;%!private static CategoryDataset getDataSet() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(47000, "Ajax in Action", "06年10月");
        dataset.addValue(38000, "Ajax in Action", "06年11月");
        dataset.addValue(31000, "Ajax in Action", "06年12月");
        dataset.addValue(25000, "Ajax in Action", "07年01月");
        dataset.addValue(45000, "Ajax in Action", "07年02月");
        dataset.addValue(28000, "Ajax in Action", "07年03月");
        dataset.addValue(42000, "JavaScript权威指南", "06年10月");
        dataset.addValue(31000, "JavaScript权威指南", "06年11月");
        dataset.addValue(41000, "JavaScript权威指南", "06年12月");
        dataset.addValue(35000, "JavaScript权威指南", "07年01月");
        dataset.addValue(25000, "JavaScript权威指南", "07年02月");
        dataset.addValue(18000, "JavaScript权威指南", "07年03月");
        return dataset;
    }

    private static CategoryDataset leeGetDataSet() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(42000, "Spring2.0宝典", "06年10月");
        dataset.addValue(18000, "Spring2.0宝典", "06年11月");
        dataset.addValue(51000, "Spring2.0宝典", "06年12月");
        dataset.addValue(25000, "Spring2.0宝典", "07年01月");
        dataset.addValue(35000, "Spring2.0宝典", "07年02月");
        dataset.addValue(26000, "Spring2.0宝典", "07年03月");
        dataset.addValue(47000, "轻量级J2EE企业应用实战", "06年10月");
        dataset.addValue(38000, "轻量级J2EE企业应用实战", "06年11月");
        dataset.addValue(31000, "轻量级J2EE企业应用实战", "06年12月");
        dataset.addValue(25000, "轻量级J2EE企业应用实战", "07年01月");
        dataset.addValue(25000, "轻量级J2EE企业应用实战", "07年02月");
        dataset.addValue(25000, "轻量级J2EE企业应用实战", "07年03月");
        dataset.addValue(43000, "基于J2EE的Ajax宝典", "06年10月");
        dataset.addValue(28000, "基于J2EE的Ajax宝典", "06年11月");
        dataset.addValue(37000, "基于J2EE的Ajax宝典", "06年12月");
        dataset.addValue(20000, "基于J2EE的Ajax宝典", "07年01月");
        dataset.addValue(35000, "基于J2EE的Ajax宝典", "07年02月");
        dataset.addValue(15000, "基于J2EE的Ajax宝典", "07年03月");
        return dataset;
    }%>

&lt;/html></pre><br />web.xml<br />代码：<br /><pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    &lt;servlet>
        &lt;servlet-name>DisplayChart&lt;/servlet-name>
        &lt;servlet-class>org.jfree.chart.servlet.DisplayChart&lt;/servlet-class>    
    &lt;/servlet>
    &lt;servlet-mapping>
        &lt;servlet-name>DisplayChart&lt;/servlet-name>
        &lt;url-pattern>/DisplayChart&lt;/url-pattern>
    &lt;/servlet-mapping>
    
&lt;/web-app></pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211274#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 22:05:09 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211274</link>
        <guid>http://wangyu.javaeye.com/blog/211274</guid>
      </item>
      <item>
        <title>使用JFreeChart生成时间顺序图实例（生成图片）</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211272" style="color:red;">http://wangyu.javaeye.com/blog/211272</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package com.lhhc.jfreechart.test;

import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

public class TimeChartDemo {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        JFreeChart chart = ChartFactory.createTimeSeriesChart("图书销量统计图", "图书",
                "销量", getDataSet(), true, false, false);
        LegendTitle legend = chart.getLegend(0);
        // 修改图例的字体
        legend.setItemFont(new Font("宋体", Font.BOLD, 14));

        // 设置标题
        chart
                .setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC,
                        22)));
        XYPlot plot = (XYPlot) chart.getPlot();
        ValueAxis categoryAxis = plot.getDomainAxis();
        categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
        categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));
        NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();// 取得纵轴
        numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));// 设置纵轴显示标签字体
        FileOutputStream fos = null;
        fos = new FileOutputStream("book2.jpg");
        ChartUtilities.writeChartAsJPEG(fos, 1, chart, 800, 600, null

        );
        fos.close();

    }

    private static XYDataset getDataSet() {
        TimeSeries spring = new TimeSeries("Spring2.0宝典", Month.class);
        spring.add(new Month(10, 2006), 3400);
        spring.add(new Month(11, 2006), 2700);
        spring.add(new Month(12, 2006), 0);
        spring.add(new Month(1, 2007), 1800);
        spring.add(new Month(2, 2007), 2200);

        TimeSeries lightWeight = new TimeSeries("轻量级J2EE企业级应用实战", Month.class);
        lightWeight.add(new Month(10, 2006), 2800);
        lightWeight.add(new Month(11, 2006), 3700);
        lightWeight.add(new Month(12, 2006), 0);
        lightWeight.add(new Month(1, 2007), 2100);
        lightWeight.add(new Month(2, 2007), 1100);

        TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.addSeries(spring);
        dataset.addSeries(lightWeight);
        return dataset;

    }

}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211272#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 22:03:21 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211272</link>
        <guid>http://wangyu.javaeye.com/blog/211272</guid>
      </item>
      <item>
        <title>使用JFreeChart生成复杂柱状图实例（生成图片）</title>
        <author>wangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangyu.javaeye.com">wangyu</a>&nbsp;
          链接：<a href="http://wangyu.javaeye.com/blog/211270" style="color:red;">http://wangyu.javaeye.com/blog/211270</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">package com.lhhc.jfreechart.test;

import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarChart3DDemo1 {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException{
        JFreeChart chart=ChartFactory.createBarChart3D(
                "图书销量统计图",
                "图书",//目录轴的显示标签
                "销量",//数值轴的显示标签
                getDataSet(),
                PlotOrientation.VERTICAL,//设置图表方向
                true,//复杂柱状图
                false,
                false        
        );
        //取得统计图表的第一个图例
        LegendTitle legend =chart.getLegend(0);
        //修改图例的字体
        legend.setItemFont(new Font("宋体",Font.BOLD,14));
        
        
        //设置标题
        chart.setTitle(new TextTitle("图书销量统计图",new Font("黑体",Font.ITALIC,22)));
        //设置图表部分
        CategoryPlot plot=(CategoryPlot)chart.getPlot();
        
        CategoryAxis categoryAxis=plot.getDomainAxis();//取得横轴
        categoryAxis.setLabelFont(new Font("宋体",Font.BOLD,22));//设置横轴显示标签的字体
        categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//分类标签以４５度倾斜
        categoryAxis.setTickLabelFont(new Font("宋体",Font.BOLD,18));//分类标签字体
        
        NumberAxis numberAxis=(NumberAxis)plot.getRangeAxis();//取得纵轴
        numberAxis.setLabelFont(new Font("宋体",Font.BOLD,42));//设置纵轴显示标签字体
        FileOutputStream fos=null;
        fos=new FileOutputStream("book2.jpg");
        ChartUtilities.writeChartAsJPEG(
                fos,
                1,
                chart,
                800,
                600,
                null
        
        );
        fos.close();
    }
    private static CategoryDataset getDataSet(){
        DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        dataset.addValue(47000,"北京", "Spring2.0宝典");
        dataset.addValue(38000,"北京","轻量级的J@EEE");
        dataset.addValue(38000, "北京", "JavaScript权威指南");
        dataset.addValue(25000, "北京", "Ajax In Action");
        dataset.addValue(37000,"上海", "Spring2.0宝典");
        dataset.addValue(37000,"上海","轻量级的J@EEE");
        dataset.addValue(24000, "上海", "JavaScript权威指南");
        dataset.addValue(26000, "上海", "Ajax In Action");
        dataset.addValue(17000,"广州", "Spring2.0宝典");
        dataset.addValue(48000,"广州","轻量级的J@EEE");
        dataset.addValue(21000, "广州", "JavaScript权威指南");
        dataset.addValue(35000, "广州", "Ajax In Action");
        dataset.addValue(46000,"长春", "Spring2.0宝典");
        dataset.addValue(21000,"长春","轻量级的J@EEE");
        dataset.addValue(22000, "长春", "JavaScript权威指南");
        dataset.addValue(22000, "长春", "Ajax In Action");
        return dataset;
        
        
    }

}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://wangyu.javaeye.com/blog/211270#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 22:02:42 +0800</pubDate>
        <link>http://wangyu.javaeye.com/blog/211270</link>
        <guid>http://wangyu.javaeye.com/blog/211270</guid>
      </item>
      <item>
        <title>使用JFreeChart生成柱状图实