<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://x-spirit.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fx-spirit.spaces.live.com%2fcategory%2f%e8%ae%a1%e7%ae%97%e6%9c%ba%e4%b8%8e%2bInternet%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>X-Spirit: 计算机与 Internet</title><description /><link>http://X-Spirit.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%25E8%25AE%25A1%25E7%25AE%2597%25E6%259C%25BA%25E4%25B8%258E%2bInternet</link><language>en-US</language><pubDate>Thu, 25 Sep 2008 12:45:29 GMT</pubDate><lastBuildDate>Thu, 25 Sep 2008 12:45:29 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://X-Spirit.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-3743893519549122624</live:id><live:alias>X-Spirit</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Quartz调度框架应用总结（续2）</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!554.entry</link><description>&lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;好，说了这么多，最后让我们来看看如何在&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用中使用&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;由于&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的配置相当的个性化，所以，在&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用中，我们可以通过一个&lt;/span&gt;&lt;span lang=EN-US&gt;quartz.properties&lt;/span&gt;&lt;span style="font-family:宋体"&gt;文件来配置&lt;/span&gt;&lt;span lang=EN-US&gt;QuartzServlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。不过之前让我们先来看看&lt;/span&gt;&lt;span lang=EN-US&gt;web.xml&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中如何配置&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;table style="margin-left:15.75pt;border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p style="text-align:center" align=center&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;web.xml&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-top-width:1pt;border-right:black 1pt solid;padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;border-top-color:black;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&amp;lt;servlet&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;servlet-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             QuartzInitializer&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/servlet-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;display-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             Quartz Initializer Servlet&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/display-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;servlet-class&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             org.quartz.ee.servlet.QuartzInitializerServlet&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/servlet-class&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;load-on-startup&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             -1&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/load-on-startup&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-name&amp;gt;config-file&amp;lt;/param-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-value&amp;gt;/quartz.properties&amp;lt;/param-value&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-name&amp;gt;shutdown-on-unload&amp;lt;/param-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-name&amp;gt;start-scheduler-on-load&amp;lt;/param-name&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/init-param&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    &amp;lt;/servlet&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;这里，&lt;/span&gt;&lt;span lang=EN-US&gt;load-on-startup&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是指定&lt;/span&gt;&lt;span lang=EN-US&gt;QuartzServlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是否随应用启动，&lt;/span&gt;&lt;span lang=EN-US&gt;-1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表示否，正数表示随应用启动，数值越小，则优先权越高。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;初始化参数中，&lt;/span&gt;&lt;span lang=EN-US&gt;config-file&lt;/span&gt;&lt;span style="font-family:宋体"&gt;里面可以指定&lt;/span&gt;&lt;span lang=EN-US&gt;QuartzServlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的配置文件，这里我们用的是&lt;/span&gt;&lt;span lang=EN-US&gt;quartz.properties&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;shutdown-on-unload&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，表示是否在卸载应用时同时停止调度，该参数推荐&lt;/span&gt;&lt;span lang=EN-US&gt;true&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，否则你的&lt;/span&gt;&lt;span lang=EN-US&gt;tomcat&lt;/span&gt;&lt;span style="font-family:宋体"&gt;进程可能停不下来。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;start-scheduler-on-load&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，表示应用加载时就启动调度器，如果为&lt;/span&gt;&lt;span lang=EN-US&gt;false&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，则&lt;/span&gt;&lt;span lang=EN-US&gt;quartz.properties&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中指定的调度器在用户访问这个&lt;/span&gt;&lt;span lang=EN-US&gt;Servlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;之后才会加载，在此之前，如果你通过&lt;/span&gt;&lt;span lang=EN-US&gt;ServletContext&lt;/span&gt;&lt;span style="font-family:宋体"&gt;查找&lt;/span&gt;&lt;span lang=EN-US&gt;SchedulerFactory&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是可以找到的，但是要得到具体的&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，那么你一定会发现&lt;/span&gt;&lt;span lang=EN-US&gt;Jvm&lt;/span&gt;&lt;span style="font-family:宋体"&gt;抛出了一个&lt;/span&gt;&lt;span lang=EN-US&gt;NullPointerExcetion&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;下面就来看看&lt;/span&gt;&lt;span lang=EN-US&gt;quartz.properties&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的真面目。&lt;/span&gt;&lt;/font&gt; &lt;table style="margin-left:15.75pt;border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p style="text-align:center" align=center&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;quartz.properties&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-top-width:1pt;border-right:black 1pt solid;padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;border-top-color:black;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.scheduler.instanceName = PushDBScheduler&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.scheduler.instanceId = one&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.threadPool.threadCount = 4&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.threadPool.threadPriority = 4&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;org.quartz.plugin.jobInitializer.fileName = quartz_job.xml&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;我想不用多说，大家都看出来了，首先配置了基本的&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例名，并分配了&lt;/span&gt;&lt;span lang=EN-US&gt;ID&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，然后为这个调度器设定了线程池，后面是初始化插件。初始化插件是&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;非常实用的功能，你可以用这个功能来实现&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的扩展性。这里配置的插件是读取&lt;/span&gt;&lt;span lang=EN-US&gt;job XML&lt;/span&gt;&lt;span style="font-family:宋体"&gt;文件，让调度器自动载入&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。这个插件现在支持读取多个&lt;/span&gt;&lt;span lang=EN-US&gt;job XML&lt;/span&gt;&lt;span style="font-family:宋体"&gt;文件，但是我现在还没有试过，感兴趣的读者可以自己尝试。另外就是有一个&lt;/span&gt;&lt;span lang=EN-US&gt;scanInterval&lt;/span&gt;&lt;span style="font-family:宋体"&gt;属性，表示每隔几秒自动扫描一次&lt;/span&gt;&lt;span lang=EN-US&gt;job XML&lt;/span&gt;&lt;span style="font-family:宋体"&gt;文件，我现在也没有试过，感兴趣的读者可以自己试验一下。注意，该参数设定为&lt;/span&gt;&lt;span lang=EN-US&gt;0&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表示不扫描。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;最后，我们来看看&lt;/span&gt;&lt;span lang=EN-US&gt;job XML&lt;/span&gt;&lt;span style="font-family:宋体"&gt;文件，这里以&lt;/span&gt;&lt;span lang=EN-US&gt;quartz_job.xml&lt;/span&gt;&lt;span style="font-family:宋体"&gt;为例&lt;/span&gt;&lt;/font&gt; &lt;table style="border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p style="text-align:center" align=center&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;quartz_job.xml&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-top-width:1pt;border-right:black 1pt solid;padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;border-top-color:black;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&amp;lt;quartz&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    &amp;lt;job&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;job-detail&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;name&amp;gt;ScanItemsInDB&amp;lt;/name&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;group&amp;gt;Scanning&amp;lt;/group&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;job-class&amp;gt;com.testquartz.ScanDB&amp;lt;/job-class&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;job-data-map allows-transient-data=&amp;quot;true&amp;quot;&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                 &amp;lt;entry&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                  &amp;lt;key&amp;gt;testmode&amp;lt;/key&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                  &amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                 &amp;lt;/entry&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;/job-data-map&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/job-detail&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;trigger&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;cron&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                &amp;lt;name&amp;gt;t1&amp;lt;/name&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                &amp;lt;group&amp;gt; Scanning &amp;lt;/group&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                &amp;lt;job-name&amp;gt; ScanItemsInDB &amp;lt;/job-name&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                &amp;lt;job-group&amp;gt; Scanning &amp;lt;/job-group&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                &amp;lt;cron-expression&amp;gt;0 0/5 * * * ?&amp;lt;/cron-expression&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &amp;lt;/cron&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        &amp;lt;/trigger&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    &amp;lt;/job&amp;gt;  &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&amp;lt;/quartz&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span style="font-family:宋体"&gt;&lt;font color="#ffffff"&gt;这个文件真是非常显而易见了，我就不多说了，大家自己研究吧。&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;然后你只要自己写一下&lt;/span&gt;&lt;span lang=EN-US&gt;ScanDB&lt;/span&gt;&lt;span style="font-family:宋体"&gt;这个类就可以了。&lt;/span&gt;&lt;/font&gt; &lt;table style="border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p style="text-align:center" align=center&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;ScanDB.java&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-top-width:1pt;border-right:black 1pt solid;padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:426.1pt;border-top-color:black;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=710&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;public class ScanDB implements Job {&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;     public void execute(JobExecutionContext context) throws JobExecutionException {&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;          //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;你的代码&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;     }&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;注意&lt;/span&gt;&lt;span lang=EN-US&gt;JobExecutionContext&lt;/span&gt;&lt;span style="font-family:宋体"&gt;这个类。这个类是用来存取任务执行时的相关信息的，从中我们可以获取当前作业的&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;等等。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;当然，&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;也有对应的&lt;/span&gt;&lt;span lang=EN-US&gt;SchedulerContext&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，具体的用途很像&lt;/span&gt;&lt;span lang=EN-US&gt;ServletContext&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。有兴趣的读者自己研究吧。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;另外就是可以提供一个提示：在一个作业执行的时候，你就可以设定另外一个调度器，去执行另一个&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，这样你可以每个一段时间扫描一下数据库，然后看一看数据库里有没有下一个时间段待发的邮件，然后调用一个新的调度器实例，以便在指定的发送时间将其发送出去。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;好了，&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的相关知识就总结到这里。谢谢大家。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;a href="http://x-spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!553.entry" target="_blank"&gt;上一篇 Quartz调度框架应用总结（续1）&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+Quartz%e8%b0%83%e5%ba%a6%e6%a1%86%e6%9e%b6%e5%ba%94%e7%94%a8%e6%80%bb%e7%bb%93%ef%bc%88%e7%bb%ad2%ef%bc%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!554.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!554.entry</guid><pubDate>Thu, 25 Sep 2008 11:57:24 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!554/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!554.entry#comment</wfw:comment><dcterms:modified>2008-09-25T12:07:52Z</dcterms:modified></item><item><title>Quartz调度框架应用总结（续1）</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!553.entry</link><description>&lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font color="#ffffff"&gt;三．触发器&lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;       Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是一个抽象类，它有三个子类：&lt;/span&gt;&lt;span lang=EN-US&gt;SimpleTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，&lt;/span&gt;&lt;span lang=EN-US&gt;CronTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;NthIncludedDayTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。前两个比较常用。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;span lang=EN-US&gt;SimpleTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：这是一个非常简单的类，我们可以定义作业的触发时间，并选择性的设定重复间隔和重复次数。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;2&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;span lang=EN-US&gt;CronTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：这个触发器的功能比较强大，而且非常灵活，但是你需要掌握有关&lt;/span&gt;&lt;span lang=EN-US&gt;Cron&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表达式的知识。如果你是一个&lt;/span&gt;&lt;span lang=EN-US&gt;Unix&lt;/span&gt;&lt;span style="font-family:宋体"&gt;系统爱好者，你很可能已经具备这种知识，但是如果你不了解&lt;/span&gt;&lt;span lang=EN-US&gt;Cron&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表达式，请看下面的&lt;/span&gt;&lt;span lang=EN-US&gt;Cron&lt;/span&gt;&lt;span style="font-family:宋体"&gt;详解：&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表达式由&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;6&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;或&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;7&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;个由空格分隔的时间字段组成，如表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;所示：&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt;text-align:center" align=center&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1 Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表达式时间字段&lt;/span&gt;&lt;/font&gt; &lt;div align=center&gt; &lt;table style="border-right:#cccccc 1pt outset;border-top:#cccccc 1pt outset;border-left:#cccccc 1pt outset;border-bottom:#cccccc 1pt outset" cellspacing=1 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;位置&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;时间域名&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;允许值&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;允许的特殊字符&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;1&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;秒&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;0-59&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * /&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;2&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;分钟&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;0-59&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * /&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;3&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;小时&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;0-23&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * /&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;4&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;日期&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;1-31&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * ? / L W C &lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;5&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;月份&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;1-12&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * /&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;6&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;星期&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;1-7&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * ? / L C #&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:32.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=54&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;7&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:49.2pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=82&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;年&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;可选&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;)&lt;/span&gt;&lt;/font&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:79.8pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=133&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;空值&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1970-2099&lt;/span&gt;&lt;/font&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:174pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=290&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;, - * /&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表达式的时间字段除允许设置数值外，还可使用一些特殊的字符，提供列表、范围、通配符等功能，细说如下：&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;星号&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(*)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：可用在所有字段中，表示对应时间域的每一个时刻，例如，&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;*&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在分钟字段时，表示&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每分钟&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;问号（&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;?&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;）：该字符只在日期和星期字段中使用，它通常指定为&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;无意义的值&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，相当于点位符；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;减号&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(-)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：表达一个范围，如在小时字段中使用&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“10-12”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，则表示从&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;12&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点，即&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10,11,12&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;逗号&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(,)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：表达一个列表值，如在星期字段中使用&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“MON,WED,FRI”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，则表示星期一，星期三和星期五；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;斜杠&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(/)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;x/y&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表达一个等步长序列，&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;x&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;为起始值，&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;y&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;为增量步长值。如在分钟字段中使用&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;0/15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，则表示为&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;0,15,30&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;45&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;秒，而&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5/15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在分钟字段中表示&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5,20,35,50&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，你也可以使用&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;*/y&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，它等同于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;0/y&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;L&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：该字符只在日期和星期字段中使用，代表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“Last”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;的意思，但它在两个字段中意思不同。&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;L&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在日期字段中，表示这个月份的最后一天，如一月的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;31&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号，非闰年二月的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;28&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号；如果&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;L&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;用在星期中，则表示星期六，等同于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;7&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;。但是，如果&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;L&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;出现在星期字段里，而且在前面有一个数值&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;X&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，则表示&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;这个月的最后&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;X&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，例如，&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;6L&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示该月的最后星期五；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;W&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：该字符只能出现在日期字段里，是对前导日期的修饰，表示离该日期最近的工作日。例如&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15W&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示离该月&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号最近的工作日，如果该月&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号是星期六，则匹配&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号星期五；如果&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;日是星期日，则匹配&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;16&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号星期一；如果&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号是星期二，那结果就是&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号星期二。但必须注意关联的匹配日期不能够跨月，如你指定&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1W&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，如果&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号是星期六，结果匹配的是&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;3&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;号星期一，而非上个月最后的那天。&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;W&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;字符串只能指定单一日期，而不能指定日期范围；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;LW&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;组合：在日期字段可以组合使用&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;LW&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，它的意思是当月的最后一个工作日；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;井号&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(#)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：该字符只能在星期字段中使用，表示当月某个工作日。如&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;6#3&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示当月的第三个星期五&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;(6&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示星期五，&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;#3&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示当前的第三个&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，而&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;4#5&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示当月的第五个星期三，假设当月没有第五个星期三，忽略不触发；&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Arial','sans-serif'"&gt;●&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt; C&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：该字符只在日期和星期字段中使用，代表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;“Calendar”&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;的意思。它的意思是计划所关联的日期，如果日期没有被关联，则相当于日历中所有日期。例如&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5C&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在日期字段中就相当于日历&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;日以后的第一天。&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;1C&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在星期字段中相当于星期日后的第一天。&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表达式对特殊字符的大小写不敏感，对代表星期的缩写英文大小写也不敏感。表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;2&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;下面给出一些完整的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示式的实例：&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt;text-align:center" align=center&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;2 Cron&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;表示式示例&lt;/span&gt;&lt;/font&gt; &lt;div align=center&gt; &lt;table style="border-right:#cccccc 1pt outset;border-top:#cccccc 1pt outset;border-left:#cccccc 1pt outset;border-bottom:#cccccc 1pt outset" cellspacing=1 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;表示式&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;&lt;font color="#ffffff"&gt;说明&lt;/font&gt;&lt;/span&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 0 12 * * ? &amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;12&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点运行&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 ? * *&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;运行&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 * * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;运行&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 * * ? *&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;运行&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 * * ? 2008&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;2008&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;年的每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;：&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;运行&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 * 14 * * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点之间每分钟运行一次，开始于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:00&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，结束于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:59&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 0/5 14 * * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点每&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分钟运行一次，开始于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:00&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，结束于&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:55&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 0/5 14,18 * * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点每&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分钟运行一次，此外每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;18&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;19&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点每&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;5&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;钟也运行一次。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 0-5 14 * * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:00&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;点到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:05&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，每分钟运行一次。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 10,44 14 ? 3 WED&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;3&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;月每周三的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:10&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分到&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;14:44&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;，每分钟运行一次。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 ? * MON-FRI&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每周一，二，三，四，五的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 15 * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每月&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;日&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 L * ?&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每月最后一天&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 ? * 6L&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每月最后一个星期五&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 ? * 6L 2007-2009&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;在&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;2007,2008,2009&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;年每个月的最后一个星期五的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt; &lt;tr&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:141pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=235&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;&lt;font color="#ffffff"&gt;&amp;quot;0 15 10 ? * 6#3&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;td style="border-right:#cccccc 1pt inset;padding-right:0.6pt;border-top:#cccccc 1pt inset;padding-left:0.6pt;padding-bottom:0.6pt;border-left:#cccccc 1pt inset;width:194.4pt;padding-top:0.6pt;border-bottom:#cccccc 1pt inset" valign=top width=324&gt; &lt;p style="margin-left:13.5pt;text-indent:-13.5pt"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;每月第三个星期五的&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt"&gt;10:15&lt;/span&gt;&lt;span style="font-size:9pt;font-family:宋体"&gt;分运行。&lt;/span&gt;&lt;/font&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;a href="http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!550.entry" target="_blank"&gt;上一篇 Quartz调度框架应用总结&lt;/a&gt;   &lt;a href="http://x-spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!554.entry" target="_blank"&gt;下一篇 Quartz调度框架应用总结（续2）&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+Quartz%e8%b0%83%e5%ba%a6%e6%a1%86%e6%9e%b6%e5%ba%94%e7%94%a8%e6%80%bb%e7%bb%93%ef%bc%88%e7%bb%ad1%ef%bc%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!553.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!553.entry</guid><pubDate>Thu, 25 Sep 2008 11:53:50 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!553/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!553.entry#comment</wfw:comment><dcterms:modified>2008-09-25T12:06:44Z</dcterms:modified></item><item><title>Quartz调度框架应用总结</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!550.entry</link><description>&lt;div style="layout-grid:15.6pt none"&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;前一段时间项目需要做一个定时发送消息的功能，该功能依附于&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用上，即当&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用启动时，该应用就开始作用。起先决定使用&lt;/span&gt;&lt;span lang=EN-US&gt;java.util.Timer&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;java.util.TimerTask&lt;/span&gt;&lt;span style="font-family:宋体"&gt;来实现，但是研究了一下以后发现&lt;/span&gt;&lt;span lang=EN-US&gt;Java Timer&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的功能比较弱，而且其线程的范围不受&lt;/span&gt;&lt;span lang=EN-US&gt;Web&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用的约束。后来发现了&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;这个开源的调度框架，非常有趣。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;首先我们要得到&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的最新发布版。目前其最新的版本是&lt;/span&gt;&lt;span lang=EN-US&gt;1.6&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。我们可以从以下地址获得它的完整下载包，包中可谓汤料十足，不仅有我们要的&lt;/span&gt;&lt;span lang=EN-US&gt;quartz.jar&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，更包含多个例程和详细的文档，从&lt;/span&gt;&lt;span lang=EN-US&gt;API&lt;/span&gt;&lt;span style="font-family:宋体"&gt;到配置文件的&lt;/span&gt;&lt;span lang=EN-US&gt;XSD&lt;/span&gt;&lt;span style="font-family:宋体"&gt;一应俱全。感兴趣的朋友也可以在&lt;/span&gt;&lt;span lang=EN-US&gt;src&lt;/span&gt;&lt;span style="font-family:宋体"&gt;目录下找到该项目的源码一看究竟。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;废话少说，下面就来看一看这个东东是怎么在&lt;/span&gt;&lt;span lang=EN-US&gt;Java Web Application&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中得以使用的。&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;首先不得不提出的是&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的三个核心概念：调度器、触发器、作业。让我们来看看他们是如何工作的吧。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:21.6pt;text-indent:-21.6pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;一．&lt;/span&gt;&lt;span style="font-family:宋体"&gt;作业总指挥——调度器&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:-18pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;1．&lt;span style="font:7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;该接口或许是整个&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中最最上层的东西了，它提携了所有触发器和作业，使它们协调工作。每个&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;都存有&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的注册，一个&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中可以注册多个&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和多个&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，这些&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;都可以通过&lt;/span&gt;&lt;span lang=EN-US&gt;group name&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和他们自身的&lt;/span&gt;&lt;span lang=EN-US&gt;name&lt;/span&gt;&lt;span style="font-family:宋体"&gt;加以区分，以保持这些&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的实例在同一个&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;内不会冲突。所以，每个&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中的&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的组名是唯一的，本身的名字也是唯一的（就好像是一个&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;ID&lt;/span&gt;&lt;span style="font-family:宋体"&gt;）。&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;也是如此。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例由&lt;/span&gt;&lt;span lang=EN-US&gt;SchedulerFactory&lt;/span&gt;&lt;span style="font-family:宋体"&gt;产生，一旦&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例生成后，我们就可以通过生成它的工厂来找到该实例，获取它相关的属性。下面的代码为我们展示了如何从一个&lt;/span&gt;&lt;span lang=EN-US&gt;Servlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中找到&lt;/span&gt;&lt;span lang=EN-US&gt;SchedulerFactory&lt;/span&gt;&lt;span style="font-family:宋体"&gt;并获得相应的&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例，通过该实例，我们可以获取当前作业中的&lt;/span&gt;&lt;span lang=EN-US&gt;testmode&lt;/span&gt;&lt;span style="font-family:宋体"&gt;属性，来判断该作业是否工作于测试模式。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;table style="margin-left:18pt;border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:633.75pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=1056&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;从当前&lt;/span&gt;&lt;span lang=EN-US&gt;Servlet&lt;/span&gt;&lt;span style="font-family:宋体"&gt;上下文中查找&lt;/span&gt;&lt;span lang=EN-US&gt;StdSchedulerFactory&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            ServletContext ctx=request.getSession().getServletContext();&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(&amp;quot;org.quartz.impl.StdSchedulerFactory.KEY&amp;quot;);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            Scheduler sch = null;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            try {&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;                //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;获取调度器&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                sch = factory.getScheduler(&amp;quot;SchedulerName&amp;quot;);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;                //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;通过调度器实例获得&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，注意领会&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetailName&lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span lang=EN-US&gt;GroupName&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的用法&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                JobDetail jd=sch.getJobDetail(&amp;quot;JobDetailName&amp;quot;, &amp;quot;GroupName&amp;quot;);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                Map jobmap1=jd.getJobDataMap();&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                istest=jobmap1.get(&amp;quot;testmode&amp;quot;)+&amp;quot;&amp;quot;;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            } catch (Exception se) { &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;                //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果得不到当前作业，则从配置文件中读取&lt;/span&gt;&lt;span lang=EN-US&gt;testmode&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;                ReadXML(&amp;quot;job.xml&amp;quot;).get(“job.testmode”);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;            }&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例生成后，它处于&lt;/span&gt;&lt;span lang=EN-US&gt;&amp;quot;stand-by&amp;quot;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;模式，需要调用其&lt;/span&gt;&lt;span lang=EN-US&gt;start&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法来使之投入运作。&lt;/span&gt;&lt;/font&gt; &lt;table style="margin-left:18pt;border-top-style:none;border-right-style:none;border-left-style:none;border-collapse:collapse;border-bottom-style:none" cellspacing=0 cellpadding=0 border=1&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:633.75pt;padding-top:0cm;border-bottom:black 1pt solid" valign=top width=1056&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;public class SendMailShedule{&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;    //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;设置标准&lt;/span&gt;&lt;span lang=EN-US&gt;SchedulerFactory&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    static Scheduler sched;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    public static void run()throws Exception{&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;        //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;生成&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             sched = schedFact.getScheduler(); &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;        //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;创建一个&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例，对应的&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实现类是&lt;/span&gt;&lt;span lang=EN-US&gt;SendMailJob&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;             JobDetail jobDetail = new JobDetail(&amp;quot;myJob&amp;quot;,sched.DEFAULT_GROUP,SendMailJob.class);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;        //&lt;/span&gt;&lt;span style="font-family:宋体"&gt;设置&lt;/span&gt;&lt;span lang=EN-US&gt;CronTrigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，利用&lt;/span&gt;&lt;span lang=EN-US&gt;Cron&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表达式设定触发时间&lt;/span&gt;&lt;/font&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        CronTrigger trigger = new CronTrigger(&amp;quot;myTrigger&amp;quot;,&amp;quot;test&amp;quot;,&amp;quot;0 0 8 1 * ?&amp;quot;);&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        sched.scheduleJob(jobDetail, trigger); &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        sched.start();&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    }&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    public static void  stop()throws Exception{&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;        sched.shutdown();&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;    }&lt;/font&gt;&lt;/span&gt; &lt;p style="text-indent:0cm"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;span style="font-family:宋体"&gt;&lt;font color="#ffffff"&gt;另外，我们也可以通过监听器来跟踪作业和触发器的工作状态。&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span style="font-family:宋体"&gt;&lt;font color="#ffffff"&gt;二．作业及其相关&lt;/font&gt;&lt;/span&gt; &lt;p style="margin-left:18pt;text-indent:-18pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;1．&lt;span style="font:7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;作业实际上是一个接口，任何一个作业都可以写成一个实现该接口的类，并实现其中的&lt;/span&gt;&lt;span lang=EN-US&gt;execute()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;方法，来完成具体的作业任务。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:-18pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;2．&lt;span style="font:7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;JobDetail&lt;/span&gt;&lt;span style="font-family:宋体"&gt;可以指定我们作业的详细信息，比如可以通过反射机制动态的加载某个作业的实例，可以指定某个作业在单个调度器内的作业组名称和具体的作业名称，可以指定具体的触发器。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;一个作业实例可以对应多个触发器（也就是说学校每天&lt;/span&gt;&lt;span lang=EN-US&gt;10&lt;/span&gt;&lt;span style="font-family:宋体"&gt;点放一次眼保健操录音，下午&lt;/span&gt;&lt;span lang=EN-US&gt;3&lt;/span&gt;&lt;span style="font-family:宋体"&gt;点半可以再放一次），但是一个触发器只能对应一个作业实例（&lt;/span&gt;&lt;span lang=EN-US&gt;10&lt;/span&gt;&lt;span style="font-family:宋体"&gt;点钟的时候学校不可能同时播放眼保健操和广播体操的录音）。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:-18pt"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;3．&lt;span style="font:7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;这是一个给作业提供数据支持的数据结构，使用方法和&lt;/span&gt;&lt;span lang=EN-US&gt;java.util.Map&lt;/span&gt;&lt;span style="font-family:宋体"&gt;一样，非常方便。当一个作业被分配给调度器时，&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例就随之生成。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;有一个&lt;/span&gt;&lt;span lang=EN-US&gt;StatefulJob&lt;/span&gt;&lt;span style="font-family:宋体"&gt;子接口，代表有状态的任务，该接口是一个没有方法的标签接口，其目的是让&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;知道任务的类型，以便采用不同的执行方案。无状态任务在执行时拥有自己的&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;拷贝，对&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的更改不会影响下次的执行。而有状态任务共享共享同一个&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例，每次任务执行对&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;所做的更改会保存下来，后面的执行可以看到这个更改，也即每次执行任务后都会对后面的执行发生影响。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;正因为这个原因，无状态的&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;可以并发执行，而有状态的&lt;/span&gt;&lt;span lang=EN-US&gt;StatefulJob&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不能并发执行，这意味着如果前次的&lt;/span&gt;&lt;span lang=EN-US&gt;StatefulJob&lt;/span&gt;&lt;span style="font-family:宋体"&gt;还没有执行完毕，下一次的任务将阻塞等待，直到前次任务执行完毕。有状态任务比无状态任务需要考虑更多的因素，程序往往拥有更高的复杂度，因此除非必要，应该尽量使用无状态的&lt;/span&gt;&lt;span lang=EN-US&gt;Job&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;如果&lt;/span&gt;&lt;span lang=EN-US&gt;Quartz&lt;/span&gt;&lt;span style="font-family:宋体"&gt;使用了数据库持久化任务调度信息，无状态的&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;仅会在&lt;/span&gt;&lt;span lang=EN-US&gt;Scheduler&lt;/span&gt;&lt;span style="font-family:宋体"&gt;注册任务时保持一次，而有状态任务对应的&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;在每次执行任务后都会进行保存。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;实例也可以与一个触发器相关联。这种情况下，对于同一作业的不同触发器，我们可以在&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中添加不同的数据，以便作业在不同时间执行时能够提供更为灵活的数据支持（学校上午放眼保健操录音第一版，下午放第二版）。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:18pt;text-indent:0cm"&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;不管是有状态还是无状态的任务，在任务执行期间对&lt;/span&gt;&lt;span lang=EN-US&gt;Trigger&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的&lt;/span&gt;&lt;span lang=EN-US&gt;JobDataMap&lt;/span&gt;&lt;span style="font-family:宋体"&gt;所做的更改都不会进行持久，也即不会对下次的执行产生影响。&lt;/span&gt;&lt;/font&gt; &lt;p style="margin-left:15.75pt;text-indent:-15.75pt"&gt; &lt;p&gt;&lt;font color="#ffffff"&gt;&lt;span style="font-family:宋体"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span lang=EN-US&gt;&lt;font color="#ffffff"&gt; &lt;a href="http://x-spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!553.entry" target="_blank"&gt;下一篇 Quartz调度框架应用总结（续1）&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+Quartz%e8%b0%83%e5%ba%a6%e6%a1%86%e6%9e%b6%e5%ba%94%e7%94%a8%e6%80%bb%e7%bb%93&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!550.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!550.entry</guid><pubDate>Mon, 22 Sep 2008 01:46:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!550/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!550.entry#comment</wfw:comment><dcterms:modified>2008-09-25T12:03:25Z</dcterms:modified></item><item><title>[转]js frame 框架编程</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!423.entry</link><description>&lt;p&gt;&lt;strong&gt;1 框架编程概述&lt;br&gt;&lt;/strong&gt;一个Html 页面可以有一个或多个子框架，这些子框架以&amp;lt;iframe&amp;gt;来标记，用来显示一&lt;br&gt;个独立的Html 页面。这里所讲的框架编程包括框架的自我控制以及框架之间的互相访问，&lt;br&gt;例如从一个框架中引用另一个框架中的JavaScript变量、调用其他框架内的函数、控制另一&lt;br&gt;个框架中表单的行为等。&lt;br&gt;&lt;strong&gt;2 框架间的互相引用&lt;br&gt;&lt;/strong&gt;一个页面中的所有框架以集合的形式作为window 对象的属性提供，例如：&lt;br&gt;window.frames 就表示该页面内所有框架的集合，这和表单对象、链接对象、图片对象等是&lt;br&gt;类似的，不同的是，这些集合是document 的属性。因此，要引用一个子框架，可以使用如&lt;br&gt;下语法：&lt;br&gt;window.frames[“frameName”];&lt;br&gt;window.frames.frameName&lt;br&gt;window.frames[index]&lt;br&gt;其中，window字样也可以用self代替或省略，假设frameName 为页面中第一个框架，&lt;br&gt;则以下的写法是等价的：&lt;br&gt;self.frames[“frameName”]&lt;br&gt;self.frames[0]&lt;br&gt;frames[0]&lt;br&gt;frameName&lt;br&gt;了解了如何引用一个框架，那么引用的这个框架到底是什么呢？其实，每个框架都对应&lt;br&gt;一个HTML 页面，所以这个框架也是一个独立的浏览器窗口，它具有窗口的所有性质，所&lt;br&gt;谓对框架的引用也就是对window 对象的引用。有了这个window 对象，就可以很方便地对&lt;br&gt;其中的页面进行操作，例如使用window.document对象向页面写入数据、使用window.location&lt;br&gt;属性来改变框架内的页面等。&lt;br&gt;下面分别介绍不同层次框架间的互相引用：&lt;br&gt;2.1．父框架到子框架的引用&lt;br&gt;知道了上述原理，从父框架引用子框架变的非常容易，即：&lt;br&gt;window.frames[“frameName”];&lt;br&gt;这样就引用了页面内名为frameName 的子框架。如果要引用子框架内的子框架，根据&lt;br&gt;引用的框架实际就是window对象的性质，可以这样实现：&lt;br&gt;window.frames[“frameName”].frames[“frameName2”];&lt;br&gt;这样就很引用到了二级子框架，以此类推，可以实现多层框架的引用。&lt;br&gt;2.2．子框架到父框架的引用&lt;br&gt;每个window对象都有一个parent属性，表示它的父框架。如果该框架已经是顶层框架，&lt;br&gt;则window.parent 还表示该框架本身。&lt;br&gt;2.3．兄弟框架间的引用&lt;br&gt;如果两个框架同为一个框架的子框架，它们称为兄弟框架，可以通过父框架来实现互相&lt;br&gt;引用，例如一个页面包括2 个子框架：&lt;br&gt;&amp;lt;frameset rows=&amp;quot;50%,50%&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;1.html&amp;quot; name=&amp;quot;frame1&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;2.html&amp;quot; name=&amp;quot;frame2&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/frameset&amp;gt;&lt;br&gt;在frame1 中可以使用如下语句来引用frame2：&lt;br&gt;self.parent.frames[“frame2”];&lt;br&gt;2.4．不同层次框架间的互相引用&lt;br&gt;框架的层次是针对顶层框架而言的。当层次不同时，只要知道自己所在的层次以及另一&lt;br&gt;个框架所在的层次和名字，利用框架引用的window对象性质，可以很容易地实现互相访问，&lt;br&gt;例如：&lt;br&gt;self.parent.frames[“childName”].frames[“targetFrameName”];&lt;br&gt;2.5．对顶层框架的引用&lt;br&gt;和parent 属性类似，window 对象还有一个top 属性。它表示对顶层框架的引用，这可&lt;br&gt;以用来判断一个框架自身是否为顶层框架，例如：&lt;br&gt;//判断本框架是否为顶层框架&lt;br&gt;if(self==top){&lt;br&gt;//dosomething&lt;br&gt;}&lt;br&gt;&lt;strong&gt;3 改变框架的载入页面&lt;/strong&gt;&lt;br&gt;前面已经讲到，对框架的引用就是对window对象的引用，利用window对象的location&lt;br&gt;属性，可以改变框架的导航，例如：&lt;br&gt;window.frames[0].location=”1.html”;&lt;br&gt;这就将页面中第一个框架的页面重定向到1.html，利用这个性质，甚至可以使用一条链&lt;br&gt;接来更新多个框架。&lt;br&gt;&amp;lt;frameset rows=&amp;quot;50%,50%&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;1.html&amp;quot; name=&amp;quot;frame1&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;2.html&amp;quot; name=&amp;quot;frame2&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/frameset&amp;gt;&lt;br&gt;&amp;lt;!--somecode--&amp;gt;&lt;br&gt;&amp;lt;a href=”frame1.location=’3.html;frame2.location=’4.html’” onclick=””&amp;gt;link&amp;lt;/a&amp;gt;&lt;br&gt;&amp;lt;!--somecode--&amp;gt;&lt;br&gt;&lt;strong&gt;4 引用其他框架内的JavaScript变量和函数&lt;br&gt;&lt;/strong&gt;在介绍引用其他框架内JavaScript变量和函数的技术之前，先来看以下代码：&lt;br&gt;&amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;!--&lt;br&gt;function hello(){&lt;br&gt;alert(&amp;quot;hello,ajax!&amp;quot;);&lt;br&gt;}&lt;br&gt;window.hello();&lt;br&gt;//--&amp;gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;如果运行了这段代码，会弹出“hello,ajax!”的窗口，这正是执行hello()函数的结果。&lt;br&gt;那为什么hello()变成了window对象的方法呢？事实上，在一个页面内定义的所有全局变量&lt;br&gt;和全局函数都是作为window对象的成员。例如：&lt;br&gt;var a=1;&lt;br&gt;alert(window.a);&lt;br&gt;就会弹出对话框显示为1。同样的原理，在不同框架之间共享变量和函数，就是要通过&lt;br&gt;window对象来调用。&lt;br&gt;为了方便大家的理解，下面举例说明。一个商品浏览页面由两个子框架组成，左侧表示&lt;br&gt;商品分类的链接；当用户单击分类链接时，右侧显示相应的商品列表；用户可以单击商品旁&lt;br&gt;的【购买】链接将商品加入购物车。&lt;br&gt;在这个例子中，可以利用左侧导航页面来存储用户希望购买的商品，因为当用户单击导&lt;br&gt;航链接时，变化的是另外一个页面，即商品展示页面，而导航页面本身是不变的，因此其中&lt;br&gt;的JavaScript变量不会丢失，可以用来存储全局数据。其实现原理如下：&lt;br&gt;假设左侧页面为links.html，右侧页面为show.html，页面结构如下：&lt;br&gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//EN&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;html&amp;gt;&lt;br&gt;&amp;lt;head&amp;gt;&lt;br&gt;&amp;lt;title&amp;gt; New Document &amp;lt;/title&amp;gt;&lt;br&gt;&amp;lt;/head&amp;gt;&lt;br&gt;&amp;lt;frameset cols=&amp;quot;20%,80%&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;link.html&amp;quot; name=&amp;quot;link&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;frame src=&amp;quot;show.html&amp;quot; name=&amp;quot;show&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/frameset&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;br&gt;在show.html 中展示的商品旁边可以加入这样一条语句：&lt;br&gt;&amp;lt;a href=”void(0)” onclick=”self.parent.link.addToOrders(32068)”&amp;gt;加入购物车&amp;lt;/a&amp;gt;&lt;br&gt;其中link表示导航框架，在link.html 页面中定义了arrOrders数组来存储商品的id，函&lt;br&gt;数addToOrders()用来响应商品旁边【购买】链接的单击事件，它接收的参数id 表示商品的&lt;br&gt;id，例子中是一个id为32068 的商品：&lt;br&gt;&amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;!--&lt;br&gt;var arrOrders=new Array();&lt;br&gt;function addToOrders(id){&lt;br&gt;arrOrders.push(id);&lt;br&gt;}&lt;br&gt;//--&amp;gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;这样，在结帐页面或是购物车浏览页面就可以用arrOrders来获取所有准备购买的商品。&lt;br&gt;框架可以使一个页面划分为功能独立的多个模块，每个模块之间彼此独立，但又可以通&lt;br&gt;过window 对象的引用来建立联系，是web 开发中的一个重要机制。在Ajax 开发中，还可&lt;br&gt;以利用隐藏框架实现各种技巧，在后面介绍Ajax 实例编程时可以发现，无刷新上传文件以&lt;br&gt;及解决Ajax的前进后退问题都会用到这种技术。 &lt;br&gt;以上内容来自《征服AJAX》&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+%5b%e8%bd%ac%5djs+frame+%e6%a1%86%e6%9e%b6%e7%bc%96%e7%a8%8b&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!423.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!423.entry</guid><pubDate>Sun, 04 May 2008 07:30:21 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!423/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!423.entry#comment</wfw:comment><dcterms:modified>2008-05-04T07:30:21Z</dcterms:modified></item><item><title>解决Ajax与数据库数据变动同步问题</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!421.entry</link><description>&lt;h6&gt;[以下是转文]&lt;/h6&gt; &lt;h6&gt;Ajax从数据库里读取数据不能及时更新，这是因为浏览器的缓存机制。本文提出了四种解决办法。&lt;/h6&gt; &lt;p&gt;以下是引用片段：  &lt;p&gt;　　在电信做的小灵通短信订餐系统中,有几个页面要用到三级联动下拉框,为了使用户体验更好,使服务器缓解一定压力,我决定使用&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/252/7422252.shtml"&gt;AJAX&lt;/a&gt;来完成这个功能,可是我却粗心大意,漏掉了一个环节,使得ajax从数据库里读取数据不能及时更新.这是因为浏览器的缓存机制.  &lt;p&gt;　　有4种方法可以解决这个问题:  &lt;p&gt;　　1.在请求的&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/125/5949125.shtml"&gt;URL&lt;/a&gt;后面加一个时间参数,如:  &lt;p&gt;&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/216/6092716.shtml"&gt;time&lt;/a&gt;=new date()  &lt;p&gt;        当然也可以添加其他性质参数，只要是随机参数就可以,  &lt;p&gt;open(&amp;quot;GET&amp;quot;,url+&amp;quot;?t=&amp;quot;+Math.random(),false)  &lt;p&gt;       或者  &lt;p&gt;url+&amp;quot;?&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/223/6092723.shtml"&gt;timeStamp&lt;/a&gt;=&amp;quot;+new Date().getTime();  &lt;p&gt;　　2.  &lt;p&gt;　　js 代码  &lt;p&gt;function ajaxRead(&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/398/5947898.shtml"&gt;file&lt;/a&gt;){  &lt;p&gt;var xmlObj = null;  &lt;p&gt;if(window.XMLHttpRequest){  &lt;p&gt;xmlObj = new XMLHttpRequest();  &lt;p&gt;} else if(window.ActiveXObject){  &lt;p&gt;xmlObj = new ActiveXObject(&amp;quot;&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/251/5948751.shtml"&gt;Microsoft&lt;/a&gt;.XMLHTTP&amp;quot;);  &lt;p&gt;} else {  &lt;p&gt;return;  &lt;p&gt;}　  &lt;p&gt;xmlObj.onreadystatechange = function(){  &lt;p&gt;if(xmlObj.readyState == 4){  &lt;p&gt;processXML(xmlObj.responseXML);  &lt;p&gt;}  &lt;p&gt;else{  &lt;p&gt;document.getElementById ('playernews').innerHTML='采用AJAX来实现数据的读取,正在加载...';  &lt;p&gt;}  &lt;p&gt;}  &lt;p&gt;xmlObj.open ('GET', file, true);  &lt;p&gt;xmlObj.send ('');  &lt;p&gt;}  &lt;p&gt;function show() {  &lt;p&gt;ajaxRead('*.&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/484/5948484.shtml"&gt;jsp&lt;/a&gt;');  &lt;p&gt;setInterval(&amp;quot;ajaxRead('new.&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/77/6026077.shtml"&gt;php&lt;/a&gt;')&amp;quot;,30000); //自动更新  &lt;p&gt;}  &lt;p&gt;　　3.加上  &lt;p&gt;xmlhttp.setRequestHeader(&amp;quot;Cach&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/246/5947746.shtml"&gt;e-&lt;/a&gt;Control&amp;quot;,&amp;quot;no-&lt;a href="http://whatis.ctocio.com.cn/searchwhatis/459/5946959.shtml"&gt;cache&lt;/a&gt;&amp;quot;);  &lt;p&gt;　　4.在XmlHttpRequest发送请求之前加上  &lt;p&gt;XmlHttpRequest.setRequestHeader(&amp;quot;If-Modified-Since&amp;quot;,&amp;quot;0&amp;quot;),  &lt;p&gt;       如:在  &lt;p&gt;XXXXX.send(YYYYYY).  &lt;h4&gt;[以下是本人注释]&lt;/h4&gt; &lt;p&gt;在使用prototype.js的时候，如果想使用方法3和4，需要这样写： &lt;p&gt;var myAjax = new Ajax.Request( &lt;br&gt;        request_url, &lt;br&gt;        { &lt;br&gt;            method:'get',&lt;br&gt;            &lt;strong&gt;&lt;font color="#ff0000"&gt;requestHeaders: ['Cache-Control','no-cache','If-Modified-Since','0'],&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;            parameters:request_pars, &lt;br&gt;            asynchronous:true,       //true---异步;false---同步.默认为true &lt;br&gt;            onComplete:processRequest &lt;br&gt;        }     &lt;br&gt;    );  &lt;p&gt;注意红色的代码部分，你可能注意到这是把3、4两种方法结合起来使用的。。。  &lt;p&gt;好了，如果你是使用json的话，这个方法一样好用。&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+%e8%a7%a3%e5%86%b3Ajax%e4%b8%8e%e6%95%b0%e6%8d%ae%e5%ba%93%e6%95%b0%e6%8d%ae%e5%8f%98%e5%8a%a8%e5%90%8c%e6%ad%a5%e9%97%ae%e9%a2%98&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!421.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!421.entry</guid><pubDate>Wed, 30 Apr 2008 09:37:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!421/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!421.entry#comment</wfw:comment><dcterms:modified>2008-04-30T09:37:39Z</dcterms:modified></item><item><title>在Java中解析与构造JSON[转]</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!419.entry</link><description>&lt;p&gt;在&lt;a href="http://www.json.org"&gt;www.json.org&lt;/a&gt;上公布了很多Java下的json解析工具，其中org.json和json-lib比较简单，两者使用上差不多。下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序。  &lt;p&gt;&lt;a title="http://nchc.dl.sourceforge.net/sourceforge/json-lib/json-lib-2.2.1-jdk15.jar" href="http://nchc.dl.sourceforge.net/sourceforge/json-lib/json-lib-2.2.1-jdk15.jar"&gt;http://nchc.dl.sourceforge.net/sourceforge/json-lib/json-lib-2.2.1-jdk15.jar&lt;/a&gt;&lt;br&gt;（Needs libs below:）&lt;br&gt;[ &lt;ul&gt; &lt;li&gt;jakarta commons-lang 2.3  &lt;li&gt;jakarta commons-beanutils 1.7.0  &lt;li&gt;jakarta commons-collections 3.2  &lt;li&gt;jakarta commons-logging 1.1  &lt;li&gt;ezmorph 1.0.4 &lt;/ul&gt; &lt;p&gt;]&lt;br&gt;这是使用json-lib的程序： &lt;br&gt;import java.util.HashMap; &lt;br&gt;import java.util.Map; &lt;br&gt;import net.sf.json.JSONObject; &lt;br&gt;public class Test { &lt;br&gt;     public static void main(String[] args) { &lt;br&gt;         String json = &amp;quot;{\&amp;quot;name\&amp;quot;:\&amp;quot;reiz\&amp;quot;}&amp;quot;; &lt;br&gt;         JSONObject jsonObj = JSONObject.fromObject(json); &lt;br&gt;         String name = jsonObj.getString(&amp;quot;name&amp;quot;); &lt;br&gt;         jsonObj.put(&amp;quot;initial&amp;quot;, name.substring(0, 1).toUpperCase()); &lt;br&gt;         String[] likes = new String[] { &amp;quot;JavaScript&amp;quot;, &amp;quot;Skiing&amp;quot;, &amp;quot;Apple Pie&amp;quot; }; &lt;br&gt;         jsonObj.put(&amp;quot;likes&amp;quot;, likes); &lt;br&gt;         Map &amp;lt;String, String&amp;gt; ingredients = new HashMap &amp;lt;String, String&amp;gt;(); &lt;br&gt;         ingredients.put(&amp;quot;apples&amp;quot;, &amp;quot;3kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;sugar&amp;quot;, &amp;quot;1kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;pastry&amp;quot;, &amp;quot;2.4kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;bestEaten&amp;quot;, &amp;quot;outdoors&amp;quot;); &lt;br&gt;         jsonObj.put(&amp;quot;ingredients&amp;quot;,ingredients); &lt;br&gt;         System.out.println(jsonObj); &lt;br&gt;     } &lt;br&gt;}  &lt;p&gt;&lt;a title="http://www.json.org/java/json.zip" href="http://www.json.org/java/json.zip"&gt;http://www.json.org/java/json.zip&lt;/a&gt;&lt;br&gt;这是使用org.json的程序： &lt;br&gt;import java.util.HashMap; &lt;br&gt;import java.util.Map; &lt;br&gt;import org.json.JSONException; &lt;br&gt;import org.json.JSONObject; &lt;br&gt;public class Test { &lt;br&gt;     public static void main(String[] args) throws JSONException { &lt;br&gt;         String json = &amp;quot;{\&amp;quot;name\&amp;quot;:\&amp;quot;reiz\&amp;quot;}&amp;quot;; &lt;br&gt;         JSONObject jsonObj = new JSONObject(json); &lt;br&gt;         String name = jsonObj.getString(&amp;quot;name&amp;quot;); &lt;br&gt;         jsonObj.put(&amp;quot;initial&amp;quot;, name.substring(0, 1).toUpperCase()); &lt;br&gt;         String[] likes = new String[] { &amp;quot;JavaScript&amp;quot;, &amp;quot;Skiing&amp;quot;, &amp;quot;Apple Pie&amp;quot; }; &lt;br&gt;         jsonObj.put(&amp;quot;likes&amp;quot;, likes); &lt;br&gt;         Map &amp;lt;String, String&amp;gt; ingredients = new HashMap &amp;lt;String, String&amp;gt;(); &lt;br&gt;         ingredients.put(&amp;quot;apples&amp;quot;, &amp;quot;3kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;sugar&amp;quot;, &amp;quot;1kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;pastry&amp;quot;, &amp;quot;2.4kg&amp;quot;); &lt;br&gt;         ingredients.put(&amp;quot;bestEaten&amp;quot;, &amp;quot;outdoors&amp;quot;); &lt;br&gt;         jsonObj.put(&amp;quot;ingredients&amp;quot;, ingredients); &lt;br&gt;         System.out.println(jsonObj); &lt;br&gt;         System.out.println(jsonObj); &lt;br&gt;     } &lt;br&gt;} &lt;br&gt;两者的使用几乎是相同的，但org.json比json-lib要轻量得多，前者没有任何依赖，而后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件。&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3743893519549122624&amp;page=RSS%3a+%e5%9c%a8Java%e4%b8%ad%e8%a7%a3%e6%9e%90%e4%b8%8e%e6%9e%84%e9%80%a0JSON%5b%e8%bd%ac%5d&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=x-spirit.spaces.live.com&amp;amp;GT1=X-Spirit"&gt;</description><comments>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!419.entry#comment</comments><guid isPermaLink="true">http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!419.entry</guid><pubDate>Tue, 29 Apr 2008 08:15:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://X-Spirit.spaces.live.com/blog/cns!CC0B04AE126337C0!419/comments/feed.rss</wfw:commentRss><wfw:comment>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!419.entry#comment</wfw:comment><dcterms:modified>2008-04-29T08:15:43Z</dcterms:modified></item><item><title>javascript解析json[转]</title><link>http://X-Spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!418.entry</link><description>&lt;p&gt;JSON （JavaScript Object Notation）一种简单的数据格式，比xml更轻巧。 JSON 是 JavaScript 原生格式，这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。  &lt;p&gt;JSON的规则很简单： 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”（左括号）开始，“}”（右括号）结束。每个“名称”后跟一个“:”（冒号）；“‘名称/值’ 对”之间使用“,”（逗号）分隔。具体细节参考&lt;a href="http://www.json.org/json-zh.html"&gt;http://www.json.org/json-zh.html&lt;/a&gt;  &lt;p&gt;举个简单的例子：  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function showJSON() {    &lt;li&gt;var user =    &lt;li&gt;     {    &lt;li&gt;&amp;quot;username&amp;quot;:&amp;quot;andy&amp;quot;,    &lt;li&gt;&amp;quot;age&amp;quot;:20,    &lt;li&gt;&amp;quot;info&amp;quot;: { &amp;quot;tel&amp;quot;: &amp;quot;123456&amp;quot;, &amp;quot;cellphone&amp;quot;: &amp;quot;98765&amp;quot;},    &lt;li&gt;&amp;quot;address&amp;quot;:    &lt;li&gt;             [    &lt;li&gt;                 {&amp;quot;city&amp;quot;:&amp;quot;beijing&amp;quot;,&amp;quot;postcode&amp;quot;:&amp;quot;222333&amp;quot;},    &lt;li&gt;                 {&amp;quot;city&amp;quot;:&amp;quot;newyork&amp;quot;,&amp;quot;postcode&amp;quot;:&amp;quot;555666&amp;quot;}    &lt;li&gt;             ]    &lt;li&gt;     }    &lt;li&gt; &lt;li&gt;     alert(user.username);    &lt;li&gt;     alert(user.age);    &lt;li&gt;     alert(user.info.cellphone);    &lt;li&gt;     alert(user.address[0].city);    &lt;li&gt;     alert(user.address[0].postcode);    &lt;li&gt;}   &lt;/ol&gt; &lt;p&gt;这表示一个user对象，拥有username, age, info, address 等属性。  &lt;p&gt;同样也可以用JSON来简单的修改数据，修改上面的例子  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function showJSON() {    &lt;li&gt;var user =    &lt;li&gt;     {    &lt;li&gt;&amp;quot;username&amp;quot;:&amp;quot;andy&amp;quot;,    &lt;li&gt;&amp;quot;age&amp;quot;:20,    &lt;li&gt;&amp;quot;info&amp;quot;: { &amp;quot;tel&amp;quot;: &amp;quot;123456&amp;quot;, &amp;quot;cellphone&amp;quot;: &amp;quot;98765&amp;quot;},    &lt;li&gt;&amp;quot;address&amp;quot;:    &lt;li&gt;             [    &lt;li&gt;                 {&amp;quot;city&amp;quot;:&amp;quot;beijing&amp;quot;,&amp;quot;postcode&amp;quot;:&amp;quot;222333&amp;quot;},    &lt;li&gt;                 {&amp;quot;city&amp;quot;:&amp;quot;newyork&amp;quot;,&amp;quot;postcode&amp;quot;:&amp;quot;555666&amp;quot;}    &lt;li&gt;             ]    &lt;li&gt;     }    &lt;li&gt; &lt;li&gt;     alert(user.username);    &lt;li&gt;     alert(user.age);    &lt;li&gt;     alert(user.info.cellphone);    &lt;li&gt;     alert(user.address[0].city);    &lt;li&gt;     alert(user.address[0].postcode);    &lt;li&gt; &lt;li&gt;     user.username = &amp;quot;Tom&amp;quot;;    &lt;li&gt;     alert(user.username);    &lt;li&gt;}   &lt;/ol&gt; &lt;p&gt;JSON提供了json.js包，下载&lt;a href="http://www.json.org/json.js"&gt;http://www.json.org/json.js&lt;/a&gt; 后，将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function showCar() {    &lt;li&gt;var carr = new Car(&amp;quot;Dodge&amp;quot;, &amp;quot;Coronet R/T&amp;quot;, 1968, &amp;quot;yellow&amp;quot;);    &lt;li&gt;     alert(carr.toJSONString());    &lt;li&gt;}    &lt;li&gt; &lt;li&gt;function Car(make, model, year, color)        {    &lt;li&gt;this.make   =   make;    &lt;li&gt;this.model   =   model;    &lt;li&gt;this.year   =   year;    &lt;li&gt;this.color   =   color;    &lt;li&gt;}   &lt;/ol&gt; &lt;p&gt;可以使用eval来转换JSON字符到Object  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function myEval() {    &lt;li&gt;var str = '{ &amp;quot;name&amp;quot;: &amp;quot;Violet&amp;quot;, &amp;quot;occupation&amp;quot;: &amp;quot;character&amp;quot; }';    &lt;li&gt;var obj = eval('(' + str + ')');    &lt;li&gt;     alert(obj.toJSONString());    &lt;li&gt;}   &lt;/ol&gt; &lt;p&gt;或者使用parseJSON()方法  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function myEval() {    &lt;li&gt;var str = '{ &amp;quot;name&amp;quot;: &amp;quot;Violet&amp;quot;, &amp;quot;occupation&amp;quot;: &amp;quot;character&amp;quot; }';    &lt;li&gt;var obj = str.parseJSON();    &lt;li&gt;     alert(obj.toJSONString());    &lt;li&gt;}   &lt;/ol&gt; &lt;p&gt;下面使用prototype写一个JSON的ajax例子。  &lt;p&gt;先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话  &lt;p&gt;java 代码  &lt;ol&gt; &lt;li&gt;response.getWriter().print(&amp;quot;{ \&amp;quot;name\&amp;quot;: \&amp;quot;Violet\&amp;quot;, \&amp;quot;occupation\&amp;quot;: \&amp;quot;character\&amp;quot; }&amp;quot;);  &lt;/ol&gt; &lt;p&gt;再在页面中写一个ajax的请求  &lt;p&gt;js 代码  &lt;ol&gt; &lt;li&gt;function sendRequest() {    &lt;li&gt;var url = &amp;quot;/MyWebApp/JSONTest1&amp;quot;;    &lt;li&gt;var mailAjax = new Ajax.Request(    &lt;li&gt;         url,    &lt;li&gt;         {    &lt;li&gt;             method: 'get',    &lt;li&gt;             onComplete: jsonResponse    &lt;li&gt;         }    &l