<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>小笨熊</title>
    <description></description>
    <link>http://qs-21th.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>JDK6.0学习之查缺补漏</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/176652" style="color:red;">http://qs-21th.javaeye.com/blog/176652</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基础数据类型<br />    float 和 double 可以用来表示浮点数。但是有很多算术运算操作可以产生浮点型无法表达的数字，如无限大、无限小等，这些数据的表达通过浮点数封装类（Float 和 Double）所提供的特殊属性来表达：<br />    Float.NaN 非数字<br />    Float.NEGATIVE_INFINITY 无限小<br />    Float.POSITIVE_INFINITY 无限大<br />    Double.NaN 非数字<br />    Double.NEGATIVE_INFINITY 无限小<br />    Double.POSITIVE_INFINITY 无限大<br />代码演示：<br />    <pre name="code" class="java">double d = -5.0 / 0.0;
		if (d == Double.NEGATIVE_INFINITY) {
			System.out.println("d 的值为负无穷");
		}</pre><br /><br />防止内存泄露代码：<br />    <pre name="code" class="java">Vector v = new Vector(10);
		for (int i = 0; i &lt; 100; i++) {
			Object o = new Object();
			v.add(o);
			o = null;
		}</pre><br /><br />按键值自动排序的Map<br />    按键值自动排序的Map接口是java.util.SortedMap，实现java.util.SortedMap接口的是java.util.TreeMap类。java.util.TreeMap类并没有提供额外的方法，但是会按照键值自动维护键值对之间的相对顺序。<br />    实现代码：<br />    <pre name="code" class="java">SortedMap&lt;String,String> map = new TreeMap&lt;String, String>();</pre><br /><br />元素位置固定的Map<br />    能将键值对之间的相对顺序按照插入Map的先后顺序维持的Map类是java.util.LinkedHashMap。插入的顺序是什么，显示迭代的顺序就是什么。<br />     实现代码：<br />     <pre name="code" class="java">LinkedHashMap&lt;String,String> map = new LinkedHashMap&lt;String,String>();</pre>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/176652#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 10:48:03 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/176652</link>
        <guid>http://qs-21th.javaeye.com/blog/176652</guid>
      </item>
      <item>
        <title>Struts 关于多个配置文件的自动识别</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/174244" style="color:red;">http://qs-21th.javaeye.com/blog/174244</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在用Struts 进行开发的时候，为了项目的并行，会有多个配置文件。<br />如 struts-a.xml ; struts-b,xml ; struts-c.xml ;   <br />这么多的配置文件如果都要手工配置到web.xml文件中，其实是很麻烦的。那么如何让他自己动加载到struts-*.xml呢？<br />如下：<br /><br />      <pre name="code" class="java">&lt;servlet>
        &lt;servlet-name>action&lt;/servlet-name>
        &lt;servlet-class>com.allcom.base.util.AutoActionServlet&lt;/servlet-class>
        &lt;init-param>
            &lt;param-name>config&lt;/param-name>
            &lt;param-value>/WEB-INF/struts-*.xml&lt;/param-value>
        &lt;/init-param>
        &lt;init-param>
            &lt;param-name>debug&lt;/param-name>
            &lt;param-value>3&lt;/param-value>
        &lt;/init-param>
        &lt;init-param>
            &lt;param-name>detail&lt;/param-name>
            &lt;param-value>3&lt;/param-value>
        &lt;/init-param>
        &lt;load-on-startup>5&lt;/load-on-startup>
    &lt;/servlet></pre><br /><br />在这里面，我用了通配符，所有由struts-开头的.xml文件都可以进行自动加载
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/174244#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 18:01:21 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/174244</link>
        <guid>http://qs-21th.javaeye.com/blog/174244</guid>
      </item>
      <item>
        <title>JMX 之成长过程（一）</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/174132" style="color:red;">http://qs-21th.javaeye.com/blog/174132</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JMX入门<br />      由于时间原因，我不再写了。给大家一个好的blog：http://www.blogjava.net/chengang/archive/2006/03/07/34061.html 这里面写的很详细，而且非常的好。如果以前没有了解的话，拿它来学习是最好不过的了。可以让你轻松入门。<br /><br />jconsole连接tomcat<br />      先说下我用的环境：JDK5.0，tomcat6.0。<br />    第一步：配置tomcat。<br />    在 catalina.bat 中加入：<br />         <pre name="code" class="java">set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004"
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"</pre><br /><br /><span style="color: red">提示：tomcat有时也会给我们找点小麻烦。在很多网上配置的说法几乎相同，但是就是连不成功，后来发现原来有换行、空格问题。</span><br /><br />    第二步：运行jconsole。<br />     到你JDK_home/bin/下找到jconsole.exe，然后运行。在远程选项卡中输入主机：localhost和端口号：9004，点确定。<br /><br />     看到界面，就表示连接好了。
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/174132#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 15:11:32 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/174132</link>
        <guid>http://qs-21th.javaeye.com/blog/174132</guid>
      </item>
      <item>
        <title>什么是高手</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/170474" style="color:red;">http://qs-21th.javaeye.com/blog/170474</a>&nbsp;
          发表时间: 2008年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天不知道怎么会突然间想到“什么是高手”！想了片刻，高手：也许意味技术很牛；也许业务很牛；也许技术业务都很牛吧！<br />     不过深层去想，又觉得：其实业务是在工作中不断接触、不断学习、不断总结、不断深入后时间久了自然也就牛了！而技术不然，你可以非常努力，不断学习，强化自己；也可以固守步封，一直使用老的技术，靠已有经验和技术去重复一个又一个项目！相比之下，技术很牛才是真正的牛吧（当然都很牛的是耕牛，哈哈）！<br />     本人工作时间也不是很长，一直想成为技术牛人！可怎么成为技术牛人呢？没有办法，只有每天的学习，练习！那又什么时候可以让我成为技术牛人？我想也许有一天我的代码都是用最先进，最流行，最实用，最能解决问题，代码量还很少，别人又似懂非懂时，也许我就成功了！<br />     这只是鄙人的一点遐想，工作之余总结，自醒，再接再厉！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/170474#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Mar 2008 11:36:08 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/170474</link>
        <guid>http://qs-21th.javaeye.com/blog/170474</guid>
      </item>
      <item>
        <title>JUnit中的断言使用</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/169734" style="color:red;">http://qs-21th.javaeye.com/blog/169734</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在JUnit框架结构中，TestCase类扩展了一个叫做Assert的工具类。这个Assert类提供了很多方法来让你对当前的对象的状态做“断言”。<br /><br />    在JUnit中，基本的断言方法有：<br />         assertTrue(boolean condition):如果condition为false则失败；否则通过测试。<br />         assertFalse(boolean condition):如果condition为true则失败；否则通过测试。<br />         assertEquals(Object expected, Object actual):根据equals()方法，如果expected 和 actual不相等则失败，否则通过测试。<br />         assertEquals(int expected, int actual):根据==操作符，如果expected 和 actual不相等则失败，否则通过测试。<br />         assertSame(Object expected, Object actual):如果expected 和 actual引用不同的内存对象则失败；如果它们引用相同的内存对象则通过测试。两个对象可能并不是相同的，但是它们可能通过equals()方法仍然可以是相等的。<br />         assertNotSame(Object expected, Object actual):<br />         assertNull(Object object):如果对象为null则通过测试，反之看作失败。<br />        assertNotNull(Object object):如果对象不为null则通过测试，反之看作失败。<br /><br />但是没有assertNotEquals(),后续慢慢补充！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/169734#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Mar 2008 10:28:31 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/169734</link>
        <guid>http://qs-21th.javaeye.com/blog/169734</guid>
      </item>
      <item>
        <title>action中的javascript</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/169208" style="color:red;">http://qs-21th.javaeye.com/blog/169208</a>&nbsp;
          发表时间: 2008年03月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、做用AJAX技术向Action中提交验证。以前我只做过连Servlet的。突然一变还不知道怎么返回需要的信息，在网上一搜。哈哈，好多！其实都一样，只需要return null就可以了！<br /><br />       javascript写法没有变化:<br />       <pre name="code" class="java">PrintWriter out;
			try {
				out = response.getWriter();
				out.println("该服务已被发布，不能再发布！");
			} catch (IOException e) {
				e.printStackTrace();
			}</pre><br /><br />        <pre name="code" class="java">return null;</pre><br /><br />   二、提交表单到action处理业务后刷新主框架的左框架的页面。<br />        <br />        action中：<br />        <pre name="code" class="java">request.setAttribute("message", "&lt;script type=\"text/javascript\" language=\"javascript\">parent.leftFrame.location.reload();&lt;/script>");</pre><br /><br />       JSP中：<br />         <pre name="code" class="java">&lt;logic:present name="message">
        	&lt;bean:write name="message" filter="false"/>
        &lt;/logic:present></pre>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/169208#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Mar 2008 17:48:52 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/169208</link>
        <guid>http://qs-21th.javaeye.com/blog/169208</guid>
      </item>
      <item>
        <title>使用uddi4j连接juddi</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/160341" style="color:red;">http://qs-21th.javaeye.com/blog/160341</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本篇是总结了前人经验又结合自己实际操作而做！<br />网上关于用uddi4j连接juddi的例子真的很多，但是讲的又不够严密，总是会出这样那样的错误！<br />最好的办法看官网的：<a href="http://wiki.apache.org/ws/jUDDI_HOW-TOs" target="_blank">http://wiki.apache.org/ws/jUDDI_HOW-TOs</a><br /><br />如果觉得英文不好看，看看我的也无妨，哈哈！<img src="/images/smiles/icon_biggrin.gif"/><br /><br />我们先来看看juddi的安装吧！<br />1、下载juddi：从juddi的<a href="http://ws.apache.org/juddi/releases.html" target="_blank">官网</a>下载juddi-0.9rc4.zip，解压后将webapp下的juddi拷贝到tomcat的webapp下面。<br />2、安装mysql。<br />3、插入数据：将juddi-0.9rc4.zip解压后下的sql\mysql\create_database.sql里的数据全部执行一边！再执行下面这条语句：INSERT INTO PUBLISHER (PUBLISHER_ID,PUBLISHER_NAME,EMAIL_ADDRESS,IS_ENABLED,IS_ADMIN) VALUES ('juddi','juddi','juddi@apache.org','true','true');<br />4、安装驱动：将mysql驱动放到tomcat的lib下（<span style="color: red">注：tomcat6</span>）。并将该驱动再放入CLASSPATH下！如：CLASSPATH=.;E:\mysql5Driver.jar;<br />5、tomcat管理juddi：<br />         有两处需改：<br />             一、修改conf\server.xml。<br />                 在&lt;/HOST>之前加如下代码：<br />                 <pre name="code" class="java">&lt;DefaultContext reloadable="true" crossContext="true">
			&lt;Resource name="jdbc/juddiDB" scope="Shareable" type="javax.sql.DataSource"/>
			&lt;ResourceParams name="jdbc/juddiDB">
				&lt;parameter>
					&lt;name>url&lt;/name>
					&lt;value>jdbc:mysql://localhost/juddi&lt;/value>
				&lt;/parameter>
				&lt;parameter>
					&lt;name>driverClassName&lt;/name>
					&lt;value>org.gjt.mm.mysql.Driver&lt;/value>
				&lt;/parameter>
				&lt;parameter>
					&lt;name>username&lt;/name>
					&lt;value>juddi&lt;/value>
				&lt;/parameter>
				&lt;parameter>
					&lt;name>password&lt;/name>
					&lt;value>juddi&lt;/value>
				&lt;/parameter>
			&lt;/ResourceParams>
		&lt;/DefaultContext></pre><br />           二、在conf\Catalina\localhost下加一个juddi.xml<br />                   <pre name="code" class="java">&lt;?xml version="1.0" encoding="ISO-8859-1"?>
&lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 6.0//EN" "http://www.bea.com/servers/wls600/dtd/weblogic-web-jar.dtd">
&lt;Context path="/juddi" docBase="juddi" debug="5" reloadable="true" crossContext="true">
&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_juddiDB_log" suffix=".txt" timestamp="true"/>
&lt;Resource name="jdbc/juddiDB" auth="Container" type="javax.sql.DataSource" username="juddi" password="juddi" url="jdbc:mysql://localhost/juddi" driverClassName="org.gjt.mm.mysql.Driver" />
&lt;/Context></pre><br /><br />6、修改tomcat6\webapps\juddi\WEB-INF\juddi-users.xml<br />         <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;juddi-users>
  &lt;user userid="sviens" password="password" />
  &lt;user userid="juddi" password="juddi" />
&lt;/juddi-users></pre><br /><br />到此，juddi的安装就算完成了！下面我们来验证安装结果：起动tomcat，访问http://localhost:8080/juddi/happyjuddi.jsp，如果jUDDI DataSource Validation段如下面的效果而没有用红色字体报错则说明juddi部署成功。 <br /><pre name="code" class="java">jUDDI DataSource Validation 
+ Got a JNDI Context! 
+ Got a JDBC DataSource (dsname=java:comp/env/jdbc/juddiDB) 
+ Got a JDBC Connection! 
+ SELECT COUNT(*) FROM PUBLISHER = 1</pre><br /><br />测试成功也不要太高兴了！<img src="/images/smiles/icon_biggrin.gif"/>这里面有些问题是很不稳定的！<br />如果你用的是tomcat5.5或tomcat5下面的操作你有可能就不会成功，报的错误也不一样！我一开始就是5.5，怎么找错误都找不到，最后加入原码调试，发现recieve不到东西，但send出去了！考虑tomcat有问题，换tomcat6就OK！试了下tomcat5也不行，错还不一样！哈哈，有趣！<img src="/images/smiles/icon_evil.gif"/><br /><br />好了，不多说了，我们下面用uddi4j来连接juddi吧！<br />1、下载uddi4j-bin-2.0.5.zip，附件里有！<br />2、建立一个工程 名为uddi4jDemo，引入包uddi4j.jar ， soap.jar，activation.jar，mail.jar（附件里有下载）。 <br />把uddi4j sample里面的 samples.prop configurator.java SaveBusinessExample.java FindBusinessExample.java publisherAssertionExample.java 放在工程默认package下 <br />3. 打开samples.prop这个文件 修改设置下参数 <br />设置url <br />inquiryURL = http://localhost:8080/juddi/inquiry <br />publishURL = http://localhost:8080/juddi/publish <br />设置 <br />userid = juddi <br />password = juddi <br />设置soap transport 默认就是这个 <br />TransportClassName=org.uddi4j.transport.ApacheSOAPTransport<br />4. 运行结果 <br />运行 SaveBusinessExample.java <br /><pre name="code" class="java">*********** Running SaveBusinessExample *********** 
Get authtoken 
Returned authToken:authToken:60BDF210-6641-11DB-A066-BC0BE7D6EEB5 
Save 'Sample Business' 
Returned businessKey:60DF35B0-6641-11DB-A066-A0B53CE33E0E 
Listing businesses starting with S after we publish 
Sample Business 
Sample Business 
Sample Business </pre><br /><br />运行FindBusinessExample.java <br /><pre name="code" class="java">*********** Running FindBusinessExample *********** 
Sample Business 
Sample Business 
Sample Business</pre><br /><br />因为我运行了三次save 所以有三个 sample business<br /><br /><span style="color: red">注意：要在tomcat6下运行！如果你使用的是sql server建议换mysql，尽管sqlserver验证可以成功，但在执行脚本的时候，无法创建AUTH_TOKEN！因为有两个时间戳！把它都换成datetime，执行程序也会报错！</span>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/160341#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 11:42:55 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/160341</link>
        <guid>http://qs-21th.javaeye.com/blog/160341</guid>
      </item>
      <item>
        <title>WebService的学习成长过程（二）</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/159157" style="color:red;">http://qs-21th.javaeye.com/blog/159157</a>&nbsp;
          发表时间: 2008年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前面我们已经成功的做了一个WebService，我们仔细想想其实如果再做连接数据库的和返回复杂类型的已经没有什么意义了！我们已经用假数据和配置文件绑定做过了，更多的时候，我们可能需要结合Spring来应用！OK，这就是我们这次研究的重点了！<br /><br />真的没有想到，用xfire来做WebService和Spring的结合会这么的简单！<br />我们可以向以前一样引入Spring！之前的例子只需要一点点修改就可以了！<br /><br />web.xml:<br />        <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	&lt;context-param>
	    &lt;param-name>contextConfigLocation&lt;/param-name>
	    &lt;param-value>/WEB-INF/applicationContext.xml
	    classpath:org/codehaus/xfire/spring/xfire.xml&lt;/param-value>
	&lt;/context-param>
	
	&lt;listener>
	    &lt;listener-class>org.springframework.web.context.ContextLoaderListener&lt;/listener-class>
	&lt;/listener>
	
	&lt;servlet>
	    &lt;servlet-name>xfire&lt;/servlet-name>
	    &lt;servlet-class>org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class>
	&lt;/servlet>
	
	&lt;servlet-mapping>
	    &lt;servlet-name>xfire&lt;/servlet-name>
	    &lt;url-pattern>*.ws&lt;/url-pattern>&lt;!-- 
	    &lt;url-pattern>/*&lt;/url-pattern> -->
	&lt;/servlet-mapping>
    
    &lt;servlet>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;servlet-class>
                 org.codehaus.xfire.transport.http.XFireConfigurableServlet
         &lt;/servlet-class>
     &lt;/servlet>
     
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;url-pattern>/servlet/XFireServlet/*&lt;/url-pattern>
     &lt;/servlet-mapping>
 
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
          &lt;url-pattern>/services/*&lt;/url-pattern>
     &lt;/servlet-mapping>

&lt;/web-app></pre><br /><br />applicationContext.xml:<br />         <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

&lt;beans>
	&lt;import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
	&lt;bean id="userDao" class="com.zhuweisky.xfireDemo.UserDaoImpl"/>
	
	&lt;bean id="userServiceTarget" class="com.zhuweisky.xfireDemo.UserServiceImpl">
		&lt;property name="userDao" ref="userDao"/>
	&lt;/bean>
	
	&lt;!-- 使用XFire导出器 -->
	&lt;bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
	&lt;!-- 引用xfire.xml中定义的工厂 -->
		&lt;property name="serviceFactory" ref="xfire.serviceFactory" />
		&lt;!-- 引用xfire.xml中的xfire实例 -->
		&lt;property name="xfire" ref="xfire" />
	&lt;/bean>
	
	&lt;!-- Declare a parent bean with all properties common to both services -->
	&lt;bean id="userService" parent="baseWebService">
	    &lt;property name="serviceBean">
	        &lt;ref bean="userServiceTarget"/>
	    &lt;/property>
	    &lt;property name="serviceClass">
	        &lt;value>com.zhuweisky.xfireDemo.UserService&lt;/value>
	    &lt;/property>
	&lt;/bean>
&lt;/beans></pre><br /><br />好了，只需要这一点点工作就OK了，现在我们可以用http://localhost:8080/你的工程名/services/UserService?wsdl 来访问了。<br />看到xml，就表示成功了！<br /><br />把我们的测试类修改下使用：<br />           <pre name="code" class="java">public static void main(String[] args)
	{
    	ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
    	
		try{
			XFireExporter xfe = (XFireExporter) ctx.getBean("userService");
//			System.out.println(o.toString());
			UserService srvc = (UserService) xfe.getServiceBean();
			System.out.println(srvc.getUser("tom").getAge());
			List users=srvc.getUsers();
			for (Iterator iter = users.iterator(); iter.hasNext();) {
				User user = (User) iter.next();
				System.out.println(user.getName());
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}</pre><br /><br />这样就全部搞定！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/159157#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jan 2008 17:14:45 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/159157</link>
        <guid>http://qs-21th.javaeye.com/blog/159157</guid>
      </item>
      <item>
        <title>WebService的学习成长过程（一）</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/159133" style="color:red;">http://qs-21th.javaeye.com/blog/159133</a>&nbsp;
          发表时间: 2008年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近一直在学习SOA（服务为导向的体系结构），而WebService就是首先要研究的！<br />概念嘛，我就不说了，网上太多了，一搜就是一堆！<br /><br />先来做个简单的，用xfire做的例子：<br />步骤：<br />1、从xfire官网下载xfire-distribution-1.2.6.zip，将解压缩后的lib下所有包和xfire-all-1.2.6.jar拷贝到你的新建web工程的WEB-INF/lib下。<br /><br />2、修改web.xml：<br />          <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    &lt;servlet>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;servlet-class>
                 org.codehaus.xfire.transport.http.XFireConfigurableServlet
         &lt;/servlet-class>
     &lt;/servlet>
     
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;url-pattern>/servlet/XFireServlet/*&lt;/url-pattern>
     &lt;/servlet-mapping>
 
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
          &lt;url-pattern>/services/*&lt;/url-pattern>
     &lt;/servlet-mapping>
&lt;/web-app></pre><br /><br />3、编写服务接口和实现类：<br />          <pre name="code" class="java">package com.zhuweisky.xfireDemo;

import java.io.Serializable;

public class User implements Serializable {
	private String name;
	private int age;
	
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}</pre><br /><br />         <pre name="code" class="java">package com.zhuweisky.xfireDemo;

import java.util.List;

public interface UserService {
	public User getUser();
	public List&lt;User> getUsers();
}</pre><br /><br />         <pre name="code" class="java">package com.zhuweisky.xfireDemo;

import java.util.List;
import java.util.Vector;

public class UserServiceImpl implements UserService {
	public List&lt;User> getUsers(){
		List list=new Vector();
		User user1 = new User("tom",23);
		User user2 = new User("jerry",26);
		list.add(user1);
		list.add(user2);
		return list;
	}
	
	public User getUser(){
		User user = new User("tom",23);
		return user;
	}
}</pre><br /><br />4、在src下建 META-INF\xfire\services.xml：<br />           <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://xfire.codehaus.org/config/1.0">
    &lt;service>
      &lt;name>UserService&lt;/name>
      &lt;namespace>http://com.zhuweisky.xfireDemo/UserService&lt;/namespace>
      &lt;serviceClass>com.zhuweisky.xfireDemo.UserService&lt;/serviceClass>
      &lt;implementationClass>com.zhuweisky.xfireDemo.UserServiceImpl&lt;/implementationClass>
    &lt;/service>
&lt;/beans></pre><br /><br />哈哈，很简单吧！这样就做好了一个WebService了。<br />我们可以通过http://localhost:8080/你的工程名/services/UserService?wsdl来访问。看到xml了，就表示你的服务发表成功了！<br /><br />下面我们来测试一下：<br />          <pre name="code" class="java">package com.zhuweisky.xfireDemo.test;

import java.net.MalformedURLException;   
import java.net.URL;   
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
  
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client; 
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.w3c.dom.Document;


import com.sun.org.apache.xerces.internal.dom.DocumentImpl;

import com.zhuweisky.xfireDemo.User;
import com.zhuweisky.xfireDemo.UserService;

public class TestCallWebService {

    public static void main(String[] args)
	{
		Service srvcModel = new ObjectServiceFactory().create(UserService.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		String helloWorldURL = "http://localhost:8080/XFireZhuweiTest/services/UserService";
		try{
			UserService srvc = (UserService) factory.create(srvcModel, helloWorldURL);
			System.out.println(srvc.getUser().getName());
			List users=srvc.getUsers();
			for (Iterator iter = users.iterator(); iter.hasNext();) {
				User user = (User) iter.next();
				System.out.println(user.getName());
			}
		}catch (MalformedURLException e){
			e.printStackTrace();
		}
	}

}</pre><br /><br />大家可以考虑上面服务接口的代码，如果不用泛型，还可以调用成功吗？<br />答案是不行的！因为不知道List中到底是什么！这时，就需要有配置文件来描述了，也就是绑定！<br />WebService的绑定有很多，我们在这里只讨论aegis的绑定。<br />绑定配置文件的名字必须要和服务的名字一样：UserService.aegis.xml.<br />UserService.aegis.xml:<br />         <pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;mappings>
  &lt;mapping>
    &lt;method name="getUsers">
      &lt;return-type componentType="com.zhuweisky.xfireDemo.User"/>
    &lt;/method>
  &lt;/mapping>
&lt;/mappings></pre><br />这样，我们即使不用泛型也可以测试通过！如果返回类型是map，我们又怎么配呢？<br /><br />其实都一样的，假如服务接口中方法为：<br />           <pre name="code" class="java">public Map getUsersMap(int count);</pre><br /><br />           <pre name="code" class="java">&lt;mapping>
		&lt;method name="getUsersMap">
			&lt;parameter index="0" mappedName="count" keyType="java.lang.Integer" />
			&lt;return-type mappedName="UserMap"
				keyType="java.lang.Integer"
				componentType="com.zhuweisky.xfireDemo.User" ignore="true" />
		&lt;/method>
	&lt;/mapping></pre><br /><br />到此为止，我们就算完全做完了一个WebService！后续会对此例升级！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/159133#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jan 2008 16:24:37 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/159133</link>
        <guid>http://qs-21th.javaeye.com/blog/159133</guid>
      </item>
      <item>
        <title>如何用xfire做一个webService用jaxb2绑定</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/157356" style="color:red;">http://qs-21th.javaeye.com/blog/157356</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我是一个SOA新学者,用xfire的jaxb2绑定做了一个例子，总是报错，也不清楚为什么了!<br />希望大家多给我一点意见，谢谢！<br /><br />例子如下：<br />PO类：<br /><pre name="code" class="java">package com.xxx.services;

import java.io.Serializable;

public class User implements Serializable {
	private String name;
	private int age;
	
	public int getAge() {
		return age;
	}
	......//getter() or setter();
}</pre><br /><br />Service Interface类：<br /><pre name="code" class="java">package com.xxx.services;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(name="UserServiceIntf", targetNamespace="http://www.webservicex.net")
public interface UserService {
	@WebMethod
	public User getUser();
	@WebMethod
	public List getUsers();
}</pre><br /><br />Service Interface Implement类：<br /><pre name="code" class="java">package com.xxx.services;

import java.util.List;
import java.util.Vector;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(endpointInterface="org.codehaus.xfire.jaxb.UserService", serviceName="UserService")
@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE)
public class UserServiceImpl implements UserService {
	public User getUser(){
		User user = new User("tom",23);
		return user;
	}
	public List getUsers(){
		List list=new Vector();
		User user1 = new User("tom",23);
		User user2 = new User("jerry",26);
		list.add(user1);
		list.add(user2);
		return list;
	}
}</pre><br /><br />src\META-INF\xfire\services.xml:<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://xfire.codehaus.org/config/1.0">
    &lt;service>
    	&lt;name>UserService&lt;/name>
    	&lt;namespace>http://com.xxx.services/UserService&lt;/namespace>
    	&lt;serviceBean>com.xxx.services.UserServiceImpl&lt;/serviceBean>
		&lt;serviceFactory>#jaxbServiceFactory&lt;/serviceFactory>
    &lt;/service>
    
    &lt;bean name="jaxbServiceFactory" class="org.codehaus.xfire.jaxb2.JaxbServiceFactory">
    	&lt;constructor-arg ref="xfire.transportManager"/>
  	&lt;/bean>
&lt;/beans></pre><br /><br />web.xml:<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	&lt;servlet>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;servlet-class>
                 org.codehaus.xfire.transport.http.XFireConfigurableServlet
         &lt;/servlet-class>
     &lt;/servlet>
     
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
         &lt;url-pattern>/servlet/XFireServlet/*&lt;/url-pattern>
     &lt;/servlet-mapping>
 
     &lt;servlet-mapping>
         &lt;servlet-name>XFireServlet&lt;/servlet-name>
          &lt;url-pattern>/services/*&lt;/url-pattern>
     &lt;/servlet-mapping>
&lt;/web-app></pre><br /><br />报如下错误：<br /><pre name="code" class="java">exception 

javax.servlet.ServletException: Error initializing XFireServlet.
	org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:50)
	javax.servlet.GenericServlet.init(GenericServlet.java:211)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Thread.java:595)


root cause 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.xfire.spring.ServiceBean' defined in class path resource [META-INF/xfire/services.xml]: Initialization of bean failed; nested exception is org.codehaus.xfire.annotations.AnnotationException: Class javax.xml.namespace.QName does not have a WebService annotation
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:370)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:275)
	org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:320)</pre><br /><br />在xfire的官网上看好象还需要一个.xsd，然后再配到services.xml中，我也试了！错误一样！<br />希望大家可以帮我一下，看看什么问题，给点意见！最好说的具体点，谢谢！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/157356#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Jan 2008 16:29:41 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/157356</link>
        <guid>http://qs-21th.javaeye.com/blog/157356</guid>
      </item>
      <item>
        <title>hibernate基于注解的主键设置</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/151231" style="color:red;">http://qs-21th.javaeye.com/blog/151231</a>&nbsp;
          发表时间: 2007年12月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基于注解的hibernate主键设置：@Id.<br />那么它的生成规则是什么呢？是由@GeneratedValue来规定的。<br /><br />我们先来看看它是如何定义的：<br />	<pre name="code" class="java">@Target({METHOD,FIELD})
	@Retention(RUNTIME)
	public @interface GeneratedValue{
		GenerationType strategy() default AUTO;
		String generator() default "";
	}</pre><br /><br />         <pre name="code" class="java">public enum GenerationType{
		TABLE,
		SEQUENCE,
		IDENTITY,
		AUTO
	}</pre><br />现在我们看到了，它提供了4种生成策略：<br />TABLE：使用一个特定的数据库表格来保存标识符序列。<br />SEQUENCE：生成序列化标识符。<br />IDENTITY：标识符有数据库自动生成（主要是自动增长型）<br />AUTO：标识符生成工作由hibernate自动处理。实际项目开发不建议使用。<br /><span style="color: red">注意：当主键为int，而数据库中又不是自动增长型时，使用@GeneratedValue是无法正常工作的。</span><br /><br />我们也可以使用下面的方式来自己指定我们的主键值：<br />           <pre name="code" class="java">@GeneratedValue(generator = "c-assigned")
	@GenericGenerator(name = "c-assigned", strategy = "assigned")
     private String employeeId;</pre><br />或者直接不要定义@GeneratedValue，只定义@Id效果也是一样的。
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/151231#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Dec 2007 14:14:43 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/151231</link>
        <guid>http://qs-21th.javaeye.com/blog/151231</guid>
      </item>
      <item>
        <title>EXT入门</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/151004" style="color:red;">http://qs-21th.javaeye.com/blog/151004</a>&nbsp;
          发表时间: 2007年12月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基础的JS说明：<br /><pre name="code" class="java">/**
Ext.get();		根据id得到该对象
Ext.select();	根据标签得到该对象
Ext.onReady();	页面加载会自动执行该方法
*/
Ext.onReady(function() {
	/**
	var myDiv = Ext.get('myDiv');
	Ext.select('p').highlight();
	myDiv.highlight();      // The element's background will highlight to yellow then fade back
	myDiv.addClass('red');  // Add a custom CSS class (defined in ExtStart.css)
	myDiv.center();         // Center the element in the viewport
	myDiv.setOpacity(.25);  // Make the element partially-transparent
	*/
	
	//Ext.get().on(事件名，执行的函数);
	Ext.get('myButton').on('click', function(){
        alert("You clicked the button");
	});
	/**
	Ext.select('p').on('click', function() {
		alert("You clicked a paragraph");
	});*/
	/**
	//paragraphClicked函数方法名
	var paragraphClicked = function() {
		alert("You clicked a paragraph");
	}
	Ext.select('p').on('click', paragraphClicked);*/
	var paragraphClicked = function(e) {
		var paragraph = Ext.get(e.target);	//e.target得到事件源对象
		paragraph.highlight();
 
		Ext.MessageBox.show({
			title: 'Paragraph Clicked',
			msg: paragraph.dom.innerHTML,
			width:400,
			buttons: Ext.MessageBox.OK,
			animEl: paragraph
		});
	}
	Ext.select('p').on('click', paragraphClicked);
	// Note: For the purposes of following along with the tutorial, all 
	// new code should be placed inside this method.  Delete the following
	// line after you have verified that Ext is installed correctly.
	
	//alert("Congratulations!  You have Ext configured correctly!");
	
});</pre><br /><br />GridPanel使用说明：<br /><pre name="code" class="java">Ext.onReady(function() {
	var myData = [		//数据源。和myReader格式对应
		['Apple',29.89,0.24,0.81,'9/1 12:00am'],
		['Ext',83.81,0.28,0.34,'9/12 12:00am'],
		['Google',71.72,0.02,0.03,'10/1 12:00am'],
		['Microsoft',52.55,0.01,0.02,'7/4 12:00am'],
		['Yahoo!',29.01,0.42,1.47,'5/22 12:00am']
	];
 
	var myReader = new Ext.data.ArrayReader({}, [		//读取数据源。和myData一一对应
		{name: 'company'},
		{name: 'price', type: 'float'},
		{name: 'change', type: 'float'},
		{name: 'pctChange', type: 'float'},
		{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
	]);
 
	var grid = new Ext.grid.GridPanel({
		store: new Ext.data.Store({		//数据装配
			data: myData,
			reader: myReader
		}),
		columns: [		//header:显示的标题；width:该列的宽度；sortable:可否排序；dataIndex:数据索引（从data中取）
			{header: 'Company', width: 120, sortable: true, dataIndex: 'company'},
			{header: 'Price', width: 90, sortable: true, dataIndex: 'price'},
			{header: 'Change', width: 90, sortable: true, dataIndex: 'change'},
			{header: '% Change', width: 90, sortable: true, dataIndex: 'pctChange'},
			{header: 'Last Updated', width: 120, sortable: true, 
				renderer: Ext.util.Format.dateRenderer('m/d/Y'), 	//日期格式化
	                        dataIndex: 'lastChange'}
		],
		viewConfig: {
			forceFit: true		//强制适合GridPanel（GridPanel的大小不会改变）。true:没有滚动条；fasle:有滚动条
		},
		renderTo: 'content',	//显示位置（div中的id=“content”）
		title: 'My First Grid',	//标题
		width: 500,		//GridPanel的宽度
		frame: true		//GridPanel的边框
	});
 
	grid.getSelectionModel().selectFirstRow();		//GridPanel默认选中第一行
});</pre>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/151004#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Dec 2007 17:19:45 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/151004</link>
        <guid>http://qs-21th.javaeye.com/blog/151004</guid>
      </item>
      <item>
        <title>EXT初识</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/150912" style="color:red;">http://qs-21th.javaeye.com/blog/150912</a>&nbsp;
          发表时间: 2007年12月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近开始学习EXT。在网上找了很多资料，感觉没有头绪，还是不太明白怎么使用。<img src="/images/smiles/icon_sad.gif"/><br />哈哈，最后还是在它的官网上找到了一个教程！从教程中开始慢慢领会！<br />官网教程如下，希望大家少走弯路，共同学习。<img src="/images/smiles/icon_arrow.gif"/><br /><a href="http://extjs.com/learn/Tutorial:Introduction_to_Ext_2.0" target="_blank">http://extjs.com/learn/Tutorial:Introduction_to_Ext_2.0</a>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/150912#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Dec 2007 12:50:09 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/150912</link>
        <guid>http://qs-21th.javaeye.com/blog/150912</guid>
      </item>
      <item>
        <title>hibernate3的注解映射学习</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/149813" style="color:red;">http://qs-21th.javaeye.com/blog/149813</a>&nbsp;
          发表时间: 2007年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: red">注解映射必须满足两大条件：Hibernate3.2以上版本和JSEE 5。</span><br /><strong>@Entity</strong> 类注释，所有要持久化的类都要有<br /><pre name="code" class="java">@Entity
public class Org  implements java.io.Serializable {
}</pre><br /><strong>@Id</strong> 主键<br />      <pre name="code" class="java">@Id
     @GeneratedValue
     private String orgId;
     private String orgName;</pre><br /><strong>@Column(name="...")</strong> 该属性对应表中的字段是什么，没有name表示一样<br /><strong>@Table</strong> 对象与表映射<br /><strong>@UniqueConstraint</strong> 唯一约束<br /><strong>@Version</strong> 方法和字段级，乐观锁用法，返回数字和timestamp，数字为首选<br /><strong>@Transient</strong> 暂态属性，表示不需要处理<br /><strong>@Basic</strong> 最基本的注释。有两个属性：fetch是否延迟加载，optional是否允许null<br /><strong>@Enumerated</strong> 枚举类型<br /><strong>@Temporal</strong> 日期转换。默认转换Timestamp<br /><strong>@Lob</strong> 通常与@Basic同时使用，提高访问速度。<br /><strong>@Embeddable</strong> 类级，表可嵌入的<br /><strong>@Embedded</strong> 方法字段级，表被嵌入的对象和@Embeddable一起使用<br /><strong>@AttributeOverrides</strong> 属性重写<br /><strong>@AttributeOverride</strong> 属性重写的内容和@AttributeOverrides一起嵌套使用<br /><strong>@SecondaryTables</strong> 多个表格映射<br /><strong>@SecondaryTable</strong> 定义辅助表格映射和@SecondaryTables一起嵌套使用<br /><strong>@GeneratedValue</strong> 标识符生成策略，默认Auto<br /><br />表与表关系映射<br /><strong>@OneToOne</strong>：一对一映射。它包含五个属性：<br />	targetEntity:关联的目标类<br />	Cascade:持久化时的级联操作，默认没有<br />	fetch:获取对象的方式，默认EAGER<br />	Optional:目标对象是否允许为null，默认允许<br />	mappedBy:定义双向关联中的从属类。<br />单向：<br />    @JoinColumn:定义外键(主表会多一字段，做外键)<br /><br /><strong>@OneToMany</strong>：一对多映射；<strong>@ManyToOne</strong>：多对一映射<br />单向一对多：<br />    @OneToMany(cascade=CascadeType.ALL)<br />    @JoinColumn(name="book_oid")/**book：表；oid：book表的主键；无name会按此规则自动生成*/<br />单向多对一：<br />    @ManyToOne(cascade=CascadeType.ALL)<br />    @JoinColumn(name="author_oid")<br />关联表格一对多：<br />    @OneToMany(cascade=CascadeType.ALL)<br />    @JoinTable(joinColumn={@JoinColumn(name="BOOK_OBJECT_OID")},inverseJoinColumns={@JoinColumn(name="AUTHER_OBJECT_OID")})<br />双向一对多或多对一：<br />    不需要多一张表，只是使用mappedBy:使用在One一方，值为One方类名表示Many的从属类。<br /><pre name="code" class="java">@Entity
public class Org  implements java.io.Serializable {


    // Fields    
	@Id
	@GeneratedValue
     private String orgId;
     private String orgName;
     @OneToMany(mappedBy = "org")
     private List&lt;Department> departments;

    // Constructors
...
    // Property accessors
...
}</pre><br /><pre name="code" class="java">@Entity
public class Department  implements java.io.Serializable {


    // Fields    
	@Id
	@GeneratedValue
     private String id;
     private String name;
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="org_orgId")
     private Org org;
     @OneToMany(mappedBy = "department")
     private List&lt;Employee> employees;

    // Constructors

    public List&lt;Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(List&lt;Employee> employees) {
		this.employees = employees;
	}

	public Org getOrg() {
		return org;
	}

	public void setOrg(Org org) {
		this.org = org;
	}

	/** default constructor */
             .
             .
             .
	
}</pre><br /><pre name="code" class="java">@Entity
public class Employee  implements java.io.Serializable {


