<?xml version="1.0" encoding="GBK"?>
<?xml-stylesheet href="/style/rss.css" type="text/css"?>
<rss version="2.0" xmlns:eb="http://blog.tom.com/">
<channel>
  <title>丝路游侠</title>
  <link>http://blog.tom.com/xjxhd</link>
  <description><![CDATA[  ]]></description>
  <language>zh</language>
  <generator>newblog.tom.com RSS</generator>
  <pubDate></pubDate>    <item>
		<title><![CDATA[ 生活感言 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1321.html</link>
		<description><![CDATA[ <p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>一、知识更新及夯实</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为保证在竞争中的优势，需要更新自身的知识体系以适应不断变化的外部环境。知识更新有两方面的利益驱动：职业需求和自身价值体现。现代社会的快速发展，要求每个社会成员都要时刻保持清醒的头脑，须知每份工作尤其是信息类的工作，知识的更新速度日新月异，如果不能跟进高速行驶的列车，势必被远远落下，最终被社会抛弃。</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">知识掌握的牢固程度决定了你能否在工作中游刃有余，唯有夯实自身的基础，才能适应不断变化的外部世界，以不变应万变。</span></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>二、思维能力</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;</font></span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个人的思维能力是由多方面因素造成的，后天因素最为关键，好的思维需要不断学习和借鉴别人的成功经验，</span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>三、提高表达能力</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;</font></span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">“做的好不如说的好”这句话的流行有其合理性。一个人的能力如果要让别人知道确实需要有好的表达能力，现代社会，人们的接触圈比过去大很多，要让自己在和别人的交往中给对方留下好的印象，话说的漂亮显得非常关键，看看我们的周围有多少能力强但是拙于表现的人被埋没的例子吧，话说的漂亮有点讨巧的意思，但是谁不喜欢听漂亮话呢？</span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>四、提高交际能力</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;</font></span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">待人真诚，言出必行，充满活力，不断提高个人层次（生活品味和工作）</span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>五、加强领导能力</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;</font></span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">努力锻炼自己成为人群里的中心，遇事沉着，说话有条理，</span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><strong>六、增强体质</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;</font></span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">强健的体魄才能保证你有旺盛的精力去学习新知识。</span></p> ]]></description>
		<eb:creationDate>2009-02-01 12:04:15</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 删除List中的重复值 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1316.html</link>
		<description><![CDATA[ &nbsp; for (int i = 0; i &lt; list_total.size() - 1; i++) {<br>
&nbsp;&nbsp; for (int j = list_total.size() - 1; j &gt; i; j--) {<br>
&nbsp;&nbsp;&nbsp; if (list_total.get(j).equals(list_total.get(i))) {<br>
&nbsp;&nbsp;&nbsp;&nbsp; list_total.remove(j);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp; }<br>
&nbsp; } ]]></description>
		<eb:creationDate>2009-01-14 11:44:12</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 正则表达式判断日期类型 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1315.html</link>
		<description><![CDATA[ <p>package mypack;</p>
<p>import java.util.regex.Matcher;<br>
import java.util.regex.Pattern;</p>
<p>public class RegExpTest {</p>
<p><br>
&nbsp;public static void main(String[] args) {<br>
<br>
&nbsp;&nbsp;String date="2008-18-12";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String regExp = "[\\d]{4}-[0-1][0-9]-[0-3][0-9]";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern pattern = Pattern.compile(regExp);//预编译正则表达式<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher matcher = pattern.matcher(date);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isValidName = matcher.find&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isValidName)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;System.out.println("正常");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;System.out.println("不正常");<br>
&nbsp;}</p>
<p>}<br></p> ]]></description>
		<eb:creationDate>2009-01-13 17:33:24</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 单例模式singlton基本应用 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1308.html</link>
		<description><![CDATA[ <p>单例模式保证类的生成只有一个实例，jdbc应用中经常会用到，下面为实际内容：</p>
<p>package com.common.db;</p>
<p>import java.sql.Connection;<br>
import java.sql.SQLException;</p>
<p>import javax.naming.InitialContext;<br>
import javax.naming.NamingException;<br>
import javax.sql.DataSource;</p>
<p>/**<br>
&nbsp;* @类名: 类的中文名称<br>
&nbsp;* @功能说明：类功能的简要描述<br>
&nbsp;* @作者&nbsp;&nbsp;simon</p>
<p>&nbsp;* @版本 1.00<br>
&nbsp;* @创建时间：Dec 3, 2008&nbsp; 10:53:22 AM<br>
&nbsp;* @修改人员：simon<br>
&nbsp;* @修改说明：修改内容简要描述<br>
&nbsp;* @修改时间：Dec 3, 2008<br>
&nbsp;* @参考：参考类说明<br>
&nbsp;*/<br>
public class DBConnectionManager {<br>
&nbsp;private static DBConnectionManager instance;//静态实例变量<br>
&nbsp;<br>
<font color="#FF0000">&nbsp;public static synchronized DBConnectionManager getInstance(){//单例模式获得数据库连接类<br>
&nbsp;&nbsp;&nbsp;&nbsp; if (instance == null) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance = new DBConnectionManager();<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; return instance;<br>
&nbsp;&nbsp; }</font></p>
<p>&nbsp;<br>
&nbsp;&nbsp; public Connection getConnection() {<br>
&nbsp;&nbsp;&nbsp; Connection conn=null;<br>
&nbsp;&nbsp;try<br>
&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitialContext ctx = new InitialContext();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/connPool");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn=ds.getConnection();<br>
&nbsp;&nbsp; }<br>
&nbsp;&nbsp; catch(NamingException ex)<br>
&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>
&nbsp;&nbsp; }<br>
&nbsp;&nbsp; catch(SQLException ex)<br>
&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>
&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return conn;<br>
&nbsp;}<br>
}<br></p>
<p>调用方法如下：</p>
<p>import java.sql.Connection;<br>
import java.sql.PreparedStatement;<br>
import java.sql.ResultSet;<br>
import java.util.ArrayList;<br>
import java.util.List;</p>
<p>/**<br>
&nbsp;* @类名: 类的中文名称<br>
&nbsp;* @功能说明：类功能的简要描述<br>
&nbsp;* @作者&nbsp;&nbsp;simon&nbsp;<br>
&nbsp;* @版本 1.00<br>
&nbsp;* @创建时间：Dec 3, 2008&nbsp; 11:09:13 AM<br>
&nbsp;* @修改人员：simon<br>
&nbsp;* @修改说明：修改内容简要描述<br>
&nbsp;* @修改时间：Dec 3, 2008<br>
&nbsp;* @参考：参考类说明<br>
&nbsp;*/<br>
public class HouseManager {<br>
&nbsp;public List&lt;House&gt; getHouseList(){<br>
&nbsp;&nbsp;List&lt;House&gt; list=new ArrayList&lt;House&gt;();<br>
<font color="#FF0000">&nbsp;&nbsp;DBConnectionManager db=DBConnectionManager.getInstance();<br>
&nbsp;&nbsp;Connection con=db.getConnection();</font><br>
&nbsp;&nbsp;String sql = "select * from new_house_info";<br>
&nbsp;&nbsp;try{<br>
&nbsp;&nbsp;&nbsp;PreparedStatement ps = con.prepareStatement(sql);<br>
&nbsp;&nbsp;&nbsp;ResultSet rst=ps.executeQuery(sql);<br>
&nbsp;&nbsp;&nbsp;while(rst.next()){<br>
&nbsp;&nbsp;&nbsp;&nbsp;House house=new House();<br>
&nbsp;&nbsp;&nbsp;&nbsp;house.setHouse_type(rst.getString("house_type"));<br>
&nbsp;&nbsp;&nbsp;&nbsp;house.setPrivate_area(rst.getString("private_area"));<br>
&nbsp;&nbsp;&nbsp;&nbsp;house.setPublic_area(rst.getString("public_area"));<br>
&nbsp;&nbsp;&nbsp;&nbsp;house.setRoom_area(rst.getString("room_area"));<br>
&nbsp;&nbsp;&nbsp;&nbsp;house.setRoomid(rst.getInt("roomid"));<br>
&nbsp;&nbsp;&nbsp;&nbsp;list.add(house);<br>
&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;catch(Exception e){<br>
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>
&nbsp;&nbsp;}<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;return list;<br>
&nbsp;}</p>
<p>}<br></p> ]]></description>
		<eb:creationDate>2008-12-04 18:06:22</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 使用cas在tomcat实现单点登录 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1305.html</link>
		<description><![CDATA[ <p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226591699.JPG" target="_blank"></a><br>
&nbsp;&nbsp; cas是目前非常流行的企业应用SSO解决方案。本文就cas的配置及使用展开讨论，下图为cas原理：</p>
<p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226588257.jpg" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1113/1226588257.jpg"></a></p>
<p>&nbsp;</p>
<p>一、软件准备：</p>
<p>&nbsp;1、apache-tomcat-6.0.18。</p>
<p>&nbsp;2、cas-server-3.3.1-release.zip（cas服务器）。</p>
<p>&nbsp;3、cas-client-2.0.11.zip。</p>
<p>&nbsp;</p>
<p>二、配置tomcat的ssl</p>
<p>1、生成keystore证书</p>
<p>keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=localhost" -keystore server.keystore -storepass changeit</p>
<p>cn表示一个主机名或者一个域名，本机用localhost表示。</p>
<p>alias表示插入到证书中的别名。</p>
<p>命令执行完后，在当前目录生成server.keystore证书文件，注意，该文件一定要保护好，后面配置时需要用到。为了后面方便导入，将该文件直接生成在C:Program FilesJavajdk1.6.0_10jrelibsecurity目录下，该目录是我的jdk安装目录，注意：<font color="#FF0000">在windows下用导入证书时，目录名中间不能有空格，为了避免导入麻烦，jdk最好安装在没有空格的目录里</font>。</p>
<p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226589361.JPG" target="_blank"></a><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226589395.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1113/1226589395.JPG"></a><br></p>
<p>2、导出证书</p>
<p>keytool -export -alias tomcatsso -file server.cer -keystore server.keystore -storepass changeit</p>
<p>该命令执行完后在当前目录生成证书文件server.cer</p>
<p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226589622.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1113/1226589622.JPG"></a><br></p>
<p>3、将server.cer导入到jdk的信任库中</p>
<p>在导入之前可以看看信任库中有什么证书</p>
<p>keytool -list -keystore cacerts -storepass changeit</p>
<p>执行完该命令后显示所有证书信息。默认情况下jdk1.6 u10的cacerts信任库中有59条证书信息。</p>
<p>如果信任库中已经有自己的证书信息了，可以用下面的命令删除：</p>
<p>keytool -delete -alias tomcatsso -keystore cacerts -keypass changeit</p>
<p>需要指定tomcatsso别名。</p>
<p>导入证书用一下命令：</p>
<p>keytool -import -alias tomcatsso -file server.cer -keystore cacerts -storepass changeit<br>
执行结果如下：</p>
<p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226590034.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1113/1226590034.JPG"></a><br></p>
<p>以上就是tomcat中配置ssl的全部步骤。</p>
<p>&nbsp;</p>
<p>三、打开tomcat的https</p>
<p>打开%CATALINA_HOME%/conf/server.xml,找到如下内容：</p>
<p><font color="#00FF40">&nbsp;&nbsp;&nbsp; &lt;!--<br>
&nbsp;&nbsp;&nbsp; &lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" scheme="https" secure="true"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS" /&gt;<br>
&nbsp;&nbsp;&nbsp; --&gt;</font></p>
<p>将其换成如下内容</p>
<p>&nbsp;&nbsp;&nbsp; &lt;Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" scheme="https" secure="true"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keystorePass="changeit" keystoreFile="<font color="#FF0000">C:server.keystore</font>"/&gt;</p>
<p>注意红色部分，我将证书文件拷贝到C盘根下了，不过这不是必须的，我只是为了让目录结构尽量短些。</p>
<p>如果一切顺利，启动tomcat，在浏览器中输入<a href="https://localhost:8443/">https://localhost:8443/</a>，将会看到tomcat启动页面，说明tomcat的ssl已经配置成功。<br>
<br>
四、配置cas server</p>
<p>1、解压cas-server-3.3.1-release.zip，找到cas-server-webapp-3.3.1.war，重命名为cas.war,</p>
<p>将其拷贝到tomcatwebapps下，启动tomcat，生成cas目录，在cas的WEB-INF下的lib目录中拷贝如下jar包：</p>
<p>cas-server-support-jdbc-3.3.1.jar（该文件也在cas-server-3.3.1-release.zip中）</p>
<p>commons-dbcp.jar</p>
<p>commons-pool.jar</p>
<p>spring.jar（必须的）</p>
<p>根据你的数据库的不同，再下个其中拷贝对应数据库的jdbc驱动，本文使用mysql，则拷贝</p>
<p>mysql-connector-java-5.0.5-bin.jar</p>
<p>&nbsp;</p>
<p>2、配置cas的deployerConfigContext.xml</p>
<p>配置之前需要建立用户表：</p>
<p><a href="http://images.blog.tom.com/newimg/469/598/2008/1113/1226591724.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1113/1226591724.JPG"></a><br></p>
<p>打开cas/WEB-INF，打开deployerConfigContext.xml，先加入一个bean：</p>
<p>&lt;bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driverClassName"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="url"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:mysql://localhost:3306/mydata&lt;/value&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="username"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;root&lt;/value&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;111111&lt;/value&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>
&lt;/bean&gt;<br>
然后向下找到&lt;bean<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&gt;</p>
<p>将其注释掉，添加如下配置：</p>
<p>&lt;bean id="SearchModeSearchDatabaseAuthenticationHandler"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract="false"&nbsp; lazy-init="default"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autowire="default" dependency-check="default"&gt;<br>
&nbsp; &lt;property&nbsp; name="tableUsers"&gt;<br>
&nbsp;&nbsp; &lt;value&gt;t_users&lt;/value&gt;&lt;!--表的名字--&gt;<br>
&nbsp; &lt;/property&gt;<br>
&nbsp; &lt;property name="fieldUser"&gt;<br>
&nbsp;&nbsp; &lt;value&gt;username&lt;/value&gt;&gt;&lt;!--用户名对应的字段名--&gt;<br>
&nbsp; &lt;/property&gt;<br>
&nbsp; &lt;property name="fieldPassword"&gt;<br>
&nbsp;&nbsp; &lt;value&gt;password&lt;/value&gt;&gt;&lt;!--口令对应的字段名--&gt;<br>
&nbsp; &lt;/property&gt;<br>
&nbsp; &lt;property name="dataSource" ref="casDataSource" /&gt;<br>
&lt;/bean&gt;<br>
cas server到此配置完毕，启动tomcat，在地址栏输入：<a href="https://localhost:8443/cas/login">https://localhost:8443/cas/login</a></p>
<p>不出意外，将出现登陆窗口，如果前面数据库中有数据，如用户名为xhd，口令为111111，则在该登录页面输入，点击登录后将显示登陆成功的页面。<br></p>
<p>五、配置cas客户端</p>
<p>1、在myeclipse中建立一个web project，在web.xml中添加如下内容：</p>
<p>&nbsp; &lt;filter&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CAS Filter&lt;/filter-name&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;https://localhost:8443/cas/login&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;https://localhost:8443/cas/serviceValidate&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serverName&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;localhost:8080&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
<font color="#FF0000">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.wrapRequest&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;（1）</font><br>
&nbsp; &lt;/filter&gt;<br>
&nbsp; &lt;filter-mapping&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CAS Filter&lt;/filter-name&gt;<br>
&nbsp;&nbsp;&nbsp; <font color="#FF0000">&lt;url-pattern&gt;/*&lt;/url-pattern&gt;（2）<br></font>&nbsp; &lt;/filter-mapping&gt;</p>
<p>注意：（1）部分表示在cas server登录成功后，可以自动跳转到客户端访问的页面。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）部分表示客户端的所有资源都将被保护，也就是说当客户端访问的任何页面都将被cas验证。</p>
<p>2、解压cas-client-2.0.11.zip，在cas-client-2.0.11.zipcas-client-2.0.11javalib下找到casclient.jar，将其拷贝到客户应用的WEB-INFlib下。</p>
<p>好了，启动tomcat，体验你的辛苦带来的乐趣吧。</p>
<p>&nbsp;</p>
<p><strong>参考：</strong></p>
<p><a id="resources" name="resources"><span style="FONT-SIZE: 14px">使用 CAS 在 Tomcat 中实现单点登录</span></a></p>
<p><a href="http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html">http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html</a></p>
<p>&nbsp;</p>
<p><strong>原创作者：</strong></p>
<p>谢海东 java工程师，目前致力于大型网站的开发及设计，可以用Email：<a href="mailto:gzxhd@163.com">gzxhd@163.com</a>或qq：</p>
<p>99838559进行交流</p> ]]></description>
		<eb:creationDate>2008-11-13 23:29:02</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ dwr框架实现类似google的下拉列表 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1301.html</link>
		<description><![CDATA[ <p>&nbsp; 由于项目需要，对dwr框架进行一些了解，并在此基础上做了一个类似google查询感知的小东西，如下图所示：</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://images.blog.tom.com/newimg/469/598/2008/1015/1224056788.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/1015/1224056788.JPG"></a><br>
下面就随我开发该程序：</p>
<p>步骤一：在myeclipse中新建web工程，将dwr的jar包：dwr.jar和commons-logging-1.0.4.jar拷贝到WEB-INF/lib目录下</p>
<p>&nbsp;</p>
<p>步骤二：打开web.xml文件，增加如下servlet描述：</p>
<p>&nbsp; &lt;servlet&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
&nbsp; &lt;/servlet&gt;&nbsp;<br>
&nbsp;<br>
&nbsp; &lt;servlet-mapping&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br>
&nbsp; &lt;/servlet-mapping&gt;</p>
<p>&nbsp;</p>
<p>步骤三：在WebRoot目录下建立一个目录，名字随便给，将dwr框架的两个js文件拷贝进去：engine.js和</p>
<p>util.js，这两个文件要在最终的jsp文件中被引入。</p>
<p>&nbsp;</p>
<p>步骤四：写一个javabean，包括你要查询的字段，譬如SearchInfo，包含如下属性：</p>
<p>projectName</p>
<p>并对该属性生成get和set方法。</p>
<p>再建立一个业务类，主要是从数据库中查询信息，并返回一个ArrayList列表，该list包含上面的SearchInfo，代码片段如下：</p>
<p>&nbsp; public ArrayList getHistory(String content){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataBase db = new DataBase();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection con = db.getConnection();//获得数据库连接<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ArrayList&lt;SearchInfo&gt; aryResult = new ArrayList&lt;SearchInfo&gt;();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sql = "select distinct(project_name) from building_info where project_name like ? ";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!content.equals("")){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreparedStatement pstn = con.prepareStatement(sql);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstn.setString(1,content.trim()+"%");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs = pstn.executeQuery();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(rs.next()){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SearchInfo info = new SearchInfo();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info.setProjectName(rs.getString(1));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aryResult.add(info);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }finally{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con.close();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception ex){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("关闭连接异常"+ex.getMessage());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return aryResult;<br>
&nbsp; }</p>
<p>&nbsp;</p>
<p>步骤五：在WEB-INF目录下建立一个dwr.xml文件：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>
&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "<a href="http://getahead.org/dwr/dwr20.dtd">http://getahead.org/dwr/dwr20.dtd</a>"&gt;</p>
<p>&lt;dwr&gt;<br>
&nbsp; &lt;allow&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;!-- intro - for the test on index.html --&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;create creator="new" javascript="service"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="class" value="mypack.Service"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include method="<font color="#FF0000">getHistory</font>" /&gt;&lt;!--include表示Service类可以公开的方法--&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/create&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--convert解释：如果返回javabean，必须写convert--&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;convert converter="bean" match="mypack.SearchInfo"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="include" value="projectName"/&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/convert&gt;&nbsp;&nbsp;&nbsp;<br>
&nbsp; &lt;/allow&gt;<br>
&lt;/dwr&gt;<br></p>
<p>步骤六：建立一个list.js,用于显示下拉框，内容如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//*处理用户相关搜索*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function change(data){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到表格中的行数<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var count = document.getElementById('tab').rows.length;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果表中存在行,将所有行删除<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(count &gt;0){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=count-1;i&gt;=0;i--){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('tab').deleteRow(i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果存在相关搜索记录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(data.length &gt; 0){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('Related').style.display = '';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('x').style.display = '';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;data.length;i++){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objTr = document.getElementById('tab').insertRow();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objTd1 = objTr.insertCell(0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objTd1.innerHTML = "&lt;input readonly type='text' "<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +"size='35' name='txtHistory' style='border:none;background:#FFFFFF'"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +" value='"+data[i].projectName+"' onmouseover='overChangeColor(this)'"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +" onmouseleave='leaveChangeColor(this)' "<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +"onclick='clickHistory(this)'&gt;";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objTd2 = objTr.insertCell(1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objTd2.innerHTML = "&lt;input type='text' name='result' readonly"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +" size='15' style='border:none;background:#FFFFFF;text-align:right'"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +" value='' align='right'/&gt;";<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objTd2.align = 'right';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('Related').style.display = 'none';<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; /**//*关闭历史查询记录*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function myClose(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('Related').style.display = 'none';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//*鼠标在相关搜索内容上方时执行*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function overChangeColor(object){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var histories = document.getElementsByName('txtHistory');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;histories.length;i++){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果当前鼠标停留在某一行上<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(histories[i].style.background == '#ccffcc'){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; histories[i].style.background = '#FFFFFF';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tdObj1 = histories[i].parentElement;//td<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trObj1 = tdObj1.parentElement;//tr<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var childObj1 = trObj1.childNodes(1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x1 = childObj1.childNodes(0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1.style.background = '#FFFFFF';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object.style.background = '#CCFFCC';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tdObj = object.parentElement;//td<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trObj = tdObj.parentElement;//tr<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var childObj = trObj.childNodes(1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = childObj.childNodes(0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x.style.background = '#CCFFCC';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//*鼠标离开相关搜索内容上方时执行*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function leaveChangeColor(object){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object.style.background = '#FFFFFF';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tdObj = object.parentElement;//td<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trObj = tdObj.parentElement;//tr<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var childObj = trObj.childNodes(1);//td<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = childObj.childNodes(0);//input<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x.style.background = '#FFFFFF';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//*鼠标点击相关搜索内容时执行*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function clickHistory(object){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = object.value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('Related').style.display = 'none';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //frm.submit();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//*用户在搜索框中按键事件处理*/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function keySelectHistory(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var nKeyCode = window.event.keyCode;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nKeyCode == 38 || nKeyCode == 40){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var count = document.getElementById('tab').rows.length;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tempRowId;//记录鼠标悬浮所在行<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var flag = false;//标识是否有已经变色的行<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(count &gt; 0 &amp;&amp; (nKeyCode == 38 || nKeyCode == 40)){//如果存在相关搜索信息<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var histories = document.getElementsByName('txtHistory');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;histories.length;i++){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果当前鼠标停留在某一行上<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(histories[i].style.background == '#ccffcc'){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempRowId = i;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag = true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!flag){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempRowId = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nKeyCode == 38){//向上键<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tempRowId &gt; 0){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leaveChangeColor(histories[tempRowId]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overChangeColor(histories[tempRowId - 1]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = (histories[tempRowId - 1]).value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leaveChangeColor(histories[0]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overChangeColor(histories[count - 1]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = (histories[count - 1]).value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(nKeyCode == 40){//向下键<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tempRowId == 0 &amp;&amp; histories[0].style.background != '#ccffcc'){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overChangeColor(histories[0]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = histories[0].value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(tempRowId &lt; count -1){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leaveChangeColor(histories[tempRowId]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overChangeColor(histories[tempRowId + 1]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = (histories[tempRowId + 1]).value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leaveChangeColor(histories[tempRowId]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overChangeColor(histories[0]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.frm.content.value = histories[0].value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{//搜索框内容发生改变时(手动使其变化,而非通过上下键)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var str = document.frm.content.value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#FF0000">service.</font><font color="#00FF40">getHistory</font>(str,<font color="#0000FF">change</font>);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;注意：红色部分就是你在dwr.xml中javascript="service"中声明的方法名，绿色部分就是被公开的类方法，蓝色部分为一个callback函数</p>
<p>&nbsp;</p>
<p>步骤七：建立一个jsp文件如google.jsp，引入如下js文件：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="dwr/util.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="dwr/engine.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="list.js"&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp; <font color="#FF0000">&lt;script type="text/javascript" src="dwr/interface/service.js"&gt;&lt;/script&gt;</font></p>
<p><font color="#000000">注意红色部分，必须要这么写，service要和dwr.jar中定义的javascript="service"相对应。</font></p>
<p>在body中增加如下内容：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form action="" name="frm" method="post"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="model" value="search" /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="text" size="55" name="content"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#FF0000">onkeyup="keySelectHistory()"</font> /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="搜索" /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="Related"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; style="border:1px solid #f990033;display:'none';width:335;"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table id="tab" cellpadding="0" border="0" cellspacing="0"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a id="x" href='javascript:;' onclick='myClose()'<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; style="display:none"&gt;关闭&lt;/a&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>需要注意form中的相关域名要和list.js中的内容相对应，好了，试试吧。</p>
<p>本文参考了网上文章：“<a id="viewpost1_TitleUrl" href="http://www.blogjava.net/daizhenghenry/archive/2008/05/21/201987.html" name="viewpost1_TitleUrl">模拟Google首页(dwr实现ajax)</a>”，</p>
<p>本文可以和上文相互参考</p> ]]></description>
		<eb:creationDate>2008-10-15 16:19:43</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ struts1.x多模块应用详解 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1297.html</link>
		<description><![CDATA[ <p>&nbsp;&nbsp; 此前做过一些简单项目，模块的划分基本没涉及，此次规划一个中型网站，希望借助struts的多模块特性，实现多人并行开发。下面就将此次开发的心得记录下来，以飨读者。</p>
<p>&nbsp;&nbsp; <strong><font color="#00FF40">步骤一</font></strong>、先说说程序结构：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 假设有两个项目组分别开发用户管理模块和权限模块，最终集成到项目中WebRoot的目录分别是user和rbac。在主程序的WEB-INF下建立一个config目录，或者其他什么名字都可以，主要放置整个应用的各种配置文件，然后再建立一个struts目录，主要放置struts的配置文件，如果每个模块开发的struts配置文件都取一样的名字，如：struts-config.xml的话，则可以在struts下单独建立若干个目录，分别放置每个模块的struts-config.xml。如上所述有两个模块user和rbac，则在struts下可以建立两个目录，分别为user和rbac，当然名字可以随便，只要你记住是什么意思就行了，然后将每个模块的struts配置文件分别放置在user和rbac目录中。当然，如果你的应用每个模块的配置文件都取不一样的名字，那就不需要在struts目录下单独建立目录存放了。如下图所示：</p>
<p align="center"><a href="http://images.blog.tom.com/newimg/469/598/2008/0925/1222331800.JPG" target="_blank"><img src="http://images.blog.tom.com/newimg/469/598/2008/0925/1222331800.JPG"></a></p>
<p align="center">&nbsp;</p>
<p align="left">&nbsp;&nbsp; <font color="#00FF40"><strong>步骤二</strong></font>：在web.xml中注册模块</p>
<p align="left">&nbsp;&nbsp; 对于以上user和rbac两个模块需要在web.xml中进行注册，先找到默认的config配置，如下：</p>
<p align="left">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</p>
<p align="left">&nbsp;&nbsp; 然后在下面添加如下内容：</p>
<p align="left">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
<font color="#0080FF">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config<font color="#FF0000">/user</font>&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/config/struts/user/struts-config.xml&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config<font color="#FF0000">/rbac</font>&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/config/struts/rbac/struts-config.xml&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</font></p>
<p align="left">&nbsp;&nbsp;&nbsp; 蓝色的是新添加的模块注册内容，注意红色部分，user和rbac必须和WebRoot下的模块名称一一对应，我也不知道为什么会这样，这样做感觉非常不合适，而且改成别的就会错。</p>
<p><br></p>
<p>&nbsp;&nbsp; <font color="#00FF40"><strong>步骤三：</strong><font color="#000000">在主struts配置文件中设置跳转类</font></font></p>
<p>&nbsp;&nbsp;&nbsp; 打开主struts-config.xml，找到action-mappings，添加如下内容：</p>
<p>&nbsp; &lt;action-mappings &gt;</p>
<p>&nbsp;&nbsp;&nbsp; .......<br>
&nbsp;&nbsp;&nbsp; &lt;action path="/<font color="#FF0000">toModule</font>" type="org.apache.struts.actions.SwitchAction" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp; .......<br>
&nbsp; &lt;/action-mappings&gt;</p>
<p>&nbsp;&nbsp;&nbsp; 注意红色部分，这个名字可以随意。</p>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp; <font color="#00FF40"><strong>步骤四</strong></font>：测试</p>
<p>&nbsp;&nbsp; 跳转有两种方法：</p>
<p>&nbsp;&nbsp; 1<font color="#FF0000">、&lt;html:link module="/rbac" forward="toRoleReg"&gt;用户注册&lt;/html:link&gt;</font></p>
<p>&nbsp;&nbsp;&nbsp; module的值步骤二中红色字部分，forward为rbac模块struts-config.xml定义的全局forward</p>
<p>&nbsp;&nbsp;&lt;global-forwards &gt;<br>
&nbsp;&nbsp;&nbsp; &lt;forward name="toRoleReg" path="/toRoleReg.do" /&gt;&nbsp;</p>
<p>&nbsp; &lt;/global-forwards&gt;</p>
<p>&nbsp; &lt;action-mappings &gt;<br>
&nbsp;&nbsp;&nbsp; &lt;action forward="/roleReg.jsp" path="/toRoleReg" /&gt;</p>
<p>&nbsp; &lt;/action-mappings&gt;</p>
<p>&nbsp;&nbsp;&nbsp; 2、</p>
<p>&nbsp;&nbsp; &lt;html:link module="" action="/toModule.do?prefix=/rbac&amp;page=/roleReg.jsp"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;用户注册<br>
&nbsp;&nbsp;&nbsp;&lt;/html:link&gt;</p>
<p>&nbsp;&nbsp;&nbsp; module为空，toModule为主struts-config.xml中定义的内容，参看步骤三，prefix的值参看步骤二，page是必须的，只能指定jsp文件，而不能指定forward或action</p>
<p>&nbsp;&nbsp; 好了，完整的开发就完成了，有一点要注意，如果模块要在一个工程中开发的话，必须要注意相对路径问题，譬如：我在当前工程中同时开发user和rbac模块，则在单独的struts-config.xml中action的forward有可能为/rbac/roleReg.jsp，这样模块间跳转就会出现错误，可以将其改为/roleReg.jsp，牢牢记住roleReg.jsp是相对我的模块目录，而不是主目录，如果是相对我的目录，当然就不需要/rbac目录了。</p> ]]></description>
		<eb:creationDate>2008-09-25 17:06:56</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ dom4j读取xml文件 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1295.html</link>
		<description><![CDATA[ <p>xml文件读取手段很多，看了一些资料，感觉dom4j还是比较好用，现将具体步骤描述如下：</p>
<p>1、工程中包含dom4j-1.6.1.jar和jaxen-1.1.1.jar，后者必须包含，否则操作xml会出现异常。</p>
<p>&nbsp;</p>
<p>2、建立一个通用类，负责对xml文件进行操作：</p>
<p>import java.io.File;<br>
import java.util.ArrayList;<br>
import java.util.List;</p>
<p>import org.dom4j.Document;<br>
import org.dom4j.Element;<br>
import org.dom4j.Node;<br>
import org.dom4j.io.SAXReader;</p>
<p>/**<br>
&nbsp;* @类名: xml解析类<br>
&nbsp;* @功能说明：解析xml，并返回某节点的内容<br>
&nbsp;* @作者&nbsp;丝路游侠<br>
&nbsp;* @版本 1.00<br>
&nbsp;* @创建时间：Sep 22, 2008&nbsp; 4:00:54 PM<br>
&nbsp;* @修改人员：丝路游侠<br>
&nbsp;* @修改说明：修改内容简要描述<br>
&nbsp;* @修改时间：Sep 22, 2008<br>
&nbsp;* @参考：参考类说明<br>
&nbsp;*/<br>
public class XmlUtil {<br>
&nbsp;&nbsp;&nbsp; private SAXReader reader;<br>
&nbsp;&nbsp;&nbsp; private Document document;<br>
&nbsp;&nbsp;&nbsp; private File xmlFile;</p>
<p>&nbsp;&nbsp;&nbsp; /*初始化saxreader，并读取xml文件<br>
&nbsp;&nbsp;&nbsp;&nbsp; */<br>
&nbsp;&nbsp;&nbsp; public XmlUtil(String fileName) throws Exception {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlFile = new File(fileName);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = new SAXReader();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document = reader.read(xmlFile);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; /*通过XPath读取节点，selectNodes的参数必须为全路径,本方法返回多个字符串<br>
&nbsp;&nbsp;&nbsp;&nbsp; * */<br>
&nbsp;&nbsp;&nbsp; public List&lt;String&gt; readMultiNodes(String nodeString){//nodeString格式为"/students/student"，从根节点一直到当前节点<br>
&nbsp;&nbsp;&nbsp; &nbsp;List&lt;String&gt; nodes=new ArrayList&lt;String&gt;();<br>
&nbsp;&nbsp;&nbsp; &nbsp;List&lt;Element&gt; list=document.selectNodes(nodeString);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Element param : list) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nodes.add(param.getTextTrim());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return nodes;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp; /*通过XPath读取节点，selectNodes的参数必须为全路径,本方法返回一个字符串<br>
&nbsp;&nbsp;&nbsp;&nbsp; * */<br>
&nbsp;&nbsp;&nbsp; public String readSingleNodes(String nodeString){//nodeString格式为"/students/student"，从根节点一直到当前节点<br>
&nbsp;&nbsp;&nbsp; &nbsp;Node node = document.selectSingleNode(nodeString);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return node.getText();<br>
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;<br>
}<br></p>
<p>3、建立测试程序：</p>
<p>import java.util.List;</p>
<p>/**<br>
&nbsp;* @类名: 类的中文名称<br>
&nbsp;* @功能说明：类功能的简要描述<br>
&nbsp;* @作者&nbsp;&nbsp;丝路游侠<br>
&nbsp;* @版本 1.00<br>
&nbsp;* @创建时间：Sep 22, 2008&nbsp; 3:59:44 PM<br>
&nbsp;* @修改人员：丝路游侠<br>
&nbsp;* @修改说明：修改内容简要描述<br>
&nbsp;* @修改时间：Sep 22, 2008<br>
&nbsp;* @参考：参考类说明<br>
&nbsp;*/<br>
public class Test {</p>
<p>&nbsp;/**<br>
&nbsp; * @param args<br>
&nbsp; */<br>
&nbsp;public static void main(String[] args) {<br>
&nbsp;&nbsp;XmlUtil util=null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; util=new XmlUtil("src/student.xml");<br>
&nbsp;} catch (Exception e) {<br>
&nbsp;&nbsp;e.printStackTrace();<br>
&nbsp;}<br>
&nbsp;//方法一,一次读取多个节点<br>
&nbsp;List&lt;String&gt; list=util.readMultiNodes("/students/student/name");<br>
&nbsp;for (String al:list){<br>
&nbsp;&nbsp;System.out.println(al);<br>
&nbsp;}&nbsp;<br>
&nbsp;//方法二，一次读取一个节点<br>
&nbsp;String name=util.readSingleNodes("/students/student/name");<br>
&nbsp;System.out.println(name);</p>
<p>&nbsp;<br>
&nbsp;}</p>
<p>}</p>
<p>我的xml文件为：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp;&nbsp;<br>
&nbsp;<br>
&lt;?xml-stylesheet type="text/xsl" href="students.xsl"?&gt;&nbsp;<br>
&nbsp;<br>
&lt;students&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp; &lt;student sn="01"&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;张三&lt;/name&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;age&gt;18&lt;/age&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp; &lt;/student&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp; &lt;student sn="02"&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;李四&lt;/name&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;age&gt;20&lt;/age&gt;&nbsp;<br>
&nbsp;&nbsp;&nbsp; &lt;/student&gt;&nbsp;<br>
&lt;/students&gt;&nbsp;</p> ]]></description>
		<eb:creationDate>2008-09-23 11:35:33</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ java如何将日期和时间同时存入数据库 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1199.html</link>
		<description><![CDATA[ <p>sql server里面有个数据类型Datetime存放的就是日期＋时间的格式，比如：<br>
1900-1-1 16:36:44.000<br>
如果要将1900-1-1 16:36:44存入数据库中（即上面的Datetime字段），可以通过转换生成对应的Date数据就行。<br>
插入数据库的数据必须是java.sql.Date类型的日期，所以你可以通过类似你上面的处理将字符串转成java.sql.Date类型的日期再存入数据库就成。<br>
下面给你一个将字符串1900-1-1 16:36:44改变成一个java.sql.Date类型的一个class。<br>
import java.text.*;<br>
import java.util.Locale;<br>
public class StringToDate {<br>
&nbsp; public final static java.sql.Date string2Date(String dateString)<br>
&nbsp; throws java.lang.Exception {<br>
&nbsp;&nbsp;&nbsp; DateFormat dateFormat;<br>
&nbsp;&nbsp;&nbsp; dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);<br>
&nbsp;&nbsp;&nbsp; dateFormat.setLenient(false);<br>
&nbsp;&nbsp;&nbsp; java.util.Date timeDate = dateFormat.parse(dateString);//util类型<br>
&nbsp;&nbsp;&nbsp; java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型<br>
&nbsp;&nbsp;&nbsp; return dateTime;<br>
&nbsp; }<br>
}</p>
<p><br>
方法二<br>
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Date now = new java.util.Date();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String resultDate = sdf.format(now);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Date last = new java.util.Date(resultDate);<br>
.....<br>
psmt.setDate(i, new java.sql.Date(last)) ;</p> ]]></description>
		<eb:creationDate>2008-07-11 00:33:16</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 男人一生必须要做10件事 ]]></title>
		<link>http://blog.tom.com/xjxhd/article/1198.html</link>
		<description><![CDATA[ <p>1.至少挑战一次自己的极限，并且坚持到成功。不管是考试得第一名，或者游泳游过不曾穿越的河流，或者在讲台上当众演讲，你至少要成为一次主角，至少要让成功证明你一次，这样，在漫长而平淡的一生之中，你都始终相信自己是最棒的，自己有权在这个世界好好生活。</p>
<p>2.至少要有几个哥们，找到年少轻狂时共同成长的友谊。不管是纵酒狂歌，还是浪迹天涯；不管是春风得意，还是屡败屡战；在一起时，经常握握朋友的手，从中汲取力量分手之后，有一天记得寻找久已失去联系的旧日朋友。男人的友谊是你面对战场时坚实的依靠。</p>
<p>3.至少投入地爱一次。使人燃烧的爱情也许不能持久，但足够点亮男孩子一生的前程。曾经真爱，男人的肩膀才开始变得伟岸，因为只有为了自己的最爱，男人最优秀的品质才得以开发，才成为一个可以托付的大写的人。有人说爱情使人脆弱，但是真正的爱情使人坚强。</p>
<p>4.至少体验一次挫折，学习承受失败，并且学会反抗。男人的成人礼与他的三十岁生日无关———麦康伯在非洲猎狮子的时候忽然明白这个道理，这时候他被他一直害怕失去的妻子射杀，海明威没有告诉我们是不是误杀———但重要的是，男人不怕失去任何东西，丈夫轻身重一诺，从容游走于困境之中，将它变成辉煌的铺垫。</p>
<p>5.至少定一个计划，并且不折不扣地完成它。如有可能，体验一次军旅生活，在限制中强化律己与责任意识；男人的计划力和执行力决定了这个男人成功的概率，勇于并且善于实现自己的目标，男人的理想就具体为现实的成功，而成功，今天似乎成了男人的硕大特征。</p>
<p>6.至少每天衷心夸一次家人，感谢他们与你共同经营一个美满家庭。有机会的话倾听婴儿的第一声啼哭，让孩子带你成长在新时代，让你感受成熟也感受童心。常回家看看父母，陪父母聊聊天，至少像宠孩子一样关心父母。拜访你的恩师，大声说出你的爱，只有爱和感谢可以让你的幸福常在常新。</p>
<p>7.至少培养一种个人爱好，体验工作和家庭之外的另一种生活方式。寻找适合自己的娱乐及健身方式；珍藏一件特殊的物品；参加一次狂欢活动，感受激情与狂野；在野外远足，小住数日，倾听大自然的声音；买几张彩票，碰碰运气。所有爱好告诉你，生活并不只是按部就班，还有好多梦想来不及实现，稍微收敛一下狂妄之心，去体验丰富多彩生活的各个方面。</p>
<p>8.至少向自己所伤害过的人道一次歉，尽管你的选择迫不得已。至少宽恕一次，那个曾有负于你的人也有不得已之处；重新认识你的对手，从他们身上找到值得你与之竞争的优良素质；接受并珍惜生活赐予你的一切，如有可能，弥补一下生活的缺陷。</p>
<p>9.至少每年放纵自己旅行游玩一次。天地很大，你做得再成功也有可能呆在井底———到海阔天空，名山大川去扩充自己的胸襟：飘飘何所似，天地一沙鸥。到文化古迹去追寻历史的脚步：吟诗作对，风流自赏一把；凭吊古战场，感受苍凉和悲壮；纵身大化，然后悲天悯人。</p>
<p>10.至少写一点小东西，记录成长过程中的酸甜苦辣。写一个小自传，看看自己能写下的东西有多少；想象生命的最后一刻，假如明天来临，能否感悟生死；写下遗嘱，看看一生的安排是否已经妥当，是否还有未了的心愿，抓紧现在赶紧去做，因为身为男人，你今生一定有机会有能力去做自己想做的事！</p> ]]></description>
		<eb:creationDate>2008-07-11 00:29:36</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
</channel>
</rss>