<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>~~welcome to fuhao`s blog on javaeye~~</title>
    <description></description>
    <link>http://fuhao9611.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>JavaScript实现本地图片预览</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/108587" style="color:red;">http://fuhao9611.javaeye.com/blog/108587</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;script language="javascript" type="text/javascript"><br /> //==============================<br /> //功能:Javascript本地图片预览<br /> //Author:yaosansi<br /> //Site:http://www.yaosansi.com<br /> //Date:2006-02-21<br /> //说明:简单的判断了文件的合法性<br /> //适用于:上传文件前预览本地图片<br /> //==============================<br />  function ShowImage(value,img)<br />    {<br />      alert(value);<br />      //检测盘符<br />      alert(value.indexOf(':'));<br />      //检测文件是否有扩展名<br />      alert(value.length-value.lastIndexOf('.'));<br />      //取文件扩展名<br />      alert(value.substr(value.length-3,3));<br />      //检测文件扩展名是否合法<br />      alert(CheckExt(value.substr(value.length-3,3)));<br />      <br />        if(value.length>5 && value.indexOf(':')==1 && (value.length-value.lastIndexOf('.'))==4 && CheckExt(value.substr(value.length-3,3)))<br />        {<br />            img.src=value;<br />            img.alt="本地图片预览";<br />            img.style.visibility="visible";<br />        }<br />        else<br />        {<br />     img.style.visibility="hidden";<br />     }<br />    }<br />    //检查扩展名是否合法,合法返回True<br />    function CheckExt(ext)<br />    {<br />     //这里设置允许的扩展名<br />     var AllowExt="jpg|gif|jpeg|png|bmp";<br />     var ExtOK=false;<br />   var ArrayExt;<br />   if(AllowExt.indexOf('|')!=-1)<br />   {<br />    ArrayExt=AllowExt.split('|');<br />    for(i=0;i&lt;ArrayExt.length;i++)<br />    {<br />     if(ext.toLowerCase()==ArrayExt[i])<br />     {<br />      ExtOK=true;<br />      break;<br />     }<br />    }<br />   }<br />   else<br />   {<br />    ArrayExt=AllowExt;<br />    if(ext.toLowerCase()==ArrayExt)<br />    {<br />     ExtOK=true;<br />    }<br />   }<br />   return ExtOK;<br />    }<br />&lt;/script><br /><br /><br />&lt;/BODY><br />&lt;/HTML>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/108587#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 15:28:20 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/108587</link>
        <guid>http://fuhao9611.javaeye.com/blog/108587</guid>
      </item>
      <item>
        <title>MySql在DOS的常用命令</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/108586" style="color:red;">http://fuhao9611.javaeye.com/blog/108586</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          MySql在DOS的常用命令：<br />一、连接MySql：首先进入MySql的安装目录下的MySql\bin下，再键入mysql -uroot                     -proot,这里假定MySql的登陆名为：root,密码为：root。<br />二、查询当前版本信息:select version();<br />三、查询当前日期：select current_date;<br />四、查询服务器中的所有数据库:show databases;<br />五、使用test库:use test; 此时会提示：Database changed;<br />六、查询当前所操作的数据库名称:select database();<br />七、创建一个名称为pubs的新数据库:create database pubs;<br />八、删除名为pubs的数据库:drop database if exists pubs;<br />九、创建一个名为student的表:create table student<br />       (<br />    stu_Id int parmary key not null,<br />    stu_Name varchar(20) not null,<br />    stu_Pass varchar(20) not null,<br />    stu_Age int not null<br />       );<br />十、显示数据库pubs下的所有表:show tables;<br />十一、查看数据表student的表结构:describe student;<br />十二、添加记录:insert into student(stu_Id,stu_Name,stu_Pass,stu_Age)       <br />       values(1,'tom','123',20);<br />十三、修改记录:update student set stu_Name='jerry' where stu_Id=1;<br />十四、记录查询:select * from student where stu_Id=2;<br />十五、删除记录:delete from student where stu_Id=1;<br />十六、删除表:drop table student;
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/108586#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 15:24:45 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/108586</link>
        <guid>http://fuhao9611.javaeye.com/blog/108586</guid>
      </item>
      <item>
        <title>使用String.split()所遇到的问题~~迷惑</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/103112" style="color:red;">http://fuhao9611.javaeye.com/blog/103112</a>&nbsp;
          发表时间: 2007年07月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天遇到了一个问题，从前台传来一个字符串，在后台需要split进行拆分，发现结果出乎我的意料，问题如下：<br />从前台传来的字符串是:a|b|c|d|，需要使用split以|来进行拆分，代码如下：<br /><br /><pre name="code" class="java">
public static void main(String[] args) {
		String str1 = "a|b|c|d|";
		String[] arr1 = str1.split("|");
		System.out.println("数组arr1的大小是:"+arr1.length);
		for (int i = 0; i &lt; arr1.length; i++) {
			System.out.println("----arr1["+i+"]:"+arr1[i]);
		}
</pre><br />最后打印出来的结果不是我所预期的：<br /><pre name="code" class="java">
数组arr1的大小是:9
----arr1[0]:
----arr1[1]:a
----arr1[2]:|
----arr1[3]:b
----arr1[4]:|
----arr1[5]:c
----arr1[6]:|
----arr1[7]:d
----arr1[8]:|
</pre><br /><span style="color: red">数组的大小本来预期的是:4，现在怎么打印出来的是：9</span>。<br />不知道问题出在那里了，最后将前台传来的字符串不使用"|"，使用":"来把它们隔开，问题解决了。<br />将字符串换成:"a:b:c:d:"后的代码:<br /><pre name="code" class="java">
public static void main(String[] args) {
       String str2 = "a:b:c:d:";
       String[] arr2 = str2.split(":");
       System.out.println("数组arr2的大小是:"+arr2.length);
       for (int i = 0; i &lt; arr2.length; i++) {
	  System.out.println("----arr2["+i+"]:"+arr2[i]);
       }
 }
</pre><br />打印出来的结果，遇到预期的是一致的：<br /><pre name="code" class="java">
数组arr2的大小是:4
----arr2[0]:a
----arr2[1]:b
----arr2[2]:c
----arr2[3]:d
</pre><br /><span style="color: red">难道使用"|"和":"，对于split来说会有不同对待</span>，迷惑，期待高手的指点~~~
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/103112#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jul 2007 09:09:23 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/103112</link>
        <guid>http://fuhao9611.javaeye.com/blog/103112</guid>
      </item>
      <item>
        <title>使用DetachedCriteria所遇到的一个问题</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/100156" style="color:red;">http://fuhao9611.javaeye.com/blog/100156</a>&nbsp;
          发表时间: 2007年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天遇到了一个使用DetachedCriteria进行查询的问题，想了半天，得不到结果，最后在付永杰老师的指点下，终于解决了，现在把问题记录下来，希望对大家有所帮助！问题描述如下：<br />我的Service方法是根据前台传来的数组，然后取出数组里面的每一项，然后作为查询条件进行查询，数组的大小不确定，示例代码如下：<br /><pre name="code" class="java">
// 方法需要根据传来的数组,将数组中的每一个作为查询的条件,实现区域="北京"或者区域="上海"或者区域="陕西"
String[] arr = new String[]{"北京","上海","陕西","四川"};
DetachedCriteria dc = DetachedCriteria.forClass(ListTcpolicyBaseInfoBean.class,"tcp");
// 如果对于数组的大小的,使用Restrictions.or()像下面那样写,就可以搞定
dc.add(Restrictions.or(Restrictions.eq("tcp.District", "上海"),Restrictions.eq("tcp.District","北京")));
// 关键问题是现在数组的大小不确定,查询Hibernate的文档,其对于Restrictions.or()的介绍很简单,也只是适用于两个条件的,其代码如下:
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),
Restrictions.isNull("age")
) )
.list();
</pre><br />此时我的思路还是停留在如何使用Restrictions.or()来解决对于数组大小不确定的问题，查找资料也没有得到满意的答案，郁闷的很……<br />恰好付永杰老师在线，我就把自己的问题告诉他了，高手就是高手，直接问我一句，为什么不使用Restrictions.in()呢？真是“一语惊醒梦中人呀”！直接一句就搞定了！<br /><pre name="code" class="java">dc.add(Restrictions.in("tcp.District",arr));</pre><br />看来还是我对DetachedCriteria的不熟悉所造成的！<img src="/images/smiles/icon_cry.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/100156#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jul 2007 16:53:55 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/100156</link>
        <guid>http://fuhao9611.javaeye.com/blog/100156</guid>
      </item>
      <item>
        <title>DWR实现省市县三级联动</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/99865" style="color:red;">http://fuhao9611.javaeye.com/blog/99865</a>&nbsp;
          发表时间: 2007年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前段时间想学习学习DWR，在网上查找资料无数，没有见到一个现成的例子可以参阅一下，郁闷无比，罢了，还是自己动手，丰衣足食吧！<br />   本例子是由MySQL数据库，结合前台使用Struts来完成的。主要是为了说明DWR的使用，所以对于数据库的设计等等都较简单，大家觉得那里有什么不合理之处请给我留言！数据库创建的脚本在附件里面。<br />   数据库的大概设计是，共有三个字段[id,name,parentid]，顾名思义，id就是唯一标示一条记录，name存放的是省市县的名称，parentid存放的其上级的id，例如对于省一级别的，其parentid全部为0，对于市一级别的，其parentid存放的是所对应省的id，对于县一级别的，其parentid存放的是所对应市的id。<br />   首先在进入显示页面的时候就把所有的parentid=0的全部查出来，初始化进入省所在的下拉列表中，然后根据选择省的下拉列表，通过DWR调用java方法将其所对应的市取出来，以此类推……<br />   这里主要需要说明的是在<span style="color: red">web.xml</span>里面需要配置如下：<br /><pre name="code" class="java">&lt;servlet>
      &lt;servlet-name>dwr-invoker&lt;/servlet-name>
      &lt;servlet-class>uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class>
      &lt;init-param>
         &lt;param-name>debug&lt;/param-name>
          &lt;param-value>true&lt;/param-value>
       &lt;/init-param>
    &lt;/servlet>
    &lt;servlet-mapping>
        &lt;servlet-name>dwr-invoker&lt;/servlet-name>
        &lt;url-pattern>/dwr/*&lt;/url-pattern>
    &lt;/servlet-mapping>
</pre><br />   然后在web.xml的同目录下，创建一个<span style="color: red">dwr.xml</span>，配置如下：<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
&lt;dwr>
  &lt;allow>
    &lt;create creator="new" javascript="province">
      &lt;param name="class" value="com.xinli.struts.service.ProvinceService"/>
    &lt;/create>
  &lt;/allow>
&lt;/dwr></pre>对于dwr.xml需要说明的是：<br />1.creator：定义供javascript调用的新建对象的方法，也即对象的构造方法。其可以包括【new，none，scripted，spring，jsf，struts，pageflow，ejb3】关于creator的具体用法，可以参照<a href="http://getahead.org/dwr/server/dwrxml/creators" target="_blank">http://getahead.org/dwr/server/dwrxml/creators</a>。<br />2.javascript：java类暴露给浏览器所调用的javascript的名称，也就是在jsp页面所出现的js的名称一定和此处所定义的一致。<br />3.param：指定create元素所需要的参数，比如其允许创建的java类的名称。<br />4.name：param元素所指定的参数名称。<br />5.value：param元素所指定的参数值。<br />后台业务方法实现如下<span style="color: red">ProvinceDAO</span>：<br /><pre name="code" class="java">package com.xinli.struts.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import com.xinli.struts.db.DBManager;

/**
 * @author fuhao
 */
public class ProvinceDAO {

	private static Connection conn = null;

	private static Statement stmt = null;

	private static ResultSet rs = null;
	
	// 全取所有的parentid=0的记录,也即将所有的省查询出来,放入Map中
	public Map getFirst() throws SQLException {
		Map map = new HashMap();
		String sql = "select * from province where parentid = " + 0;
		try {
			conn = DBManager.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				map.put(rs.getInt("id"), rs.getString("name"));
			}
			return map;
		} catch (Exception e) {
			System.out.println("----获得省的方法出现异常:" + e);
			e.printStackTrace();
			return null;
		} finally {
			if (rs != null && stmt != null && conn != null) {
				rs.close();
				stmt.close();
				conn.close();
			}
		}
	}
	// 根据parentid获得其下所对应的记录
	public Map getChildByParentId(String id) throws SQLException {
		Map map = new HashMap();
		String sql = "select * from province as p where p.parentid =" + id;
		try {
			conn = DBManager.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				map.put(rs.getInt("id"), rs.getString("name"));
			}
			return map;
		} catch (Exception e) {
			System.out.println("----根据父id获得子记录的方法出现异常:" + e);
			e.printStackTrace();
			return null;
		} finally {
			if (rs != null && stmt != null && conn != null) {
				rs.close();
				stmt.close();
				conn.close();
			}
		}
	}
}</pre><br />OK，至此我们需要测试一下，看看配置的DWR是否正确，启动Tomcat，通过访问<a href="http://localhost:8080/Struts_Dwr/dwr" target="_blank">http://localhost:8080/Struts_Dwr/dwr</a>，此时会出现如下图所示的页面：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/4268/db14aaaa-ddb1-49a6-9da8-483b957c8e01.jpg" /><br />点击页面超链接，进入如下页面：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/4269/4c28843e-0572-44de-9edc-7c8bfa6e8a37.jpg" /><br />点击getChild("1")后面的Execute方法，如果弹出如下所示的弹出框：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/4270/6f0a2682-5eb2-4cd2-b2d8-f42d809d2284.jpg" /><br />则说明DWR配置完全正确，可以继续写jsp页面了！曙光就在眼前！呵呵~~~<br />前台的jsp页面<span style="color: red">index.jsp</span>代码如下：<br /><pre name="code" class="java">&lt;%@ page language="java" pageEncoding="GB2312"%>
&lt;%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>省市县三级联动&lt;/title>
    &lt;script type="text/javascript" src="dwr/interface/province.js">&lt;/script>
    &lt;script type="text/javascript" src="dwr/engine.js">&lt;/script>
    &lt;script type="text/javascript" src="dwr/util.js">&lt;/script>
    &lt;script language="javascript">
    // 根据选择的省,获得其所辖的市
    	function getCity(){
    		var obj_Pro = document.getElementById("sel_Pro");
    		var obj_City = document.getElementById("sel_City");
    		var obj_County = document.getElementById("sel_County");
    		var pro_Index = obj_Pro.selectedIndex;
    		var pro_Value = obj_Pro.options[pro_Index].value;
    		if(pro_Value != "" && pro_Value != null){
    			province.getChild(pro_Value,cityReturn);
    		}else{
    			DWRUtil.removeAllOptions(obj_City);
				DWRUtil.addOptions(obj_City,{'':'请选择'});
    			DWRUtil.removeAllOptions(obj_County);
				DWRUtil.addOptions(obj_County,{'':'请选择'});
    		}
    	}
    // 回调函数
    	function cityReturn(data){
    		var obj_City = document.getElementById("sel_City");
    		DWRUtil.removeAllOptions(obj_City);
			DWRUtil.addOptions(obj_City,{'':'请选择'});
			DWRUtil.addOptions(obj_City,data);
    	}
    // 根据选择的市,获得所辖的县
    	function getCounty(){
    		var obj_Pro = document.getElementById("sel_Pro");
    		var obj_City = document.getElementById("sel_City");
    		var obj_County = document.getElementById("sel_County");
    		var city_Index = obj_City.selectedIndex;
    		var city_Value = obj_City.options[city_Index].value;
    		if(city_Value != "" && city_Value != null){
    			province.getChild(city_Value,countyReturn);
    		}else{
    			DWRUtil.removeAllOptions(obj_County);
				DWRUtil.addOptions(obj_County,{'':'请选择'});
    		}
    	}
    // 回调函数
    	function countyReturn(data){
    		var obj_County = document.getElementById("sel_County");
    		DWRUtil.removeAllOptions(obj_County);
			DWRUtil.addOptions(obj_County,{'':'请选择'});
			DWRUtil.addOptions(obj_County,data);
    	}
    &lt;/script>
  &lt;/head>
  &lt;body>
  &lt;br />&lt;br />
  &lt;div align="center">&lt;font color="red">省市县三级联动&lt;/font>&lt;/div>
  &lt;br />
   &lt;table align="center">
   	 &lt;tbody>
   	 	&lt;tr>
   	 		&lt;td>省:&lt;/td>
   	 		&lt;td>
   	 			&lt;select id="sel_Pro" onchange="getCity()">
   	 				&lt;option value="">请选择&lt;/option>
   	 				&lt;c:forEach items="${map}" var="hashMap">
   	 					&lt;option value="&lt;c:out value='${hashMap.key}' />">&lt;c:out value="${hashMap.value}" />&lt;/option>
   	 				&lt;/c:forEach>
   	 			&lt;/select>
   	 		&lt;/td>
   	 		&lt;td>市:&lt;/td>
   	 		&lt;td>
   	 			&lt;select id="sel_City" onchange="getCounty()">
   	 				&lt;option value="">请选择&lt;/option>
   	 			&lt;/select>
   	 		&lt;/td>
   	 		&lt;td>县:&lt;/td>
   	 		&lt;td>
   	 			&lt;select id="sel_County">
   	 				&lt;option value="">请选择&lt;/option>
   	 			&lt;/select>
   	 		&lt;/td>
   	 	&lt;/tr>
   	 &lt;/tbody>
   &lt;/table>
  &lt;/body>
&lt;/html>
</pre><br />对于index.jsp需要说明的是：需要引用三个js，province.js[其与dwr.xml里面的javascript的名称相同]，engine.js，util.js。其中对于province.js是由dwr自动生成的javascript文件，包括相应的类以及方法。dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换，dwr/util.js包含了工具函数简化页面处理。<br />至此编码完毕，开启Tomcat，在浏览器里面输入<br /><a href="http://localhost:8080/Struts_Dwr/welcome.do" target="_blank">http://localhost:8080/Struts_Dwr/welcome.do</a>可以看到如下效果：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/4271/cf1cbee5-eeca-429d-9d48-20639fef6b17.jpg" /><br />数据库脚本以及本例子的源代码都在附件里面可以下载，本例子MySQL数据库的用户名和密码都是root，大家可以将struts-config.xml里面的user和password修改成的Mysql帐号即可。
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/99865#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Jul 2007 19:54:55 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/99865</link>
        <guid>http://fuhao9611.javaeye.com/blog/99865</guid>
      </item>
      <item>
        <title>我犯的一个很低级的错误</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/99860" style="color:red;">http://fuhao9611.javaeye.com/blog/99860</a>&nbsp;
          发表时间: 2007年07月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天在写Service方法的时候，等到写到三分之二，被通知项目组要开会，开会回来，直接就开始写测试用例了，当时心里还是很清楚，<span style="color: red">在测试用例里面把接下来的Service方法写完</span>了，然后测试，OK，Service方法没有问题。<br />   等到在前台Action调用Service方法的时候总是得不到我要的结果，郁闷无比，不知道怎么搞得，因为自己总觉得我的测试用例都是通过的，那么Service方法是一定没有问题的呀，怎么在前台就得不到结果？搞了一个多小时也不知道原因在那！<br />   吃完中午饭，回来无意间看了一下自己的Service方法，我那个寒呀，原来Service方法根本就没有写完，然后再一看测试用例，哎，我怎么……，真是哭笑不得呀！糊涂！
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/99860#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Jul 2007 19:43:20 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/99860</link>
        <guid>http://fuhao9611.javaeye.com/blog/99860</guid>
      </item>
      <item>
        <title>Eclipse中的常用快捷键</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/96887" style="color:red;">http://fuhao9611.javaeye.com/blog/96887</a>&nbsp;
          发表时间: 2007年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          天天在使用Eclipse，但是只是知道几个常用的快捷键，看到项目组牛人使用快捷键很熟练，不可否认，的确很方便，今天看到一篇介绍快捷键的资料，好东西，收藏下来：<br />Ctrl+D: 删除当前行 <br /><br />Ctrl+Alt+↓ 复制当前行到下一行(复制增加) <br /><br />Ctrl+Alt+↑ 复制当前行到上一行(复制增加) <br /><br />Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) <br /><br />Alt+↑ 当前行和上面一行交互位置(同上) <br /><br />Alt+← 前一个编辑的页面 <br /><br />Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) <br /><br />Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 <br /><br />Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) <br /><br />Shift+Ctrl+Enter 在当前行插入空行(原理同上条) <br /><br />Ctrl+Q 定位到最后编辑的地方 <br /><br />Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) <br /><br />Ctrl+M 最大化当前的Edit或View (再按则反之) <br /><br />Ctrl+/ 注释当前行,再按则取消注释 <br /><br />Ctrl+O 快速显示 OutLine <br /><br />Ctrl+T 快速显示当前类的继承结构 <br /><br />Ctrl+W 关闭当前Editer <br /><br />Ctrl+K 参照选中的Word快速定位到下一个 <br /><br />Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) <br /><br />Ctrl+/(小键盘) 折叠当前类中的所有代码 <br /><br />Ctrl+×(小键盘) 展开当前类中的所有代码 <br /><br />Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替) <br /><br />Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作) <br /><br />Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了) <br /><br />Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查) <br /><br />Ctrl+Shift+F4 关闭所有打开的Editer <br /><br />Ctrl+Shift+X 把当前选中的文本全部变为大写 <br /><br />Ctrl+Shift+Y 把当前选中的文本全部变为小写 <br /><br />Ctrl+Shift+F 格式化当前代码 <br /><br />Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之) <br /><br />下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了) <br /><br />Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力) <br /><br />Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用) <br /><br />Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定) <br /><br />Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候) <br /><br />Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能) <br /><br />Alt+Shift+I 合并变量(可能这样说有点不妥Inline) <br /><br />Alt+Shift+V 移动函数和变量(不怎么常用) <br /><br />Alt+Shift+Z 重构的后悔药(Undo) <br /><br />Ctrl+Shift+U 选择选中的文字后非常类似于UE的列表查询
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/96887#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 02 Jul 2007 12:58:41 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/96887</link>
        <guid>http://fuhao9611.javaeye.com/blog/96887</guid>
      </item>
      <item>
        <title>电脑服务优化</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/91224" style="color:red;">http://fuhao9611.javaeye.com/blog/91224</a>&nbsp;
          发表时间: 2007年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          电脑中毒了，好像是最近比较流行的AV终结者，真实郁闷呀，没有办法需要将所有的硬盘都格式化掉，心疼呀，什么都没有备份，要命的是我的光驱坏了，借个光驱装系统，真是不爽！<br />现在把电脑服务优化备份一下：<br /><br />Alerter <br />微软： 通知选取的使用者及计算机系统管理警示。如果停止这个服务，使用系统管理警示的程序将不会收到通知。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 一般家用计算机根本不需要传送或接收计算机系统管理来的警示(Administrative Alerts)，除非你的计算机用在局域网络上 <br />依存： Workstation <br />建议： 已停用 <br />  <br />Application Layer Gateway Service <br />微软： 提供因特网联机共享和因特网联机防火墙的第三方通讯协议插件的支持 <br />补充： 如果你不使用因特网联机共享 (ICS) 提供多台计算机的因特网存取和因特网联机防火墙 (ICF) 软件你可以关掉 <br />依存： Internt Connection Firewall (ICF) / Internet Connection Sharing (ICS) <br />建议： 已停用 <br /><br />Application Management (应用程序管理) <br />微软： 提供指派、发行、以及移除的软件安装服务。 <br />补充： 如上说的软件安装变更的服务 <br />建议： 手动 <br />  <br />Automatic Updates <br />微软： 启用重要 Windows 更新的下载及安装。如果停用此服务，可以手动的从 Windows Update 网站上更新操作系统。 <br />补充： 允许 Windows 于背景自动联机之下，到 Microsoft Servers 自动检查和下载更新修补程序 <br />建议： 已停用 <br />  <br />Background Intelligent Transfer Service <br />微软： 使用闲置的网络频宽来传输数据。 <br />补充： 经由 Via HTTP1.1 在背景传输资料的?#124;西，例如 Windows Update 就是以此为工作之一 <br />依存： Remote Procedure Call (RPC) 和 Workstation <br />建议： 已停用 <br />  <br />ClipBook (剪贴簿) <br />微软： 启用剪贴簿检视器以储存信息并与远程计算机共享。如果这个服务被停止，剪贴簿检视器将无法与远程计算机共享信息。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 把剪贴簿内的信息和其它台计算机分享，一般家用计算机根本用不到 <br />依存： Network DDE <br />建议： 已停用 <br />  <br />COM+ Event System (COM+ 事件系统) <br />微软： 支持「系统事件通知服务 (SENS)」，它可让事件自动分散到订阅的 COM 组件。如果服务被停止，SENS 会关闭，并无法提供登入及注销通知。如果此服务被停用，任何明显依存它的服务都无法启动。 <br />补充： 有些程序可能用到 COM+ 组件，像 BootVis 的 optimize system 应用，如事件检视器内显示的 DCOM 没有启用 <br />依存： Remote Procedure Call (RPC) 和 System Event Notification <br />建议： 手动 <br />  <br />COM+ System Application <br />微软： 管理 COM+ 组件的设定及追踪。如果停止此服务，大部分的 COM+ 组件将无法适当?#092;作。如果此服务被停用，任何明确依存它的服务将无法启动。 <br />补充： 如果 COM+ Event System 是一台车，那么 COM+ System Application 就是司机，如事件检视器内显示的 DCOM 没有启用 <br />依存： Remote Procedure Call (RPC) <br />建议： 手动 <br />  <br />Computer Browser (计算机浏览器) <br />微软： 维护网络上更新的计算机清单，并将这个清单提供给做为浏览器的计算机。如果停止这个服务，这个清单将不会被更新或维护。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 一般家庭用计算机不需要，除非你的计算机应用在区网之上，不过在大型的区网上有必要开这个拖慢速度吗？ <br />依存： Server 和 Workstation <br />建议： 已停用 <br />  <br />Cryptographic Services <br />微软： 提供三个管理服务: 确认 Windows 档案签章的 [类别目录数据库服务]; 从这个计算机新增及移除受信任根凭证授权凭证的 [受保护的根目录服务]; 以及协助注册这个计算机以取得凭证的 [金钥服务]。如果这个服务被停止，这些管理服务将无法正确工作。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 简单的说就是 Windows Hardware Quality Lab (WHQL)微软的一种认证，如果你有使用 Automatic Updates ，那你可能需要这个 <br />依存： Remote Procedure Call (RPC) <br />建议： 手动 <br />  <br />DHCP Client (DHCP 客户端) <br />微软： 透过登录及更新 IP 地址和 DNS 名称来管理网络设定。 <br />补充： 使用 DSL/Cable 、ICS 和 IPSEC 的人都需要这个来指定动态 IP <br />依存： AFD 网络支持环境、NetBT、SYMTDI、TCP/IP Protocol Driver 和 NetBios over TCP/IP <br />建议： 手动 <br />  <br />Distributed Link Tracking Client (分布式连结追踪客户端) <br />微软： 维护计算机中或网络网域不同计算机中 NTFS 档案间的连结。 <br />补充： 维护区网内不同计算机之间的档案连结 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Distributed Transaction Coordinator (分布式交易协调器) <br />微软： 协调跨越多个资源管理员的交易，比如数据库、讯息队列及档案系统。如果此服务被停止，这些交易将不会发生。如果服务被停用，任何明显依存它的服务将无法启动。 <br />补充： 如上所说的，一般家庭用计算机用不太到，除非你启用的 Message Queuing <br />依存： Remote Procedure Call (RPC) 和 Security Accounts Manager <br />建议： 已停用 <br />  <br />DNS Client (DNS 客户端) <br />微软： 解析并快取这台计算机的网域名称系统 (DNS) 名称。如果停止这个服务，这台计算机将无法解析 DNS 名称并寻找 Active Directory 网域控制站的位置。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 如上所说的，另外 IPSEC 需要用到 <br />依存： TCP/IP Protocol Driver <br />建议： 手动 <br />  <br />Error Reporting Service <br />微软： 允许对执行于非标准环境中的服务和应用程序的错误报告。 <br />补充： 微软的应用程序错误报告 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Event Log (事件记录文件) <br />微软： 启用 Windows 为主的程序和组件所发出的事件讯息可以在事件检视器中检视。这个服务不能被停止。 <br />补充： 允许事件讯息显示在事件检视器之上 <br />依存： Windows Management Instrumentation <br />建议： 自动 <br />  <br />Fast User Switching Compatibility <br />微软： 在多使用者环境下提供应用程序管理。 <br />补充： 另外像是注销画面中的切换使用者功能 <br />依存： Terminal Services <br />建议： 手动 <br />  <br />Help and Support <br />微软： 让说明及支持中心能够在这台计算机上执行。如果这个服务停止，将无法使用说明及支持中心。如果这个服务被停用，它的所有依存服务将无法启动。 <br />补充： 如果不使用就关了吧 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Human Interface Device Access <br />微软： 启用对人性化接口装置 (HID) 的通用输入存取，HID 装置启动并维护对这个键盘、远程控制、以及其它多媒体装置上事先定义的快捷纽的使用。如果这个服务被停止，这个服务控制的快捷纽将不再起作用。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 如上所提到的 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />IMAPI CD-Burning COM Service <br />微软： 使用 Image Mastering Applications Programming Interface (IMAPI) 来管理光盘录制。如果这个服务被停止，这个计算机将无法录制光盘。如果这个服务被停用，任何明确地依赖它的服务将无法启动。 <br />补充： XP 整合的 CD-R 和 CD-RW 光驱上拖放的烧录功能，可惜比不上烧录软件，关掉还可以加快 Nero 的开启速度 <br />建议： 已停用 <br />  <br />Indexing Service (索引服务) <br />微软： 本机和远程计算机的索引内容和档案属性; 透过弹性的查询语言提供快速档案存取。 <br />补充： 简单的说可以让你加快搜查速度，不过我想应该很少人和远程计算机作搜寻吧 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) <br />微软： 为您的家用网络或小型办公室网络提供网络地址转译、寻址及名称解析服务和/或防止干扰的服务。 <br />补充： 如果你不使用因特网联机共享(ICS)或是 XP 内含的因特网联机防火墙(ICF)你可以关掉 <br />依存： Application Layer Gateway Service、Network Connections、Network Location Awareness(NLA)、Remote Access Connection Manager <br />建议： 已停用 <br />  <br />IPSEC Services (IP 安全性服务) <br />微软： 管理 IP 安全性原则并启动 ISAKMP/Oakley (IKE) 及 IP 安全性驱动程序。 <br />补充： 协助保护经由网络传送的数据。IPSec 为一重要环节，为虚拟私人网络 (VPN) 中提供安全性，而 VPN 允许组织经由因特网安全地传输数据。在某些网域上也许需要，但是一般使用者大部分是不太需要的 <br />依存： IPSEC driver、Remote Procedure Call (RPC)、TCP/IP Protocol Driver <br />建议： 手动 <br />  <br />Logical Disk Manager (逻辑磁盘管理员) <br />微软： 侦测及监视新硬盘磁盘，以及传送磁盘区信息到逻辑磁盘管理系统管理服务以供设定。如果这个服务被停止，动态磁盘状态和设定信息可能会过时。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 磁盘管理员用来动态管理磁盘，如显示磁盘可用空间等和使用 Microsoft Management Console(MMC)主控台的功能 <br />依存： Plug and Play、Remote Procedure Call (RPC)、Logical Disk Manager Administrative Service <br />建议： 自动 <br />  <br />Logical Disk Manager Administrative Service (逻辑磁盘管理员系统管理服务) <br />微软： 设定硬盘磁盘及磁盘区，服务只执行设定程序然后就停止。 <br />补充： 使用 Microsoft Management Console(MMC)主控台的功能时才用到 <br />依存： Plug and Play、Remote Procedure Call (RPC)、Logical Disk Manager <br />建议： 手动 <br />  <br />Messenger (信差) <br />微软： 在客户端及服务器之间传输网络传送及 [Alerter] 服务讯息。这个服务与 Windows Messenger 无关。如果停止这个服务，Alerter 讯息将不会被传输。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 允许网络之间互相传送提示讯息的功能，如 net send 功能，如不想被骚扰话可关了 <br />依存： NetBIOS Interface、Plug and Play、Remote Procedure Call (RPC)、Workstation <br />建议： 已停用 <br />  <br />MS Software Shadow Copy Provider <br />微软： 管理磁盘区阴影复制服务所取得的以软件为主的磁盘区阴影复制。如果停止这个服务，就无法管理以软件为主的磁盘区阴影复制。如果停用这个服务，任何明确依存于它的服务将无法启动。 <br />补充： 如上所说的，用来备份的?#124;西，如 MS Backup 程序就需要这个服务 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Net Logon <br />微软： 支持网域上计算机的账户登入事件的 pass-through 验证。 <br />补充： 一般家用计算机不太可能去用到登入网域审查这个服务 <br />依存： Workstation <br />建议： 已停用 <br />  <br />NetMeeting Remote Desktop Sharing (NetMeeting 远程桌面共享) <br />微软： 让经过授权的使用者可以使用 NetMeeting 透过公司近端内部网络，由远程访问这部计算机。如果这项服务停止的话，远程桌面共享功能将无法使用。如果服务停用的话，任何依赖它的服务将无法启动。 <br />补充： 如上说的，让使用者可以将计算机的控制权分享予网络上或因特网上的其它使用者，如果你重视安全性不想多开后门，就关了吧 <br />建议： 已停用 <br />  <br />Network Connections (网络联机) <br />微软： 管理在网络和拨号联机数据夹中的对象，您可以在此数据夹中检视局域网络和远程联机。 <br />补充： 控制你的网络联机 <br />依存： Remote Procedure Call (RPC)、Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) <br />建议： 手动 <br />  <br />Network DDE (网络 DDE) <br />微软： 为动态数据交换 (DDE) 对在相同或不同计算机上执行的程序提供网络传输和安全性。如果这个服务被停止，DDE 传输和安全性将无法使用。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 一般人好像用不到 <br />依存： Network DDE DSDM、ClipBook <br />建议： 已停用 <br />  <br />Network DDE DSDM (网络 DDE DSDM) <br />微软： 讯息动态数据交换 (DDE) 网络共享。如果这个服务被停止，DDE 网络共享将无法使用。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 一般人好像用不到 <br />依存： Network DDE <br />建议： 已停用 <br />  <br />Network Location Awareness (NLA) <br />微软： 收集并存放网络设定和位置信息，并且在这个信息变更时通知应用程序。 <br />补充： 如果不使用 ICF 和 ICS 可以关了它 <br />依存： AFD网络支持环境、TCP/IP Procotol Driver、Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS) <br />建议： 已停用 <br />  <br />NT LM Security Support Provider (NTLM 安全性支持提供者) <br />微软： 为没有使用命名管道传输的远程过程调用 (RPC) 程序提供安全性。 <br />补充： 如果不使用 Message Queuing 或是 Telnet Server 那就关了它 <br />依存： Telnet <br />建议： 已停用 <br />  <br />Performance Logs and Alerts (效能记录文件及警示) <br />微软： 基于事先设定的排程参数，从本机或远程计算机收集效能数据，然后将数据写入记录或?#124;发警讯。如果这个服务被停止，将不会收集效能信息。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 没什么价值的服务 <br />建议： 已停用 <br />  <br />Plug and Play (随插随用) <br />微软： 启用计算机以使用者没有或很少的输入来识别及适应硬件变更，停止或停用这个服务将导致系统不稳定。 <br />补充： 顾名思义就是 PNP 环境 <br />依存： Logical Disk Manager、Logical Disk Manager Administrative Service、Messenger、Smart Card、Telephony、Windows Audio <br />建议： 自动 <br />  <br />Portable Media Serial Number <br />微软： Retrieves the serial number of any portable music player connected to your computer <br />补充： 透过联机计算机重新取得任何音乐拨放序号？没什么价值的服务 <br />建议： 已停用 <br />  <br />Print Spooler (打印多任务缓冲处理器) <br />微软： 将档案加载内存中以待稍后打印。 <br />补充： 如果没有打印机，可以关了 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Protected Storage (受保护的存放装置) <br />微软： 提供受保护的存放区，来储存私密金钥这类敏感数据，防止未授权的服务、处理、或使用者进行存取。 <br />补充： 用来储存你计算机上密码的服务，像 Outlook、拨号程序、其它应用程序、主从架构等等 <br />依存： Remote Procedure Call (RPC) <br />建议： 自动 <br />  <br />QoS RSVP (QoS 许可控制，RSVP) <br />微软： 提供网络讯号及区域流量控制安装功能给可识别 QoS 的程序和控制小程序项。 <br />补充： 用来保留 20% 频宽的服务，如果你的网络卡不支持 802.1p 或在你计算机的网域上没有 ACS server ，那么不用多说，关了它 <br />依存： AFD网络支持环境、TCP/IP Procotol Driver、Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Remote Access Auto Connection Manager (远程访问自动联机管理员) <br />微软： 当程序参照到远程 DNS 或 NetBIOS 名称或地址时，建立远程网络的联机。 <br />补充： 有些 DSL/Cable 提供者，可能需要用此来处理登入程序 <br />依存： Remote Access Connection Manager、Telephony <br />建议： 手动 <br />  <br />Remote Access Connection Manager (远程访问联机管理员) <br />微软： 建立网络联机。 <br />补充： 网络联机用 <br />依存： Telephony、Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS)、Remote Access Auto Connection Manager <br />建议： 手动 <br />  <br />Remote Desktop Help Session Manager <br />微软： 管理并控制远程协助。如果此服务停止的话，远程协助将无法使用。停止此服务之前，请先参阅内容对话框中的 [依存性]标签。 <br />补充： 如上说的管理和控制远程协助，如果不使用可以关了 <br />依存： Remote Procedure Call (RPC) <br />建议： Disable <br />  <br />Remote Procedure Call (RPC) (远程过程调用，RPC) <br />微软： 提供结束点对应程序以及其它 RPC 服务。 <br />补充： 一些装置都依存它，别去动它 <br />依存： 太多了，自己去看看 <br />建议： 自动 <br />  <br />Remote Procedure Call (RPC) Locator (远程过程调用定位程序) <br />微软： 管理 RPC 名称服务数据库。 <br />补充： 如上说的，一般计算机上很少用到，可以尝试关了 <br />依存： Workstation <br />建议： Disable <br />  <br />Remote Registry (远程登录服务) <br />微软： 启用远程使用者修改这个计算机上的登录设定。如果这个服务被停止，登录只能由这个计算机上的使用者修改。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 基于安全性的理由，如果没有特别的需求，建议最好关了它，除非你需要远程协助修改你的登录设定 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Removable Storage (卸除式存放装置) <br />微软： None <br />补充： 除非你有 Zip 磁盘驱动器或是 USB 之类可携式的硬件或是 Tape 备份装置，不然可以尝试关了 <br />依存： Remote Procedure Call (RPC) <br />建议： Disable <br />  <br />Routing and Remote Access (路由和远程访问) <br />微软： 提供连到局域网络及广域网络的公司的路由服务。 <br />补充： 如上说的，提供拨号联机到区网或是 VPN 服务，一般用户用不到 <br />依存： Remote Procedure Call (RPC)、NetBIOSGroup <br />建议： 已停用 <br /><br />Secondary Logon <br />微软： 启用在其它认证下的起始程序。如果这个服务被停止，这类的登入存取将无法使用。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 允许多个使用者处理程序，执行分身等 <br />建议： 自动 <br />  <br />Security Accounts Manager (安全性账户管理员) <br />微软： 储存本机账户的安全性信息。 <br />补充： 管理账号和群组原则(gpedit.msc)应用 <br />依存： Remote Procedure Call (RPC)、Distributed Transaction Coordinator <br />建议： 自动 <br />  <br />Server (服务器) <br />微软： 透过网络为这台计算机提供档案、打印、及命名管道的共享。如果停止这个服务，将无法使用这些功能。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 简单的说就是档案和打印的分享，除非你有和其它计算机分享，不然就关了 <br />依存： Computer Browser <br />建议： 已停用 <br />  <br />Shell Hardware Detection <br />微软： 为自动播放硬件事件提供通知。 <br />补充： 一般使用在记忆卡或是CD装置、DVD装置上 <br />依存： Remote Procedure Call (RPC) <br />建议： 自动 <br />  <br />Smart Card (智慧卡) <br />微软： 管理这个计算机所读取智能卡的存取。如果这个服务被停止，这个计算机将无法读取智能卡。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 如果你不使用 Smart Card ，那就可以关了 <br />依存： Plug and Play <br />建议： 已停用 <br />  <br />Smart Card Helper (智能卡协助程序) <br />微软： 启用对这个计算机使用的旧版非随插即用智能卡读取头的支持。如果这个服务被停止，这个计算机将不支持旧版读取头。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 如果你不使用 Smart Card ，那就可以关了 <br />建议： 已停用 <br />  <br />SSDP Discovery Service <br />微软： 在您的家用网络上启用通用随插即用装置的搜索。 <br />补充： 如上说的，通用随插即用服务 (Universal Plug and Play, UPnP) 让计算机可以找到并使用网络上的装置，经由网络联机透过 TCP/IP 来搜索装置，像网络上的扫瞄器、数字相机或是打印机，亦即使用 UPnP 的功能，基于安全性没用到的大可关了 <br />依存： Universal Plug and Play Device Host <br />建议： 已停用 <br />  <br />System Event Notification (系统事件通知) <br />微软： 追踪诸如 Windows 登入、网络、和电源事件的系统事件。通知这些事件的 COM+ 事件系统订阅者。 <br />补充： 如上所说的 <br />依存： COM+ Event System <br />建议： 自动 <br />  <br />System Restore Service <br />微软： 执行系统还原功能。若要停止服务，从我的计算机->内容，[系统还原] 中关闭系统还原 <br />补充： 将计算机回复至先前的状态，不使用就关了 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Task Scheduler (工作排程器) <br />微软： 让使用者能够在这个计算机上设定和排定自动的工作。如果停止这个服务，这些工作在它们排定的时间时将不会执行。如果停用这个服务，任何明确依存于它的服务将无法启动。 <br />补充： 设定排定自动的工作，像一些定时磁盘扫瞄、病毒定时扫瞄、更新等等 <br />依存： Remote Procedure Call (RPC) <br />建议： 自动 <br />  <br />TCP/IP NetBIOS Helper (TCP/IP NetBIOS 协助程序) <br />微软： 启用 [NetBIOS over TCP/IP (NetBT)] 服务及 NetBIOS 名称解析的支持。 <br />补充： 如果你的网络不使用 NetBios 或是 WINS ，你大可关闭 <br />依存： AFD 网络支持环境、NetBt <br />建议： 已停用 <br />  <br />Telephony (电话语音) <br />微软： 为本机计算机上及经由局域网络连接到正在执行此服务的服务器上，控制电话语音装置和 IP 为主语音联机的程序，提供电话语音 API (TAPI) 支持。 <br />补充： 一般的拨号调制解调器或是一些 DSL/Cable 可能用到 <br />依存： Plug and Play、Remote Procedure Call (RPC)、Remote Access Connection Manager、Remote Access Auto Connection Manager <br />建议： 手动 <br />  <br />Telnet <br />微软： 启用一个远程使用者来登入到这台计算机和执行应用程序，以及支持各种 TCP/IP Telnet 客户端，包含以 UNIX 为基本和以 Windows 为基本的计算机。如果服务停止了，远程使用者可能无法存取应用程序。如果服务停用了，任何明确地依存于这项服务的其它服务将会启动失败。 <br />补充： 允许远程使用者用 Telnet 登入本计算机，一般人会误解关了就无法使用BBS，这其实和BBS无关，基于安全性的理由，如果没有特别的需求，建议最好关了 <br />依存： NT LM Security Support Provider、Remote Procedure Call (RPC)、TCP/IP Protocol Driver <br />建议： 已停用 <br />  <br />Terminal Services (终端机服务) <br />微软： 允许多位使用者互动连接到同一部计算机、桌面的显示器及到远程计算机的应用程序。远程桌面的加强 (包含系统管理员的 RD)、快速切换使用者、远程协助和终端机服务器。 <br />补充： 远程桌面或是远程协助的功能，不需要就关了 <br />依存： Remote Procedure Call (RPC)、Fast User Switching Compatibility、InteractiveLogon <br />建议： 已停用 <br />  <br />Themes <br />微软： 提供使用者经验主题管理。 <br />补充： 很多人使用布景主题，不过如果没有使用的人，那就可以关闭 <br />建议： 自动 <br />  <br />Uninterruptible Power Supply (不断电供电系统) <br />微软： 管理连接到这台计算机的不断电电源供应 (UPS)。 <br />补充： 不断电电源供应 (UPS)一般人有用到吗？除非你的电源供应器有具备此功能，不然就关了 <br />建议： 已停用 <br />  <br />Universal Plug and Play Device Host <br />微软： 提供主机通用随插即用装置的支持。 <br />补充： 用来侦测安装通用随插即用服务 (Universal Plug and Play, UPnP)装置，像是数字相机或打印机 <br />依存： SSDP Discovery Service <br />建议： 已停用 <br />  <br />Volume Shadow Copy <br />微软： 管理及执行用于备份和其它目的的磁盘区卷影复制。如果这个服务被停止，卷影复制将无法用于备份，备份可能会失败。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 如上所说的，用来备份的?#124;西，如 MS Backup 程序就需要这个服务 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />WebClient <br />微软： 启用 Windows 为主的程序来建立、存取，以及修改因特网为主的档案。如果停止这个服务，这些功能将无法使用。如果停用这个服务，任何明确依存于它的服务将无法启动。 <br />补充： 使用 WebDAV 将档案或数据夹上载到所有的 Web 服务，基于安全性的理由，你可以尝试关闭 <br />依存： WebDav Client Redirector <br />建议： 已停用 <br />  <br />Windows Audio <br />微软： 管理用于 Windows 为主程序的音讯装置。如果这个服务被停止，音讯装置和效果将无法正常?#092;作。如果这个服务被停用，任何明确依存于它的服务将无法启动。 <br />补充： 如果你没有声卡可以关了他 <br />依存： Plug and Play、Remote Procedure Call (RPC) <br />建议： 自动 <br />  <br />Windows Image Acquisition (WIA) (Windows影像取得程序) <br />微软： 为扫描仪和数字相机提供影像撷取服务。 <br />补充： 如果扫描仪和数字相机内部具有支持WIA功能的话，那就可以直接看到图档，不需要其它的驱动程序，所以没有扫描仪和数字相机的使用者大可关了 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />Windows Installer (Windows 安装程序) <br />微软： 根据包含在 .MSI 档案内的指示来安装，修复以及移除软件。 <br />补充： 是一个系统服务，协助使用者正确地安装、设定、追踪、升级和移除软件程序，可管理应用程序建立和安装的标准格式，并且追踪例如档案群组、登录项目及快捷方式等组件 <br />依存： Remote Procedure Call (RPC) <br />建议： 手动 <br />  <br />Windows Management Instrumentation (WMI) <br />微软： 提供公用接口及对象模型，以存取有关操作系统、装置、应用程序及服务的管理信息。如果这个服务已停止，大多数的 Windows 软件将无法正常?#092;作。如果这个服务已停用，所有依存于它的服务都将无法启动。 <br />补充： 如上说的，是一种提供一个标准的基础结构来监视和管理系统资源的服务，由不得你动他 <br />依存： Event Log、Remote Procedure Call (RPC) <br />建议： 自动 <br />  <br />Windows Management Instrumentation Driver Extensions (Windows Management Instrumentation 驱动程序延伸) <br />微软： 提供系统管理信息给予/取自驱动程序。 <br />补充： Windows Management Instrumentation 的延伸，提供信息用的 <br />建议： 手动 <br />  <br />Windows Time (Windows 时间设定) <br />微软： 维护在网络上所有客户端及服务器的数据及时间同步处理。如果这个服务停止，将无法进行日期及时间同步处理。如果这个服务被停用，所有依存的服务都会停止。 <br />补充： 网络对时校准用的，没必要就关了 <br />建议： 已停用 <br />  <br />Wireless Zero Configuration <br />微软： 为 802.11 适配卡提供自动设定 <br />补充： 自动配置无线网络装置，言下之意就是说，除非你有在使用无线网络适配卡装置，那么你才有必要使用这个网络零管理服务 <br />依存： NDIS Usermode I/O Protocol、Remote Procedure Call (RPC) <br />建议： 已停用 <br />  <br />WMI Performance Adapter <br />微软： 提供来自 WMIHiPerf 提供者的效能链接库信息。 <br />补充： 如上所提 <br />依存： Remote Procedure Call (RPC) <br />建议： 已停用l <br />  <br />Workstation (工作站) <br />微软： 建立并维护到远程服务器的客户端网络联机。如果停止这个服务，这些联机将无法使用。如果停用这个服务，所有依存于它的服务将无法启动。 <br />补充： 因特网联机中所必要的一些功能 <br />依存： Alerter、Background Intelligent Transfer Service、Computer Browser、Messenger、Net Logon、Remote Procedure Call (RPC) Locator <br />建议： 自动
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/91224#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 17 Jun 2007 09:40:49 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/91224</link>
        <guid>http://fuhao9611.javaeye.com/blog/91224</guid>
      </item>
      <item>
        <title>如何让Aptana支持中文</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/85931" style="color:red;">http://fuhao9611.javaeye.com/blog/85931</a>&nbsp;
          发表时间: 2007年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Aptana的好处我在这里就不啰唆了，其目前的稳定版本是0.2.7.13245，想必大家都使用的是这个版本，你一定会发现这个版本对中文的支持很垃圾，这里介绍一种方法，使得Apatana能够很好的支持中文。<br />在Apatana的网站上<a href="http://www.aptana.org/docs/index.php/Changing_the_Aptana_IDE_interface_to_a_different_language" target="_blank">http://www.aptana.org/docs/index.php/Changing_the_Aptana_IDE_interface_to_a_different_language</a>介绍少要想自定义语言，需要升级到0.2.8.13587或更高。而这个版本是未正式发布的叫做next的版本。<br />一：Window菜单 –> Preferences ;<br />二：展开Install/Update选项，选择Aptana Automatic Updates如下图所示：<img src="http://fuhao9611.javaeye.com/upload/picture/pic/3615/9dc089c7-3bcf-40bf-940c-63e3431336b1.jpg" /><br />三：选择Next Release candidate，单击Apply--OK按钮。<br />四：Help –> Check for Aptana Update，然后next，等待下载升级版本。<br />五：升级完毕后，重新进入Window –> Preferences –> Aptana –> Editors，把 Optimize profile reparsing 选上，把 Enable Unicode support (requires restart) 选上，如下图所示：<img src="http://fuhao9611.javaeye.com/upload/picture/pic/3616/8d598a21-542a-4d5b-804a-37d60ef19c1f.jpg" /><br />六：OK了，^_^！！
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/85931#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Jun 2007 17:20:41 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/85931</link>
        <guid>http://fuhao9611.javaeye.com/blog/85931</guid>
      </item>
      <item>
        <title>Ajax+Jsp+Access实现的唯一性校验例子</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/78970" style="color:red;">http://fuhao9611.javaeye.com/blog/78970</a>&nbsp;
          发表时间: 2007年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如标题，Ajax+Jsp+Access实现的唯一性校验例子，这里主要说明的是Ajax的原理，为了使得大家把例子下载下来就能运行，所以使用Access数据库，而且不需要配置数据源头，使用Tomcat发布就可以啦！<br />主要代码如下：<br /><strong>check.js:</strong><br /><br /><pre name="code" class="java">
/**
 * @author fuhao
 */

var http_request = false ;
// 向服务器发起XMLHTTP请求
function send_request(){
	// 获得文本框里面输入的用户名
	var loginname=document.getElementById("userName").value;
	// 要请求的服务器地址
	url="check.jsp?userName="+loginname;
	http_request = false ;
	// 开始初始化XMLHttpRequest对象
	if(window.XMLHttpRequest){ // 说明是Mozila浏览器
		http_request = new XMLHttpRequest();
		if(http_request.ovverideMimeType){ // 设置MiME类别
			http_request.ovverideMimeType('text/xml');
		}
	}
	else if(window.ActiveXObject){ //说明是IE浏览器
		try{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}
	if(!http_request){ // 异常，创建对象实例失败
		alert("创建XMLHttpRequest对象失败");
		return false ;
	}
	http_request.onreadystatechange = callback ;
	// 确定发送请求的方式和URL
	http_request.open("GET",url,true);
	http_request.send(null);
}
// 处理返回信息的函数
function callback(){
	if(http_request.readystate == 4){ // 判断对象状态
		if(http_request.status == 200 ){ // 说明信息已经成功的返回
			displays();
		}else{
			alert("从服务器返回的状态是:"+http_request.statusText);	
		}
	}else{
		document.getElementById("div").style.display = "";
	}
}
function displays(){
	var div = document.getElementById("div");
	div.innerHTML = http_request.responseText ;	
	
}
function docheck(){
	var loginname=document.getElementById("userName").value;
	document.getElementById("div").style.display = "none";
	if(loginname==""){ // 判断文本框是否为空
		document.getElementById("div").style.display = "none";
		return false;
	}else{
		document.getElementById("div").style.display = "";
		// 为了观察效果，设置延迟
		setTimeout(send_request,3000);	
	}
}
</pre><br /><strong>服务器端代码，check.jsp:</strong><br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK" import="java.sql.*" %>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK">
&lt;title>Insert title here&lt;/title>
&lt;/head>
&lt;body>
&lt;%
// 获得客户端传来的用户名
String userName = request.getParameter("userName");
System.out.println("useName:"+userName);
// 获得Access数据库的绝对路径
String realpath = "data/database.mdb";
// 获得Access数据库的相对路径
String dbpath = application.getRealPath(realpath);
// 设置数据库连接的字符串
String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+dbpath;
// 加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 建立数据库连接
Connection conn=DriverManager.getConnection(url);
// 创建语句对象
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql="";
// 创建查询数据库的SQL语句
sql="select * from user where user_Name='" +userName+ "'";
System.out.println("sql:"+sql);
// 得到数据集
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
	out.println("对不起，该用户名已经被注册了");	
}else{
	out.println("恭喜你，该用户名可以注册");	
}
// 关闭数据库连接
rs.close();
stmt.close();
conn.close();
%>
&lt;/body>
&lt;/html>
</pre><br /><strong>客户端代码，index.html:</strong><br /><pre name="code" class="java">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK">
&lt;title>测试校验&lt;/title>
&lt;LINK media=all href="css/style.css" type=text/css rel=stylesheet>
&lt;script type="text/javascript" src="js/check.js" >&lt;/script>
&lt;/head>
&lt;body>
&lt;form action="" method="" >
&lt;br />&lt;br />&lt;br />&lt;p align="center">&lt;font color="green" size="4">Ajax+Jsp+Access 唯一性校验例子&lt;/font>&lt;/p>
&lt;table align='center' border='1' bordercolor='#8CB3E3' width="55%" cellpadding='0' cellspacing='0'>
	&lt;tbody id="tbodyid">
		&lt;tr>
			&lt;td nowrap class="data_tab_tdr" width="10%">用户名：&lt;/td>  
			&lt;td class="data_tab_tdl" width="15%">
				&lt;input type="text" name="userName" size="25" id="userName" onchange="docheck()" />
			&lt;/td>
			&lt;td class="data_tab_tdl" width="15%">&lt;div id="div" style="display:none">&lt;img src="images/ajax-loader.gif">&lt;/div>&lt;/td>
		&lt;/tr>
	&lt;/tbody>
&lt;/table>
&lt;/form>
&lt;/body>
&lt;/html>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/78970#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 May 2007 23:06:40 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/78970</link>
        <guid>http://fuhao9611.javaeye.com/blog/78970</guid>
      </item>
      <item>
        <title>如何使用google的真正功能</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/78788" style="color:red;">http://fuhao9611.javaeye.com/blog/78788</a>&nbsp;
          发表时间: 2007年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果大家稍有留意，你会发现每次当输入www.google.com会自动跳转到http://www.google.com/intl/zh-CN/上。有没有觉得很奇怪，其实这个是被国家防火墙过滤过的google，所以大家搜索的东西，并不是google所有的东西，你会发现在网页的左下角出现“<span style="color: red">据当地法律法规和政策，部分搜索结果未予显示</span>”，此时一定很郁闷<img src="/images/smiles/icon_cry.gif"/>，如何能够使用正版的google呢？方法有两个：<br />   第一：使用代理，这个比较麻烦，需要去找国外的免费代理服务器，不推荐此方法。<br />   第二：登陆https://www.fsurf.com这个网站，你会发现这里是https不是http,然后通过这个加密过的网站就可以访问真正的google了，通过这个方法你也可以访问一些被国家防火墙过滤掉的外国网站，赶紧试下吧！<br />对了，我申明一点呀，请大家不要通过这个方法去访问什么非法网站，要不然警察叔叔会去找你滴！不要说我没有提醒你，呵呵！
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/78788#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 May 2007 09:04:40 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/78788</link>
        <guid>http://fuhao9611.javaeye.com/blog/78788</guid>
      </item>
      <item>
        <title>无聊的假期</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/77577" style="color:red;">http://fuhao9611.javaeye.com/blog/77577</a>&nbsp;
          发表时间: 2007年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天是五一长假的最后一天，这七天我过的可真是郁闷，本来打算要干很多的事情，但是现在才发现计划的事情一件都没有实现，不知道怎么搞的，就象烂泥一样，晚上睡的很晚，早上起来的更加晚，不知道该干什么，什么也不想干，打开电脑，看完新闻，不知道该干什么，游戏对我没有任何的吸引，没有特别喜欢听的音乐……，打开电视，全部充斥的是一些劣质的虚无缥缈的烂电视剧，要么就是俗的不能再俗的综艺节目，要么就是垃圾广告，什么“脑白金”，“高钙片”的，恨不得把电视机给砸了！好不容易有个想法出去走走，MD坐车的人总是那么的多，太阳很大，到处都是人，人挤人，没有意思。这假期过的真是郁闷无比。希望时间过的快点，这下好了，今天收拾一下，准备明天开始上班！
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/77577#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 May 2007 21:01:37 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/77577</link>
        <guid>http://fuhao9611.javaeye.com/blog/77577</guid>
      </item>
      <item>
        <title>Asp.Net实现增删改以及分页例子二</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/75003" style="color:red;">http://fuhao9611.javaeye.com/blog/75003</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          接上篇，已经完成数据库的连接，以及增删改方法的编码，接下来就是如何在前台绑定数据了。<br />首先是如何将数据显示在列表上，这里微软做的很完美了，几乎不需要动手就可以实现数据的绑定：<br /><strong>JobsList.aspx：</strong><br />如图：<img src="http://fuhao9611.javaeye.com/upload/picture/pic/3102/454d130c-f8e3-4659-82c8-39239bdb4ff9.jpg" /><br />将DataGrid控件拖到JobsList.aspx上，点右键，选择<strong>自动套用格式</strong>这样可以选择美化界面，然后点右键选择<strong>属性生成器</strong>，在这里做一些绑定数据的操作，如图所示：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/3103/311aa1b7-d3bf-45a0-918c-754a110f546d.jpg" /><br />接下来是分页，如图所示：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/3104/39b04da0-a2bc-484a-9245-35234cdf5459.jpg" /><br />OK，至此完成页面处理，现在在JobsList.aspx.cs里面实现数据绑定。<br /><strong>JobsList.aspx.cs：</strong><br /><pre name="code" class="java">
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Zsgc.DataBaseManage;
using Zsgc.Op;
using Zsgc.Models;
//显示数据列表的页面
namespace Zsgc
{

	public class JobsList : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.DataGrid dg;
		private DataTable dt;
		private JobsOpt jobsopt;
		protected System.Web.UI.WebControls.LinkButton lbfirst;
		protected System.Web.UI.WebControls.LinkButton lbshang;
		protected System.Web.UI.WebControls.LinkButton lbnext;
		protected System.Web.UI.WebControls.LinkButton lbend;
		protected System.Web.UI.WebControls.Label lbl;
		private JobsModel jobsmodel;

		private void Page_Load(object sender, System.EventArgs e)
		{
			//全查数据
			jobsopt=new JobsOpt();
			dt=jobsopt.getList();
			if(!this.IsPostBack)
			{
				bd();
			}

		}

		//数据绑定
		public void bd()
		{
			dg.DataSource=dt;
			dg.DataBind();
			lbl.Text=string.Format("当前第{0}页,共{1}页",dg.CurrentPageIndex+1,dg.PageCount);
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// &lt;summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// &lt;/summary>
		private void InitializeComponent()
		{    
			this.dg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dg_PageIndexChanged);
			this.dg.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dg_CancelCommand);
			this.dg.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dg_EditCommand);
			this.dg.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dg_UpdateCommand);
			this.dg.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dg_DeleteCommand);
			this.lbshang.Click += new System.EventHandler(this.lbnext_Click);
			this.lbnext.Click += new System.EventHandler(this.lbnext_Click);
			this.lbend.Click += new System.EventHandler(this.lbnext_Click);
			this.lbfirst.Click += new System.EventHandler(this.lbnext_Click);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
		//简单分页
		private void dg_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
		{
			dg.CurrentPageIndex=e.NewPageIndex;
			bd();
		}
		//编辑一条数据 
		private void dg_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			dg.EditItemIndex=e.Item.ItemIndex;
			bd();
		}
		//取消编辑数据
		private void dg_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			dg.EditItemIndex=-1;
			bd();
		}
		//修改数据--不改变主键和描述的
		private void dg_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			//实例化jobsmodel
			jobsmodel=new JobsModel();
			//获取job_id,Cells[]表示行的单元格
			jobsmodel.Job_id=int.Parse(e.Item.Cells[0].Text);
			//Controls表示单元格cell的子控件
			TextBox tb=(TextBox)e.Item.Cells[2].Controls[0];
			//获取到min_lvl的值
			jobsmodel.Min_lvl=byte.Parse(tb.Text);
			tb=(TextBox)e.Item.Cells[3].Controls[0];
			//获取到max_lvl的值
			jobsmodel.Max_lvl=byte.Parse(tb.Text);
			//实例化操纵类jobsopt
			jobsopt=new JobsOpt();
			//调用修改方法
			Exception ex=jobsopt.Modify(jobsmodel);
			if(ex==null)
			{
				DBM.message("修改成功");
			}
			else
			{
				DBM.message("修改失败");
			}
			//表示修改成功后，停留在当前页面
			dg.EditItemIndex=-1;
			//重新绑定数据
			dt=jobsopt.getList();
			bd();
		}
		//根据主键删除一条记录
		private void dg_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			//实例化jobsmodel
			jobsmodel=new JobsModel();
			//取得该条数据的的编号
			string id=e.Item.Cells[0].Text;
			//实例化jobsopt
			jobsopt=new JobsOpt();
			//执行删除方法
			Exception ex=jobsopt.Delete(id);
			if(ex==null)
			{
				DBM.message("删除成功");
			}
			else
			{
				DBM.message("删除失败");
			}
			//重新绑定数据
			dt=jobsopt.getList();
			bd();
		}
		
		//自定义分页
		private void lbnext_Click(object sender, System.EventArgs e)
		{
			LinkButton lb=(LinkButton)sender;
			//获得当前页的索引
			int cp=dg.CurrentPageIndex;
			//获得DataGrid控件所需要的总页数
			int pcount=dg.PageCount;
		
			switch(lb.Text)
			{
				case "首页":
				//DBM.message("--:"+cp);
					cp=0;
					break;
				case "上一页":
					cp--;
					break;
				case "下一页":
					cp++;
					break;
				default:
					cp=pcount-1;
					break;
			}
			//如果索引大于总页数，那么索引就等于总页数减一
			if(cp>pcount-1) cp=pcount-1;
			//如果索引小于0，那么索引就等于0
			if(cp&lt;0) cp=0;
			//重新绑定数据
			dg.CurrentPageIndex=cp;
			bd();
			//根据情况确定按纽是否可用
			lbfirst.Enabled=true;
			lbshang.Enabled=true;
			lbnext.Enabled=true;
			lbend.Enabled=true;
			//说明是在在第一页上，那么首页和上一页两个按钮不能使用
			if(cp==0)
			{
				lbfirst.Enabled=false;
				lbshang.Enabled=false;
			}
			//说明当前页是在最后一页上，那么下一页和尾页按钮将不能使用
			if(cp==pcount-1)
			{
				lbnext.Enabled=false;
				lbend.Enabled=false;
			}

		}
	}
}
</pre><br />增加功能代码：<br /><strong>add.aspx.cs:</strong><br /><pre name="code" class="java">
private void Button1_Click(object sender, System.EventArgs e)
		{
			//实例化jobsopt
			JobsOpt jobsopt=new JobsOpt();
			//实例化jobsmodel
			JobsModel jobsmodel=new JobsModel();
			//获得jobs_desc的值
			jobsmodel.Job_desc=txtDesc.Text;
			//获得min_lvl的值
			jobsmodel.Min_lvl=byte.Parse(txtMin.Text);
			//获得max_lvl的值
			jobsmodel.Max_lvl=byte.Parse(txtMax.Text);
			//执行添加方法
			Exception ex=jobsopt.Add(jobsmodel);
			if(ex==null)
			{
				DBM.message("添加数据成功");
				//添加成功后跳转到列表页面
				Response.Redirect("JobsList.aspx");
			}
			else
			{
				DBM.message("添加数据失败");
			}
		}
</pre><br />修改功能代码如下：<br /><strong>update.aspx.cs:</strong><br /><pre name="code" class="java">
private void Page_Load(object sender, System.EventArgs e)
		{
			//实例化jobsmodel
			jobsmodel=new JobsModel();
			//实例化jobsopt
			jobsopt=new JobsOpt();
			//获取页面传来的id
			int id=int.Parse(System.Web.HttpContext.Current.Request["id"]);
			//获得一条数据的sql
			string sql="select * from jobs where job_id="+id;
			//执行查询数据
			dt=DBM.getList(sql);
			//绑定数据
			txtDesc.Text=dt.Rows[0][1].ToString();
			txtMin.Text=dt.Rows[0][2].ToString();
			txtMax.Text=dt.Rows[0][3].ToString();
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// &lt;summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// &lt;/summary>
		private void InitializeComponent()
		{    
			this.Button1.Click += new System.EventHandler(this.Button1_Click);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void Button1_Click(object sender, System.EventArgs e)
		{
			
			//实例化jobsmodel
			jobsmodel=new JobsModel();
			//实例化jobsopt
			jobsopt=new JobsOpt();
			jobsmodel.Job_desc=txtDesc.Text;
			jobsmodel.Min_lvl=byte.Parse(txtMin.Text);
			jobsmodel.Max_lvl=byte.Parse(txtMax.Text);
			//执行修改操作
			Exception ex=jobsopt.Update(jobsmodel);
			if(ex==null)
			{
				DBM.message("修改成功");
				Response.Redirect("JobsList.aspx");
			}
			else
			{
				DBM.message("修改失败");
			}
		}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/75003#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 13:11:02 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/75003</link>
        <guid>http://fuhao9611.javaeye.com/blog/75003</guid>
      </item>
      <item>
        <title>Asp.Net实现增删改以及分页例子一</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/74998" style="color:red;">http://fuhao9611.javaeye.com/blog/74998</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前天在项目组做了一个关于C#与Asp.Net的报告，说是报告，其实心里面比较惭愧，自己知道的那些东西，怎么能去给人家做报告，不过这是经理的意思，所以我也就~~~。准备了一个小例子，实现对一张表进行增，删，改以及分页操作。项目组的同事都很感慨，微软的东西实在是为程序员想的太多了。具体例子和幻灯片在附件里面提供下载。<br />下面将例子部分关键代码列出来：<br />由于我使用的是SQL Server 2000数据库，所以我这里就用pubs库里面的jobs表作为例子。<br />首先是连接数据库，在Web.config里面配置连接SQL数据库，这里其实和在Struts里面的struts-config.xml里面配置datasource是一样的道理：<br /><strong>Web.config.xml:</strong><br /><pre name="code" class="java">
&lt;appSettings>
   &lt;add key="connstring" value="server=.;uid=sa;pwd=;database=pubs">&lt;/add>
&lt;/appSettings>
</pre><br />接下来写一个连接数据库的公共的方法：<br /><strong>DBM.cs:</strong><br /><pre name="code" class="java">
using System;
using System.Data;
using System.Data.SqlClient; //引用命名空间，和java里面的import的作用是一样的

namespace Zsgc.DataBaseManage
{
	
	public class DBM
	{
		private SqlConnection conn;
		
		public SqlConnection getConn()
		{
			//创建与数据库的连接
			if(conn==null)
			{
				//从Web.config里面读取
				conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstring"]);
			}
			return conn;
		}
		//查询不带分页
		public static DataTable getList(string sql)
		{
			DBM dbm=new DBM();
			//适配器
			SqlDataAdapter sda=new SqlDataAdapter(sql,dbm.getConn());
			//实例化DataTable
			DataTable dt=new DataTable();
			//适配器将检索到的数据填充到dt里面
			sda.Fill(dt);
			//返回填充完数据的DataTable
			return dt;
		}
		//查询带分页的,start--起始页，size--每页几条数据
		public static DataTable getList(string sql,int start,int size)
		{
			DBM dbm=new DBM();
			//适配器
			SqlDataAdapter sda=new SqlDataAdapter(sql,dbm.getConn());
			//实例化DataSet
			DataSet ds=new DataSet();
			//适配器将检索到的数据填充到ds里面,jobs--表名
			sda.Fill(ds,start,size,"jobs");
			//获取包含在DataSet中的表名为“jobs”的表
			//返回填充完数据的DataTable
			return ds.Tables["jobs"];
		}
		//公共的执行方法
		public static Exception Execute(string sql)
		{
			DBM dbm=new DBM();
			//Command对象是用于检索、更新、插入、删除数据库中的数据
			SqlCommand cmd=new SqlCommand(sql,dbm.getConn());
			//实例化一个Exception
			Exception exception=null;
			//因为ADO.NET遵循的是断开式连接的数据模型
			//所以在使用Command对象的时候必须显式的打开数据库的连接
			cmd.Connection.Open();
			//数据库事务
			SqlTransaction stran=cmd.Connection.BeginTransaction();
			//开始事务
			cmd.Transaction=stran;
			try
			{
				//执行sql语句
				cmd.ExecuteNonQuery();
				//提交事务
				stran.Commit();
			}
			catch(Exception ex)
			{
				//返回错误信息
				exception=ex;
				//出现错误，事务回滚
				stran.Rollback();
			}
			finally
			{
				//关闭与数据库的连接
				cmd.Connection.Close();
			}
			//返回异常信息
			return exception;
		}
		//公共javascript提示信息
		public static void message(string msg)
		{
			System.Web.HttpContext.Current.Response.Write("&lt;script>alert('" +msg+ "');&lt;/script>");	
		}
	}
}
</pre><br />属性类：JobsModel.cs，将jobs表里面的字段都体现在这个里面，类似于FormBean，提供get(),set()方法。<br />接口类：ITFOpt.cs，至于对于为什么要使用接口，我想就不需要说明了。<br /><strong>ITFOpt.cs：</strong><br /><pre name="code" class="java">
using System;
using System.Data;

namespace Zsgc.Op
{
	//实现增、删、改、查的公共接口
	public interface ITFOpt
	{
		DataTable getList(); //没有任何条件的查询
		DataTable getList(string wherestring); //带有条件的查询
		DataTable getList(int start,int size);//有条件分页
		Exception Add(object model); //添加数据
		Exception Modify(object model);//修改数据
		Exception Delete(object model);//删除数据
		Exception Update(object pk);//修改数据
	}
}
</pre><br />继承接口实现增删改的操纵类：JobsOpt.cs<br /><strong>JobsOpt.cs：</strong><br /><pre name="code" class="java">
using System;
using System.Data;
using Zsgc.DataBaseManage;
using Zsgc.Models;
namespace Zsgc.Op
{
	//C#中的继承是使用:来实现的,其中JobsOpt叫做派生类，ITFOpt叫做基类
	//string.Format()方法是将指定的 String 中的每个格式项替换为相应对象的值的文本等效项。
	public class JobsOpt:ITFOpt
	{
		#region ITFOpt 成员

		//全查数据
		public DataTable getList()
		{
			string sql=string.Format("select * from jobs");
			return DBM.getList(sql);
		}
		//有条件的查询,wherestring是条件
		public DataTable getList(string wherestring)
		{
			string sql=string.Format("select * from jobs where"+wherestring);
			return DBM.getList(sql);
		}
		//支持有条件分页的查询
		public DataTable getList(int start, int size)
		{
			string sql=string.Format("select * from jobs");
			return DBM.getList(sql,start,size);
		}
		//添加数据
		public Exception Add(object model)
		{
			//实例化一个JobsModel
			JobsModel jobs=(JobsModel)model;
			//其中{}是C#中的占位符，用来确定指定变量的值显示于字符串中的位置
			string sql=string.Format("insert into jobs(job_desc,min_lvl,max_lvl) values('{0}',{1},{2})",jobs.Job_desc,jobs.Min_lvl,jobs.Max_lvl);
			return DBM.Execute(sql);
		}
		//修改数据,不修改描述
		public Exception Modify(object model)
		{
			//实例化一个JobsModel
			JobsModel jobs=(JobsModel)model;
			string sql=string.Format("update jobs set min_lvl={0},max_lvl={1} where job_id={2}",jobs.Min_lvl,jobs.Max_lvl,jobs.Job_id);
			return DBM.Execute(sql);
		}
		//删除数据,pk为主键
		public Exception Delete(object pk)
		{
			string sql=string.Format("delete from jobs where job_id={0}",pk.ToString());
			return DBM.Execute(sql);
		}
		//修改数据，除主键外其余的都修改
		public Exception Update(object model)
		{
			//实例化一个JobsModel
			JobsModel jobs=(JobsModel)model;
			//其中{}是C#中的占位符，用来确定指定变量的值显示于字符串中的位置
			string sql=string.Format("update jobs set job_desc='{1}',min_lvl={1},max_lvl={2} where job_id={3}",jobs.Job_desc,jobs.Min_lvl,jobs.Max_lvl,jobs.Job_id);
			return DBM.Execute(sql);
		}

		#endregion
	}
}

</pre><br />好了万事具备，只欠东风，我会在接下来继续说明如何进行数据绑定。<br />最终实现效果如图所示：<br /><img src="http://fuhao9611.javaeye.com/upload/picture/pic/3105/415b7ab7-b60f-43c2-a0e9-13a775b7b488.jpg" />
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/74998#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 12:46:04 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/74998</link>
        <guid>http://fuhao9611.javaeye.com/blog/74998</guid>
      </item>
      <item>
        <title>昨天发生的一件郁闷的事情</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/74831" style="color:red;">http://fuhao9611.javaeye.com/blog/74831</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天上班的时候，收到一同学发来的QQ表情，觉得比较搞笑，于是就转发给公司一个同事，这一发就再也没有消息，半个小时过后，同时过来告诉我：“你完蛋了，刚才我在会议室作报告，大概有20多人参加，包括项目经理，你的QQ消息弹出在大屏幕上了，大家都看到了”，我郁闷呀，真是倒霉！不到几分钟，经理就来找我了！~~~<img src="/images/smiles/icon_cry.gif"/><br />   总之总结一句话：今年可是本命年，万事小心！
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/74831#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 09:23:16 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/74831</link>
        <guid>http://fuhao9611.javaeye.com/blog/74831</guid>
      </item>
      <item>
        <title>JXL使用总结</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/72485" style="color:red;">http://fuhao9611.javaeye.com/blog/72485</a>&nbsp;
          发表时间: 2007年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          年前项目是使用jxl来处理报表，由于对于jxl第一次使用，所以查阅无数资料，现在项目完毕，我将jxl作个总结。<br /><strong>JXLExample.java:</strong><br /><pre name="code" class="java">
package com.xinli;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jxl.*;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.write.Boolean;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class JXLExample {

	/**
	 * 
	 * @author fuhao
	 * 
	 */
	public static void main(String[] args) {
		// 准备设置excel工作表的标题
		String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};
		try {
			// 获得开始时间
			long start = System.currentTimeMillis();
			// 输出的excel的路径
			String filePath = "c:\\test.xls";
			// 创建Excel工作薄
			WritableWorkbook wwb;
			// 新建立一个jxl文件,即在C盘下生成test.xls
			OutputStream os = new FileOutputStream(filePath);
			wwb=Workbook.createWorkbook(os); 
			// 添加第一个工作表并设置第一个Sheet的名字
			WritableSheet sheet = wwb.createSheet("产品清单", 0);
			Label label;
			for(int i=0;i&lt;title.length;i++){
				// Label(x,y,z)其中x代表单元格的第x+1列，第y+1行, 单元格的内容是y
				// 在Label对象的子对象中指明单元格的位置和内容
				label = new Label(i,0,title[i]);
				// 将定义好的单元格添加到工作表中
				sheet.addCell(label);
			}
			// 下面是填充数据
			/* 
			 * 保存数字到单元格，需要使用jxl.write.Number
			 * 必须使用其完整路径，否则会出现错误
			 * */
			// 填充产品编号
			jxl.write.Number number = new jxl.write.Number(0,1,20071001);
			sheet.addCell(number);
			// 填充产品名称
			label = new Label(1,1,"金鸽瓜子");
			sheet.addCell(label);
			/*
			 * 定义对于显示金额的公共格式
			 * jxl会自动实现四舍五入
			 * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45
			 * */
			jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
			jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);
			// 填充产品价格
			jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);
			sheet.addCell(nb);
			// 填充产品数量
			jxl.write.Number numb = new jxl.write.Number(3,1,200);
			sheet.addCell(numb);
			/*
			 * 定义显示日期的公共格式
			 * 如:yyyy-MM-dd hh:mm
			 * */
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String newdate = sdf.format(new Date());
			// 填充出产日期
			label = new Label(4,1,newdate);
			sheet.addCell(label);
			// 填充产地
			label = new Label(5,1,"陕西西安");
			sheet.addCell(label);
			/*
			 * 显示布尔值
			 * */
			jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);
			sheet.addCell(bool);
			/*
			 * 合并单元格
			 * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的
			 * 表示将从第x+1列，y+1行到m+1列，n+1行合并
			 * 
			 * */
			sheet.mergeCells(0,3,2,3);
			label = new Label(0,3,"合并了三个单元格");
			sheet.addCell(label);
			/*
			 * 
			 * 定义公共字体格式
			 * 通过获取一个字体的样式来作为模板
			 * 首先通过web.getSheet(0)获得第一个sheet
			 * 然后取得第一个sheet的第二列，第一行也就是"产品名称"的字体 
			 * */
			CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();
			WritableCellFormat wc = new WritableCellFormat();
			// 设置居中
			wc.setAlignment(Alignment.CENTRE);
			// 设置边框线
			wc.setBorder(Border.ALL, BorderLineStyle.THIN);
			// 设置单元格的背景颜色
			wc.setBackground(jxl.format.Colour.RED);
			label = new Label(1,5,"字体",wc);
			sheet.addCell(label);

			// 设置字体
			jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);
			WritableCellFormat font = new WritableCellFormat(wfont);
			label = new Label(2,6,"隶书",font);
			sheet.addCell(label);
			
			// 写入数据
			wwb.write();
			// 关闭文件
			wwb.close();
			long end = System.currentTimeMillis();
			System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);
		} catch (Exception e) {
			System.out.println("---出现异常---");
			e.printStackTrace();
		}
	}

}

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/72485#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Apr 2007 15:06:02 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/72485</link>
        <guid>http://fuhao9611.javaeye.com/blog/72485</guid>
      </item>
      <item>
        <title>JavaScript日志工具介绍</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/72374" style="color:red;">http://fuhao9611.javaeye.com/blog/72374</a>&nbsp;
          发表时间: 2007年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前几天在《Ajax与Java高级程序设计》这本书上面发现了有介绍JavaScript调试工具的文章，觉得写的很好，受益很多，因为目前阶段调试JavaScript99%的都使用的是alert()，这样的做法确实是有效果的，但是问题在于必须在程序公开发布前删除所有的alert()语句，这样就比较麻烦的了，而且还容易出错误，让人很郁闷的。<br />   该书上介绍了两个调试JavaScript的方式，一种是叫做：<span style="color: red">Log4JS</span>;一种叫做：<span style="color: red">Lumberjack</span>。我个人比较喜欢后者，现在将详细介绍一下，并附上例子。<br />   Log4JS:Log4JS在思想上与Apache的log4j类似的JavaScript调试工具。Log4JS把日志输出到一个可定制的日志类中。可以在http://log4js.sourceforge.net上找到它。可以使用的日志类有四个：alert,write,popup,console。write日志类把日志写入浏览器的一个新的页面。popup日志类把日志写入一个单独的浏览器窗口，这有利于跟踪日志消息。最后console日志类把日志写到Safari的控制台上，如果浏览器不是Safari，那么就把日志写入一个对话框。<br />   Log4JS与log4j的相似之处在于它们都定义了不同的日志级别。Log4JS中的日志级别按照递增顺序依次是DEBUG、INFO、WARN、ERROR、FATAL和NONE。一个日志类只会记录与自己的级别相同或更高的信息。例如，如果一个日志类的级别是WARN，那么由info()方法产生的消息将不会被输出，但是由warn()、error()或fatal()方法产生的信息就会被输出。<br />    如果你曾经使用过log4j，那么使用Log4JS就会非常简单。需要记住的是，把日志类的日志级别设置为NONE可以禁用日志类。在你的产品级应用中使用Log4JS的一种方法是在一个单独的JavaScript文件中定义应用所用到的所有日志类，这样就可以在所有页面中使用它们。在把应用部署到产品环境中时，只需更新这个JavaScript文件，禁用所有的日志记录即可。更进一步，你也可以使用Ant的replace任务根据执行构建类型的不同（开发、测试或产品）而设置日志级别。<br />    Lumberjack：Lumberjack是另一款基于JavaScript的日志记录实用工具，其网址是http://gleepglop.com/javascripts/logger。和Log4JS一样，Lumberjack也受到了Apache log4j的启发。<br />    Lumberjack与其他JavaScript日志框架的不同之处在于它显示日志信息的方法。Lumberjack把所有的日志信息都写入一个特殊的窗口，使用Alt+D（在Mac<br />OS X上是Cmd+D）组合键可以激活这个窗口。这个输出窗口是一个显示在网页底部的浮动窗口，即使在上下滚动网页的时候，它的位置也不会改变。这个输出窗口还包含一个基于正则表达式的过滤器，所以只会显示指定类型的错误。同时，它还包含一个JavaScript命令行，可以在其中输入JavaScript命令。<br />    <span style="color: red">Lumberjack需要Prototype库</span>：Lumberjack依赖于JavaScript库Prototype，可以在http://prototype.conio.net上找到这个库。由于这种依赖性，当在HTML页面中使用&lt;script>标签分别引入它们的JavaScript文件时，一定要把Prototype列在Lumberjack之前。浏览器会根据JavaScript文件在HTML页面中列出的顺序读取并执行它们。如果把Lumberjack列在Prototype之前，那么当浏览器尝试执行Lumberjack脚本的时候就会发生错误，因为找不到未被执行的Prototype脚本中的值。<br />    与使用Log4JS时需要创建单独的日志类不同，Lumberjack把所有的日志方法都作为Logger类的静态方法公开。Logger类共公开了4个日志方法：info、debug、warning和error。每个方法都接受一个代表被记录信息的字符串参数。Logger类还公开了一个log方法，它接受两个参数：代表被记录信息的字符串和代表日志级别的字符串。<br />    以下是使用Lumberjack的例子主要代码：<br />    <strong>calc.js:</strong><br /><pre name="code" class="java">
/**
 * @author fuhao
 */
function clearResult(){
	document.getElementById("result").value = "";
}
function calc(){
	clearResult();
	var first = document.getElementById("first").value;
	var second = document.getElementById("second").value;
	if(first=="" || second=="" || first==null || second==null){
		Logger.info("请输入加数和被加数");
		return ;
	}
	Logger.info("加数是："+first+"　　　"+"被加数是："+second);
	
	var firstNumber = parseInt(first);
	var secondNumber = parseInt(second);
	
	if(isNaN(firstNumber)){
		Logger.error("输入的加数"+first+"不是数字");
		clearResult();
		return ;
	}
	if(isNaN(secondNumber)){
		Logger.info("输入的被加数"+second+"不是数字");
		return ;
	}
	var sum = firstNumber + secondNumber ;
	document.getElementById("result").value = sum ;
	Logger.info("最后得到的结果是:"+sum);
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://fuhao9611.javaeye.com/blog/72374#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Apr 2007 09:24:38 +0800</pubDate>
        <link>http://fuhao9611.javaeye.com/blog/72374</link>
        <guid>http://fuhao9611.javaeye.com/blog/72374</guid>
      </item>
      <item>
        <title>JavaScript例子——计算</title>
        <author>fuhao9611</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fuhao9611.javaeye.com">fuhao9611</a>&nbsp;
          链接：<a href="http://fuhao9611.javaeye.com/blog/72257" style="color:red;">http://fuhao9611.javaeye.com/blog/72257</a>&nbsp;
          发表时间: 2007年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>customer.js:</strong><br /><pre name="code" class="java">
/**
 * @author fuhao
 * @param {Object} tbodyid
 * 首先在Html页面上定义一个标准的table模板
 * table的子节点是tbody
 * tbody的子节点是tr
 * tr的子节点是td
 * td的子节点是checkbox和input
 */
// 以table模板为标准，添加新的行的方法
function add(tbodyid){
	if(tbodyid==null){
		alert("该方法需要的参数不正确");
		return ;
	}
	// 得到tbody,也可以使用prototype.js里面的$(tbodyid)
	var tbody = document.getElementById(tbodyid);
	// var tbody = $(tbodyid);
	// 获得tbody下的索引为1的tr
	var trtemplate = tbody.childNodes[1];
	// 得到tr下的td数组
	var tds = trtemplate.childNodes;
	// 得到该tr下所有td数组的长度
	var trlength = tds.length;
	var tr = document.createElement("tr");
	for(var i=0;i&lt;trlength;i++){
		var td = document.createElement("td");
		// 设置td的式样标记
		td.className = tds[i].className;
		var content = tds[i].innerHTML;
		td.innerHTML = content;
		tr.appendChild(td);	
	}
	tbody.appendChild(tr);
}

// 删除选中行的方法
function del(name){
	if(name==null){
		alert("该方法需要的参数不正确");
		return ;
	}
	// 获得数组
	var names = document.getElementsByName(name);
	// 获得数组的长度
	var length = names.length;
	if(length==1){
		alert("请至少保留一条记录");
		return ;
	}
	// 定义一个数组
	var arr = new Array();
	try{
		for(var i=0;i&lt;length;i++){
			if(names[i].checked==true){
				// 将checkbox的父节点(td)的父节点(tr)放入数组里面
				arr.push(names[i].parentNode.parentNode);
			}
		}
	}catch(e){
		alert("捕获到的异常是:"+e);
	}
	if(arr.length==0){
		alert("请至少选择一条删除");
		return ;
	}
	var delsure = confirm("确认要删除所选记录吗?");
	if(!delsure){
		return ;
	}
	for(var j=0;j&lt;arr.length;j++){
		if(arr.length == length){
			alert("请至少保留一条记录");
			return ;
		}
		Element.remove(arr[j]);
	}
}
// 敲回车，则添加新的一行
function addItem(tbodyid){
	// 13代表回车
	if(event.keyCode==13){
		add(tbodyid);
	}
}
// 全部选择
function checkAll(name){
	// 首先获得所有checkbox集合
	var names = document.getElementsByName(name);
	for(var i=0;i&lt;names.length;i++){
		names[i].checked=true;
	}
}
// 取消选择--反选
function cancelCheck(name){
	var names = document.getElementsByName(name);
	var length = names.length;
	for(var i=0;i&lt;length;i++){
		if(names[i].checked){
			names[i].checked = false;
		}else{
			names[i].checked = true;
		}
	}
}

//用于自动补0的方法 如:5--5.00,5.5--5.50
function mend(number){
	var str = number+"";
	if (str.indexOf(".")==-1){ //说明没有小数点
		return str+".00";
	}else{ //说明有小数点
		var tmp = str.substring(str.indexOf(".")+1);
	    if (tmp.length==0) return str+"00";
		if (tmp.length==1) return str+"0";
		if (tmp.length>=2) return str.substring(0,str.indexOf(".")+3);
	}
}

//用于四舍五入的方法
function ForDight(Dight,How) {  
   Dight = Math.round(Dight*Math.pow(10,How))/Math.pow(10,How);  
   return  mend(Dight);  
} 

// 计算(这里以数量作为参照物)
function calc(obj){
	// obj.parentElement获取对象层次中的父对象
	var td = obj.parentElement;
	var tr = td.parentElement;
	var numbers = tr.childNodes[4].childNodes[0].value;       // 数量
	//alert("numbers:"+numbers);
	var faceValue = tr.childNodes[2].childNodes[0].value;     //面值
	//alert("faceValue:"+faceValue);
	var additionValue = tr.childNodes[3].childNodes[0].value; //附赠
	//alert("additionValue:"+additionValue);
	//判断为空或者不为数字
	if(numbers=="" || faceValue=="" || additionValue=="" || isNaN(numbers) || isNaN(faceValue) || isNaN(additionValue)){
		// alert("--你的输入有误，数量为非空正整数,面值和附赠应为非空正数--");
		tr.childNodes[5].childNodes[0].value = "";
		tr.childNodes[6].childNodes[0].value = "";
		tr.childNodes[7].childNodes[0].value = "";
		return ;
	}
	//判断是否小于零或者数量为整数
	if(numbers&lt;=0*1 || faceValue&lt;=0*1 || additionValue&lt;=0*1 || numbers.indexOf(".")!=-1){
		// alert("--你的输入有误，数量为非空正整数,面值和附赠应为非空正数--");
		tr.childNodes[5].childNodes[0].value = "";
		tr.childNodes[6].childNodes[0].value = "";
		tr.childNodes[7].childNodes[0].value = "";
		return ;
	} 
	var faceValues = numbers*faceValue;    //面值金额
	var additionValues = numbers*additionValue;//附赠金额
	var faceValueAll = faceValues+additionValues;  //面值总额
	// 赋值	
	tr.childNodes[5].childNodes[0].value = ForDight(faceValues,2);
	tr.childNodes[6].childNodes[0].value = ForDight(additionValues,2);
	tr.childNodes[7].childNodes[0].value = ForDight(faceValueAll,2);
}

function calcs(obj){
	// obj.parentElement获取对象层次中的父对象
	var td = obj.parentElement;
	var tr = td.parentElement;
	var numbers = tr.childNodes[4].childNodes[0].value;       // 数量
	var price = tr.childNodes[8].childNodes[0].value;		  //单价
	var agio = tr.childNodes[9].childNodes[0].value;		  //折扣
	if(numbers=="" || price=="" || isNaN(numbers) || isNaN(price) || isNaN(agio)){
		alert("--------");
		tr.childNodes[10].childNodes[0].value