    // Fields    
	@Id
	@GeneratedValue
     private String employeeId;
     private String employeeName;
     private String passWord;
     private Integer age;
     private Integer sex;
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="department_id")
     private Department department;

     
    public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

	/** default constructor */
    ...
    // Property accessors
    ...
}</pre><br /><br />双向多对多：@ManyToMany.单向多对多这里不在赘述（没有太多实际意义）<br />这个比较简单，看下代码就明白了：<br /><pre name="code" class="java">@Entity
public class Book  implements java.io.Serializable {
	@Id
	private int id;
	private String name;
	private float money;
	@ManyToMany(cascade = CascadeType.ALL)
	private List&lt;Author> authors;
	

	public List&lt;Author> getAuthors() {
		return authors;
	}
	public void setAuthors(List&lt;Author> authors) {
		this.authors = authors;
	}
	
         ...
}</pre><br /><br /><pre name="code" class="java">
@Entity
public class Author  implements java.io.Serializable {
	@Id
	private int id;
	private String name;
	private int age;
	@ManyToMany(mappedBy="authors")
	private List&lt;Book> books;
	

	public List&lt;Book> getBooks() {
		return books;
	}

	public void setBooks(List&lt;Book> books) {
		this.books = books;
	}

         ...
}</pre><br /><br />总算弄完了，不过还是一个皮毛！<br />需要注意的是：注释最好加在属性上，不要加在get方法上，那样做有时候就会出错。比如:@ManyToMany的时候就会报错！
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/149813#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Dec 2007 22:45:36 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/149813</link>
        <guid>http://qs-21th.javaeye.com/blog/149813</guid>
      </item>
      <item>
        <title>LOG4J配置文件学习</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/149549" style="color:red;">http://qs-21th.javaeye.com/blog/149549</a>&nbsp;
          发表时间: 2007年12月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          log4j.properties配置文件如下： <br /># Set root logger level to DEBUG and its only appender to A1 <br />#log4j中有五级logger <br />#FATAL 0 <br />#ERROR 3 <br />#WARN 4 <br />#INFO 6 <br />#DEBUG 7 <br />优先级从上至下，由高到低<br /><br />配置根Logger，其语法为：<br />#log4j.rootLogger = [ level ] , appenderName, appenderName, …<br />level 是日志记录的优先级<br />appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。<br />log4j.rootLogger=DEBUG, A1 ,R<br />#这一句设置意味着所有的log都输出.<br />#如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL<br />#被输出，DEBUG,INFO将被屏蔽掉.<br /><br /># A1 is set to be a ConsoleAppender. <br />#log4j中Appender有几层如控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等<br />#ConsoleAppender输出到控制台 <br />log4j.appender.A1=org.apache.log4j.ConsoleAppender <br /># A1 使用的输出布局，其中log4j提供4种布局. org.apache.log4j.HTMLLayout（以HTML表格形式布局）<br />#org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />#org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />#org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br /><br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout <br />#灵活定义输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout <br />#d 时间 .... <br />log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n <br />#R 输出到文件 RollingFileAppender的扩展，可以提供一种日志的备份功能。<br />log4j.appender.R=org.apache.log4j.RollingFileAppender <br />#日志文件的名称<br />log4j.appender.R.File=log4j.log <br />#日志文件的大小<br />log4j.appender.R.MaxFileSize=100KB <br /># 保存一个备份文件<br />log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.TTCCLayout<br />#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n<br /><br />Log4j提供的appender有以下几种：<br />org.apache.log4j.ConsoleAppender（控制台），<br />org.apache.log4j.FileAppender（文件），<br />org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），<br />org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），<br />org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方） <br /><br />配置日志信息的格式（布局），其语法为：<br />log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />log4j.appender.appenderName.layout.option1 = value1<br />....<br />log4j.appender.appenderName.layout.option = valueN<br /><br />Log4j提供的layout有以下几种：<br />org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br /><br /><br />下面是一个简单的配置例子：<br />log4j.debug=true<br />log4j.rootLogger=INFO,stdout, ToFile<br />log4j.logger.org.springframework=INFO<br />log4j.logger.org.hibernate=INFO<br /><br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n<br /><br />log4j.appender.ToFile=org.apache.log4j.RollingFileAppender<br />log4j.appender.ToFile.file=D:/Tomcat5.5/logs/InfoExchangeMonitor.log<br />log4j.appender.ToFile.MaxBackupIndex=5<br />log4j.appender.ToFile.MaxFileSize=10000KB<br />log4j.appender.ToFile.layout=org.apache.log4j.PatternLayout<br />log4j.appender.ToFile.layout.ConversionPattern=%d{yyyy-MM-dd}|%d{HH:mm:ss}|%-5p| [%c] - %m%n
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/149549#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Dec 2007 22:35:56 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/149549</link>
        <guid>http://qs-21th.javaeye.com/blog/149549</guid>
      </item>
      <item>
        <title>RMI入门小结</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/148796" style="color:red;">http://qs-21th.javaeye.com/blog/148796</a>&nbsp;
          发表时间: 2007年12月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近做了一个RMI的例子。例子很简单，只有四个类（HelloService,HelloServiceImpl,SimpleServer,SimpleClient）具体实现不写了，网上太多了。只需要注意RMI规范要求远程对象和实现的远程接口满足两个条件：<br />1、	直接或间接继承java.rmi.Remote接口；<br />2、	接口中所有的方法声明抛出java.rmi.RemoteException或它的父类异常。<br />RMI运行：<br />1、	rmic HelloServiceImpl(服务的实现类用来生成存根)<br />2、	找到D:\Program Files\jdk1.5\bin下的rmiregistry.exe启动。（用来注册RMI）<br />3、	java SimpleServer（启动服务，注册RMI）<br />4、	java SimpleClient（客户端调用已注册的RMI）<br />在运行RMI时要特别注意两个问题：<br />1、	classpath问题：老是找不到类，无法编译。(如：java，rmic命令)<br />环境变量设置：<br />CLASSPATH=.;D:\Program Files\jdk1.5\bin; D:\Program Files\jdk1.5\lib<br />2、	存根问题：无法生成存根和总是找不到HelloServiceImpl_Stub<br />存根的生成要用rmic来生成。<br />生成的存根老是找不到：要用java.exe -Djava.rmi.server.codebase。<br /><br />在我的例子中编译命令如下：<br />		1、E:\workspace\test>rmic com.rmi.hello.HelloServiceImpl<br />		2、启动rmiregistry.exe<br />		3、E:\workspace\test>java.exe -Djava.rmi.server.codebase=file:/E:\workspace\test/<br />com.rmi.hello.SimpleServer（注意：test/后有一个空格）<br />		4、另起一个DOS窗口，E:\workspace\test>java com.rmi.hello.SimpleClient<br />总共应该是三个DOS窗口。
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/148796#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Dec 2007 10:43:56 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/148796</link>
        <guid>http://qs-21th.javaeye.com/blog/148796</guid>
      </item>
      <item>
        <title>数据库的备份/还原和数据导入/导出之间区别</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/89517" style="color:red;">http://qs-21th.javaeye.com/blog/89517</a>&nbsp;
          发表时间: 2007年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天突然间发现一个小问题：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么通过数据库备份/还原，程序操作不会报错。而通过数据导入/导出时，程序就会间断性报错。</p><p>结论：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过数据库备份/还原，数据库不会变化。而通过数据导入/导出时，数据库就变化了。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导入/导出时，数据库中的表就会失去约束，并且会失去主、外键关系。</p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/89517#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Jun 2007 17:40:32 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/89517</link>
        <guid>http://qs-21th.javaeye.com/blog/89517</guid>
      </item>
      <item>
        <title>如何删除集合元素</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/81584" style="color:red;">http://qs-21th.javaeye.com/blog/81584</a>&nbsp;
          发表时间: 2007年05月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>删除集合元素,相信一提,肯定就是调用集合中的remove()方法了!</p><p>下面看个例子:</p><p>public void operate(List list){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator it = list.iterator(); it.hasNext();) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str =&nbsp; (String)it.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (str.equals(&quot;chengang&quot;)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.remove(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p><p>这样做可以删除元素吗?自己运行下试试!<img src="../../../javascripts/fckeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /></p><p>答案一定是报错了!那么如何才可以删除正在循环的集合中的元素呢?</p><p>一个笨方法:</p><p>public void operate(List list){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List removeList= new ArrayList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator it = list.iterator(); it.hasNext();) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str =&nbsp; (String)it.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (str.equals(&quot;chengang&quot;)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; removeList.add(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.removeAll(removeList);<br />&nbsp;&nbsp;&nbsp; }</p><p>一个聪明的方法:</p><p>for (Iterator it = list.iterator(); it.hasNext();) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str =&nbsp; (String)it.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (str.equals(&quot;chengang&quot;)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; it.remove();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>你会用哪一个呢?<img src="../../../javascripts/fckeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /></p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/81584#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 May 2007 16:42:49 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/81584</link>
        <guid>http://qs-21th.javaeye.com/blog/81584</guid>
      </item>
      <item>
        <title>Ajax学习小结</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/75902" style="color:red;">http://qs-21th.javaeye.com/blog/75902</a>&nbsp;
          发表时间: 2007年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原理：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就是通过触发JavaScript事件，调用服务器程序（可以是Servlet，也可以是Action），得到所需要的值。这个值再通过载&nbsp; 体，返回给JavaScript，从而返回给界面，实现局部刷新！而中间的这个载体就是<span style="font-family: Arial">ActiveXObject(&quot;MSXML2.XMLHTTP&quot;)；</span></p><p><span style="font-family: Arial">核心流程：<br />&nbsp;1、HTML 中执行 JavaScript<br />&nbsp;2、JavaScript 中去实例化 xmlHttp<br />&nbsp;3、xmlHttp 去发出请求调用后台 Servlet<br />&nbsp;4、Servlet 返回响应给 xmlHttp<br />&nbsp;5、xmlHttp 拿着响应信息去更新 HTML</span></p><p><span style="font-family: Arial">核心代码：<br /><br /><span style="font-family: Arial">&lt;script&gt;</span><!--ActiveXObject("MSXML2.XMLHTTP")用来发送请求和接受请求（核心）--><br />&nbsp;&nbsp;var xmlHttp=new ActiveXObject(&quot;MSXML2.XMLHTTP&quot;);//只是IE的；</span></p><p><span style="font-family: Arial">&nbsp;&nbsp;function sendRequest(){<br />&nbsp;&nbsp;&nbsp;//open方法用来设置请求发送，有三个参数（1、请求方式；2、请求地址；3、为true时用异步方式发送）；<br />&nbsp;&nbsp;&nbsp;xmlHttp.open('get','http://localhost:8080/WebModule1/ajaxservlet?name='+f.uname.value,true);<br />&nbsp;&nbsp;&nbsp;//onreadystatechange方法设置谁来接收；<br />&nbsp;&nbsp;&nbsp;xmlHttp.onreadystatechange=getResponse;<br />&nbsp;&nbsp;&nbsp;//send请求真正的发出；<br />&nbsp;&nbsp;&nbsp;xmlHttp.send(null);<br />&nbsp;&nbsp;}</span></p><p><span style="font-family: Arial">&nbsp;&nbsp;function getResponse(){<br />&nbsp;&nbsp;&nbsp;//readyState判断响应的4种状态（4为响应结束）；<br />&nbsp;&nbsp;&nbsp;if(xmlHttp.readyState==4){<br />&nbsp;&nbsp;&nbsp;&nbsp;//status=200表示页面响应是正确的；400，404，500<br />&nbsp;&nbsp;&nbsp;&nbsp;if(xmlHttp.status==200){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds.innerHTML=xmlHttp.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}</span></p><span style="font-family: Arial"><span style="font-family: Arial">&lt;/script&gt;</span><br />&nbsp;</span><span style="font-family: Arial"> </span><span style="font-family: Arial"><p>终上所述：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在已经可以实现一个Ajax程序了（只用上面这两个方法就可以了）。只需在界面调用sendRequest()方法。</p></span>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/75902#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 28 Apr 2007 16:33:34 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/75902</link>
        <guid>http://qs-21th.javaeye.com/blog/75902</guid>
      </item>
      <item>
        <title>ajax更新页面,只能更新一次</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/72811" style="color:red;">http://qs-21th.javaeye.com/blog/72811</a>&nbsp;
          发表时间: 2007年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>写了一个鼠标的动态提示标签：主要用来显示图片的说明信息或文字的说明信息！</p><p>问题：页面完好，可以显示提示标签，但数据只能是第一次的（得不到更新）。</p><p>问题分析：这是因为IE缓存问题，所以要有页面更新才可以。</p><p>解决方案：随便给页面上加个随机数，一切OK！</p><p>如：&lt;script&gt;var url=&quot;aaa.jsp?id=&quot;+id+&quot;&amp;time=&quot;+new Date().getTime();&lt;/script&gt;</p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/72811#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Apr 2007 11:54:31 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/72811</link>
        <guid>http://qs-21th.javaeye.com/blog/72811</guid>
      </item>
      <item>
        <title>就是一头猪</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/71833" style="color:red;">http://qs-21th.javaeye.com/blog/71833</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近我做了一个上传下载模块。很快就做完了，感觉还可以吧！</p><p>就是和别人的模块合起来就完了，点不了两三下就页面不动了，后台tomcat看起来象死了一样也没有什么反应！</p><p>问题：为什么自己单独跑好着呢，合起来就不行了？</p><p>解决方案：</p><p>1、怀疑filter。去掉filter，问题依旧。（排除）</p><p>2、怀疑listener。去掉listener，工程整个都死掉了，跑不了（总之很多东西都在这里，都是工程里用的）。（挂起）</p><p>3、单步跟踪。设了很多断点，跟了一会跟丢了（进了很深的底层，出不来了）。</p><p>4、打日志。没有用。感觉什么都好着呢。</p><p>5、会不会多线程，后台死锁。找了一个测试工具JProfiler，看不出来问题，也没有死锁。</p><p>天天哭呀！~~~</p><p>最后解决问题：</p><p>经：会不会是数据库死锁！</p><p>再次运行程序&mdash;&mdash;死了&mdash;&mdash;打开每张表（看是否有打不开的，是否发生了死锁）。结果OK，都打开了！（排除）</p><p>最后一招：每一行代码下都打印东西。终于看到了有一个service的方法执行不到（第一次可以）。在该方法中的每一行代码下继续打东西。又看到一个Dao层的方法不执行。继续。这样一层一层。终于问题浮出水面&mdash;&mdash;得不到连接。因为用的是DataSource，所以忘记.close();晕！~~~加上！</p><p>问题终于解决了！一切恢复正常！</p><p>最后结论：就是一头猪！~~~</p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/71833#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 11:57:42 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/71833</link>
        <guid>http://qs-21th.javaeye.com/blog/71833</guid>
      </item>
      <item>
        <title>Dom的学习总结</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/66713" style="color:red;">http://qs-21th.javaeye.com/blog/66713</a>&nbsp;
          发表时间: 2007年03月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-family: Arial"><span style="font-family: Arial">&nbsp;&lt;body-- onload=&quot;abc()&quot;&gt;<br />&nbsp;&lt;p&gt;Hello World!&lt;/p&gt;<br />&nbsp;&lt;p&gt;Isn't this exciting?&lt;/p&gt;<br />&nbsp;&lt;p&gt;You're learning to use this Dom!&lt;/p&gt;<br />&nbsp;&lt;a href=&quot;#&quot; onClick=&quot;create()&quot;&gt;abc&lt;/a&gt;&lt;/--body&gt;</span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/66713#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 Mar 2007 17:45:14 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/66713</link>
        <guid>http://qs-21th.javaeye.com/blog/66713</guid>
      </item>
      <item>
        <title>我终于有自己的Blog</title>
        <author>小笨熊</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qs-21th.javaeye.com">小笨熊</a>&nbsp;
          链接：<a href="http://qs-21th.javaeye.com/blog/66584" style="color:red;">http://qs-21th.javaeye.com/blog/66584</a>&nbsp;
          发表时间: 2007年03月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>以前老看别人的Blog,很是羡慕!现在自己终于也有了一个!<img src="../../../javascripts/fckeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /></p><p>还是二级域名的,爽死了!<img src="../../../javascripts/fckeditor/editor/images/smiley/msn/shades_smile.gif" alt="" /></p>
          <br/>
          <span style="color:red;">
            <a href="http://qs-21th.javaeye.com/blog/66584#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 Mar 2007 10:09:42 +0800</pubDate>
        <link>http://qs-21th.javaeye.com/blog/66584</link>
        <guid>http://qs-21th.javaeye.com/blog/66584</guid>
      </item>
  </channel>
</rss>