﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-唐朝之千年不变</title><link>http://www.blogjava.net/jackson110/</link><description>编程技巧</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:00:13 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:00:13 GMT</pubDate><ttl>60</ttl><item><title>Lucene数据索引搜索示例</title><link>http://www.blogjava.net/jackson110/archive/2007/08/16/137142.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Thu, 16 Aug 2007 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/16/137142.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/137142.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/16/137142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/137142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/137142.html</trackback:ping><description><![CDATA[<p>平台：Lucene 2.1.0，JRE 1.4，Oracle 10g，IBM Web Sphere。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据表：Article。字段：ID（自动增长），Title（String），Content（String）。共有550000条记录。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对Article建立索引：  <p>&nbsp;1<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.analysis.*;<br>&nbsp;2<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.analysis.cn.*;<br>&nbsp;3<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.document.*;<br>&nbsp;4<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.index.*;<br>&nbsp;5<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;java.sql.*;<br>&nbsp;6<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;oracle.jdbc.pool.*;<br>&nbsp;7<img src="http://www.java3z.com/img/None.gif" align="top"><br>&nbsp;8<img src="http://www.java3z.com/img/ExpandedBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedBlock.gif" align="top">public class&nbsp;Index&nbsp;<img src="http://www.java3z.com/img/dot.gif">{<br>&nbsp;9<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;String&nbsp;url="jdbc:oracle:thin:@//192.168.0.l:1521/Test";<br>10<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;String&nbsp;user="terry";<br>11<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;String&nbsp;password="dev";<br>12<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;Connection&nbsp;con=null;<br>13<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;Statement&nbsp;st=null;<br>14<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;ResultSet&nbsp;rs=null;<br>15<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private&nbsp;String&nbsp;indexUrl="E:\\ArticleIndex";<br>16<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>17<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> private&nbsp;ResultSet&nbsp;getResult()&nbsp;throws&nbsp;Exception<img src="http://www.java3z.com/img/dot.gif">{<br>18<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleDataSource&nbsp;ods=new&nbsp;OracleDataSource();<br>19<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>20<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ods.setURL(this.url);<br>21<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ods.setUser(this.user);<br>22<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ods.setPassword(this.password);<br>23<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>24<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.con=ods.getConnection();<br>25<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.st=this.con.createStatement();<br>26<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.rs=this.st.executeQuery("SELECT&nbsp;*&nbsp;FROM&nbsp;Article");<br>27<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>28<img src="http://www.java3z.com/img/InBlock.gif" align="top"> return this.rs;<br>29<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}<br>30<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>31<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> public void&nbsp;createIndex()&nbsp;throws&nbsp;Exception<img src="http://www.java3z.com/img/dot.gif">{<br>32<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs=this.getResult();<br>33<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>34<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Analyzer&nbsp;chineseAnalyzer=new&nbsp;ChineseAnalyzer();<br>35<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexWriter&nbsp;indexWriter=new&nbsp;IndexWriter(this.indexUrl,chineseAnalyzer,true);<br>36<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.setMergeFactor(100);<br>37<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.setMaxBufferedDocs(100);<br>38<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>39<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Date&nbsp;startDate=new&nbsp;java.util.Date();<br>40<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>41<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("开始索引时间："+startDate);<br>42<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>43<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;executeIndex(rs,indexWriter);<br>44<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>45<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.optimize();<br>46<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>47<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.close();<br>48<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>49<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Date&nbsp;endDate=new&nbsp;java.util.Date();<br>50<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>51<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("索引结束时间："+endDate);<br>52<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("共花费："+(endDate.getTime()-startDate.getTime())+"ms");<br>53<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}<br>54<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>55<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> private void&nbsp;executeIndex(ResultSet&nbsp;rs,IndexWriter&nbsp;indexWriter)&nbsp;throws&nbsp;Exception<img src="http://www.java3z.com/img/dot.gif">{<br>56<img src="http://www.java3z.com/img/InBlock.gif" align="top"> int&nbsp;i=0;<br>57<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>58<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> while(rs.next())<img src="http://www.java3z.com/img/dot.gif">{<br>59<img src="http://www.java3z.com/img/InBlock.gif" align="top"> int&nbsp;id=rs.getInt("ID");<br>60<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;title=rs.getString("TITLE");<br>61<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;info=rs.getString("CONTENT");<br>62<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>63<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc=new&nbsp;Document();<br>64<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>65<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;idField=new&nbsp;Field("ID",Integer.toString(id),Field.Store.YES,Field.Index.NO,Field.TermVector.NO);<br>66<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;titleField=new&nbsp;Field("Title",title,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.YES);<br>67<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;infoField=new&nbsp;Field("Content",title,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.YES);<br>68<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>69<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.add(idField);<br>70<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.add(titleField);<br>71<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.add(infoField);<br>72<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>73<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexWriter.addDocument(doc);<br>74<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>75<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br>76<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>77<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>78<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.close();<br>79<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>80<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("共处理记录："+i);<br>81<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}<br>82<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>83<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> private void&nbsp;close()&nbsp;throws&nbsp;Exception<img src="http://www.java3z.com/img/dot.gif">{<br>84<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.rs.close();<br>85<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.st.close();<br>86<img src="http://www.java3z.com/img/InBlock.gif" align="top"> this.con.close();<br>87<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}<br>88<img src="http://www.java3z.com/img/ExpandedBlockEnd.gif" align="top">} <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查找： <p>&nbsp;1<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;java.io.*;<br>&nbsp;2<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.analysis.cn.*;<br>&nbsp;3<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.search.*;<br>&nbsp;4<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.store.*;<br>&nbsp;5<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.document.*;<br>&nbsp;6<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;org.apache.lucene.queryParser.QueryParser;<br>&nbsp;7<img src="http://www.java3z.com/img/None.gif" align="top"><br>&nbsp;8<img src="http://www.java3z.com/img/None.gif" align="top">import&nbsp;java.util.*;<br>&nbsp;9<img src="http://www.java3z.com/img/None.gif" align="top"><br>10<img src="http://www.java3z.com/img/ExpandedBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedBlock.gif" align="top">public class&nbsp;Search&nbsp;<img src="http://www.java3z.com/img/dot.gif">{<br>11<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>12<img src="http://www.java3z.com/img/InBlock.gif" align="top"> private static final&nbsp;String&nbsp;indexUrl="E:\\ArticleIndex";<br>13<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>14<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> public static void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception&nbsp;<img src="http://www.java3z.com/img/dot.gif">{<br>15<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top">/**/&nbsp;&nbsp;&nbsp;&nbsp;/*建立索引代码，查找时注释*/<br>16<img src="http://www.java3z.com/img/InBlock.gif" align="top"> //Index&nbsp;index=new&nbsp;Index();<br>17<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>18<img src="http://www.java3z.com/img/InBlock.gif" align="top"> //index.createIndex();<br>19<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>20<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>21<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>22<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>23<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;indexDir=new&nbsp;File(indexUrl);<br>24<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSDirectory&nbsp;fdir=FSDirectory.getDirectory(indexDir);<br>25<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>26<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IndexSearcher&nbsp;searcher=new&nbsp;IndexSearcher(fdir);<br>27<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>28<img src="http://www.java3z.com/img/InBlock.gif" align="top">//对中文建立解析（必须）<br>29<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryParser&nbsp;parser=new&nbsp;QueryParser("Title",new&nbsp;ChineseAnalyzer());<br>30<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query=parser.parse("李湘");<br>31<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>32<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;startDate=new&nbsp;Date();<br>33<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("检索开始时间："+startDate);<br>34<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>35<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hits&nbsp;result=searcher.search(query);<br>36<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>37<img src="http://www.java3z.com/img/ExpandedSubBlockStart.gif" align="top"><img src="http://www.java3z.com/img/ContractedSubBlock.gif" align="top"> for(int&nbsp;i=0;i&lt;result.length();i++)<img src="http://www.java3z.com/img/dot.gif">{<br>38<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc=result.doc(i);<br>39<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>40<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("内容："+doc.get("Content"));<br>41<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>42<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>43<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;endDate=new&nbsp;Date();<br>44<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>45<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("共有记录："+result.length());<br>46<img src="http://www.java3z.com/img/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("共花费："+(endDate.getTime()-startDate.getTime()));<br>47<img src="http://www.java3z.com/img/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}<br>48<img src="http://www.java3z.com/img/InBlock.gif" align="top"><br>49<img src="http://www.java3z.com/img/ExpandedBlockEnd.gif" align="top">} <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经测试，建立索引文件大概花了11分钟。一般情况下，和用SQL执行LIKE查询差不多。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然，这只是我的粗略测试。最近一阶段，我会对Lucene进行代码深入研究。 <img src ="http://www.blogjava.net/jackson110/aggbug/137142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-16 10:57 <a href="http://www.blogjava.net/jackson110/archive/2007/08/16/137142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建各种Lucene Query</title><link>http://www.blogjava.net/jackson110/archive/2007/08/16/137141.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Thu, 16 Aug 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/16/137141.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/137141.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/16/137141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/137141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/137141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 搜索流程中的第二步就是构建一个Query。下面就来介绍Query及其构建。 当用户输入一个关键字，搜索引擎接收到后，并不是立刻就将它放入后台开始进行关键字的检索，而应当首先对这个关键字进行一定的分析和处理，使之成为一种后台可以理解的形式，只有这样，才能提高检索的效率，同时检索出更加有效的结果。那么，在Lucene中，这种处理，其实就是构建一个Query对象。 就Query对象本身言，它只是Luce...&nbsp;&nbsp;<a href='http://www.blogjava.net/jackson110/archive/2007/08/16/137141.html'>阅读全文</a><img src ="http://www.blogjava.net/jackson110/aggbug/137141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-16 10:56 <a href="http://www.blogjava.net/jackson110/archive/2007/08/16/137141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java精品文章收集</title><link>http://www.blogjava.net/jackson110/archive/2007/08/15/136813.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 15 Aug 2007 00:50:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/15/136813.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/136813.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/15/136813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/136813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/136813.html</trackback:ping><description><![CDATA[<h4>&nbsp;</h4> <p>JDBC&nbsp;TM入门指南 <br><a href="http://www.zebcn.com/html/200411/103.html">http://www.zebcn.com/html/200411\103.html</a><br>Java&nbsp;程序编码规范 <br><a href="http://www.zebcn.com/html/200411/104.html">http://www.zebcn.com/html/200411\104.html</a><br>JavaBean入门 <br><a href="http://www.zebcn.com/html/200411/105.html">http://www.zebcn.com/html/200411\105.html</a><br>对JAVA语言的十个常见误解 <br><a href="http://www.zebcn.com/html/200411/114.html">http://www.zebcn.com/html/200411\114.html</a><br>简析JAVA的XML编程 <br><a href="http://www.zebcn.com/html/200411/115.html">http://www.zebcn.com/html/200411\115.html</a><br>Java技巧：列表排序 <br><a href="http://www.zebcn.com/html/200411/129.html">http://www.zebcn.com/html/200411\129.html</a><br>Java异常处理 <br><a href="http://www.zebcn.com/html/200411/130.html">http://www.zebcn.com/html/200411\130.html</a><br>Java中初学者比较爱出错的运算问题 <br><a href="http://www.zebcn.com/html/200411/131.html">http://www.zebcn.com/html/200411\131.html</a><br>类注释文档编写方法 <br><a href="http://www.zebcn.com/html/200411/132.html">http://www.zebcn.com/html/200411\132.html</a><br>对JAVA语言的十个常见误解 <br><a href="http://www.zebcn.com/html/200411/133.html">http://www.zebcn.com/html/200411\133.html</a><br>简析JAVA的XML编程(to:初学者们) <br><a href="http://www.zebcn.com/html/200411/134.html">http://www.zebcn.com/html/200411\134.html</a><br>关于窗口的操作详谈 <br><a href="http://www.zebcn.com/html/200411/135.html">http://www.zebcn.com/html/200411\135.html</a><br>Java&nbsp;语言中的&nbsp;return&nbsp;语句 <br><a href="http://www.zebcn.com/html/200411/136.html">http://www.zebcn.com/html/200411\136.html</a><br>Java连接各种数据库的实例 <br><a href="http://www.zebcn.com/html/200411/137.html">http://www.zebcn.com/html/200411\137.html</a><br>在Java中实现回调过程 <br><a href="http://www.zebcn.com/html/200411/138.html">http://www.zebcn.com/html/200411\138.html</a><br>Java&nbsp;中对文件的读写操作之比较 <br><a href="http://www.zebcn.com/html/200412/166.html">http://www.zebcn.com/html/200412\166.html</a><br>[原创]Java的文件读和写 <br><a href="http://www.zebcn.com/html/200412/167.html">http://www.zebcn.com/html/200412\167.html</a><br>java-在Java中读写Excel文件 <br><a href="http://www.zebcn.com/html/200412/171.html">http://www.zebcn.com/html/200412\171.html</a><br>实战JMS&nbsp;(转) <br><a href="http://www.zebcn.com/html/200412/172.html">http://www.zebcn.com/html/200412\172.html</a><br>取得时间的函数 <br><a href="http://www.zebcn.com/html/200412/177.html">http://www.zebcn.com/html/200412\177.html</a><br>JAVA-如何实现TIMER功能 <br><a href="http://www.zebcn.com/html/200412/179.html">http://www.zebcn.com/html/200412\179.html</a><br>数据库访问简单实现 <br><a href="http://www.zebcn.com/html/200412/180.html">http://www.zebcn.com/html/200412\180.html</a><br>将数据库操作封装到Javabean <br><a href="http://www.zebcn.com/html/200412/187.html">http://www.zebcn.com/html/200412\187.html</a><br>用Java编写扫雷游戏－－代码思想 <br><a href="http://www.zebcn.com/html/200412/190.html">http://www.zebcn.com/html/200412\190.html</a><br>Hibernate事务处理机制 <br><a href="http://www.zebcn.com/html/200412/191.html">http://www.zebcn.com/html/200412\191.html</a><br>jboss&nbsp;4.0&nbsp;中JSP调用EJB的简单例子 <br><a href="http://www.zebcn.com/html/200412/192.html">http://www.zebcn.com/html/200412\192.html</a><br>JSP&nbsp;WEBServer的实现原理 <br><a href="http://www.zebcn.com/html/200412/193.html">http://www.zebcn.com/html/200412\193.html</a><br>Spring&nbsp;入门(一个简单的例子) <br><a href="http://www.zebcn.com/html/200501/204.html">http://www.zebcn.com/html/200501\204.html</a> <p>使用Java生成Pdf文档 <br><a href="http://www.zebcn.com/html/200501/205.html">http://www.zebcn.com/html/200501\205.html</a><br>JAVA生成JPG缩略图 <br><a href="http://www.zebcn.com/html/200501/206.html">http://www.zebcn.com/html/200501\206.html</a><br>学习J2ME编程需要掌握的七种技术 <br><a href="http://www.zebcn.com/html/200501/210.html">http://www.zebcn.com/html/200501\210.html</a><br>第一个EJB3.0范例 <br><a href="http://www.zebcn.com/html/200502/213.html">http://www.zebcn.com/html/200502\213.html</a><br>Java&nbsp;RMI&nbsp;简单示例 <br><a href="http://www.zebcn.com/html/200502/215.html">http://www.zebcn.com/html/200502\215.html</a><br>[原创]java初学者之经验总结 <br><a href="http://www.zebcn.com/html/200502/217.html">http://www.zebcn.com/html/200502\217.html</a><br>Tomcat配置技巧Top&nbsp;10 <br><a href="http://www.zebcn.com/html/200502/218.html">http://www.zebcn.com/html/200502\218.html</a><br>学习Java的30个基本概念 <br><a href="http://www.zebcn.com/html/200502/222.html">http://www.zebcn.com/html/200502\222.html</a><br>java常用的加密,解密,数字签名等API <br><a href="http://www.zebcn.com/html/200502/227.html">http://www.zebcn.com/html/200502\227.html</a><br>一种简单的struts级连菜单实现方法 <br><a href="http://www.zebcn.com/html/200502/228.html">http://www.zebcn.com/html/200502\228.html</a><br>2005年4月5日Java新品发布公告 <br><a href="http://www.zebcn.com/html/200504/232.html">http://www.zebcn.com/html/200504\232.html</a><br>Java连接各种数据库的实例 <br><a href="http://www.zebcn.com/html/200504/241.html">http://www.zebcn.com/html/200504\241.html</a><br>Java常见问题集锦（来自Sun中国官方站） <br><a href="http://www.zebcn.com/html/200504/243.html">http://www.zebcn.com/html/200504\243.html</a><br>java&nbsp;文件操作大全 <br><a href="http://www.zebcn.com/html/200504/249.html">http://www.zebcn.com/html/200504\249.html</a><br>J2EE项目危机【翻译】 <br><a href="http://www.zebcn.com/html/200505/254.html">http://www.zebcn.com/html/200505\254.html</a><br>JAVA对数字证书的常用操作 <br><a href="http://www.zebcn.com/html/200510/275.html">http://www.zebcn.com/html/200510\275.html</a><br>三种整合Struts&nbsp;应用程序与Spring的方式 <br><a href="http://www.zebcn.com/html/200511/278.html">http://www.zebcn.com/html/200511\278.html</a><br>[分享]Ant简介 <br><a href="http://www.zebcn.com/html/200511/282.html">http://www.zebcn.com/html/200511\282.html</a><br>Struts&nbsp;的动态复选框 <br><a href="http://www.zebcn.com/html/200511/289.html">http://www.zebcn.com/html/200511\289.html</a><br>集成&nbsp;Struts、Tiles&nbsp;和&nbsp;JavaServer&nbsp;Faces <br><a href="http://www.zebcn.com/html/200511/293.html">http://www.zebcn.com/html/200511\293.html</a><br>J2ME应用程序内存优化三招 <br><a href="http://www.zebcn.com/html/200512/338.html">http://www.zebcn.com/html/200512\338.html</a><br>一个生成无重复数字的代码 <br><a href="http://www.zebcn.com/html/200512/351.html">http://www.zebcn.com/html/200512\351.html</a><br>RSS&nbsp;开发教程 <br><a href="http://www.zebcn.com/html/200512/355.html">http://www.zebcn.com/html/200512\355.html</a><br>java写的贪吃蛇游戏 <br><a href="http://www.zebcn.com/html/200512/360.html">http://www.zebcn.com/html/200512\360.html</a><br>应用Java技术开发WAP应用程序 <br><a href="http://www.zebcn.com/html/200512/361.html">http://www.zebcn.com/html/200512\361.html</a><br>web框架Jakarta&nbsp;Tapestry&nbsp;4.0-rc-3&nbsp;发布 <br><a href="http://www.zebcn.com/html/200512/366.html">http://www.zebcn.com/html/200512\366.html</a><br>校验获取身份证信息的JAVA程序 <br><a href="http://www.zebcn.com/html/200512/368.html">http://www.zebcn.com/html/200512\368.html</a><br>模式实践：观察者模式与Spring <br><a href="http://www.zebcn.com/html/200512/369.html">http://www.zebcn.com/html/200512\369.html</a><br>XML读写/存取属性的Java工具类库 <br><a href="http://www.zebcn.com/html/200512/370.html">http://www.zebcn.com/html/200512\370.html</a><br>JAVA写的四则混合运算 <br><a href="http://www.zebcn.com/html/200512/371.html">http://www.zebcn.com/html/200512\371.html</a><br>Web框架RIFE/Laszlo&nbsp;1.3.1&nbsp;发布 <br><a href="http://www.zebcn.com/html/200601/372.html">http://www.zebcn.com/html/200601\372.html</a><br>使用&nbsp;JSF&nbsp;架构进行设计 <br><a href="http://www.zebcn.com/html/200601/376.html">http://www.zebcn.com/html/200601\376.html</a><br>用java做的滚动的正弦曲线 <br><a href="http://www.zebcn.com/html/200601/378.html">http://www.zebcn.com/html/200601\378.html</a><br>EJB3.0和Spring比较 <br><a href="http://www.zebcn.com/html/200601/379.html">http://www.zebcn.com/html/200601\379.html</a><br>Struts&nbsp;中常见错误 <br><a href="http://www.zebcn.com/html/200601/380.html">http://www.zebcn.com/html/200601\380.html</a><br>漫谈Java数据库存取技术 <br><a href="http://www.zebcn.com/html/200601/381.html">http://www.zebcn.com/html/200601\381.html</a><br>Java多线程程序设计 <br><a href="http://www.zebcn.com/html/200601/385.html">http://www.zebcn.com/html/200601\385.html</a><br>JAVA中的时间操作 <br><a href="http://www.zebcn.com/html/200601/386.html">http://www.zebcn.com/html/200601\386.html</a><br>12个最重要的J2EE最佳实践 <br><a href="http://www.zebcn.com/html/200601/389.html">http://www.zebcn.com/html/200601\389.html</a><br>Java中的异步网络编程 <br><a href="http://www.zebcn.com/html/200601/394.html">http://www.zebcn.com/html/200601\394.html</a><br>Java&nbsp;I/O重定向 <br><a href="http://www.zebcn.com/html/200601/395.html">http://www.zebcn.com/html/200601\395.html</a><br>构建高性能J2EE应用的10个技巧 <br><a href="http://www.zebcn.com/html/200601/397.html">http://www.zebcn.com/html/200601\397.html</a><br>java程序得到域名对应的所有IP地址 <br><a href="http://www.zebcn.com/html/200601/398.html">http://www.zebcn.com/html/200601\398.html</a><br>Java语言编程中更新XML文档的常用方法 <br><a href="http://www.zebcn.com/html/200601/401.html">http://www.zebcn.com/html/200601\401.html</a><br>HTTP代理如何正确处理Cookie <br><a href="http://www.zebcn.com/html/200601/405.html">http://www.zebcn.com/html/200601\405.html</a> <p>作者： <a href="http://passport.baidu.com/?detail&amp;aid=6&amp;default_tab=1&amp;un=fafile">fafile</a> 2006-5-18 09:57 <a href="http://post.baidu.com/f?kz=100563186#sub">回复此发言</a> <hr align="left" width="87%" size="1">  <p><a></a> <p>3<br><a></a>回复：Java精品文章收集 <p>JavaMail&nbsp;发送HTML邮件 <br><a href="http://www.zebcn.com/html/200602/411.html">http://www.zebcn.com/html/200602\411.html</a><br>JSP数据类型 <br><a href="http://www.zebcn.com/html/200602/412.html">http://www.zebcn.com/html/200602\412.html</a><br>Java5&nbsp;多线程实践 <br><a href="http://www.zebcn.com/html/200602/415.html">http://www.zebcn.com/html/200602\415.html</a><br>JDK5.0的11个主要新特征 <br><a href="http://www.zebcn.com/html/200602/419.html">http://www.zebcn.com/html/200602\419.html</a><br>运用类反射机制简化Struts应用程序开发 <br><a href="http://www.zebcn.com/html/200602/420.html">http://www.zebcn.com/html/200602\420.html</a><br>用&nbsp;Struts&nbsp;实现动态单选按钮 <br><a href="http://www.zebcn.com/html/200602/421.html">http://www.zebcn.com/html/200602\421.html</a><br>JDO技术分析及企业应用研究 <br><a href="http://www.zebcn.com/html/200602/422.html">http://www.zebcn.com/html/200602\422.html</a><br>一个J2EE项目的最小工具集 <br><a href="http://www.zebcn.com/html/200602/425.html">http://www.zebcn.com/html/200602\425.html</a><br>一个实现MD5的简洁的java类 <br><a href="http://www.zebcn.com/html/200602/429.html">http://www.zebcn.com/html/200602\429.html</a><br>服务器与浏览器的会话 <br><a href="http://www.zebcn.com/html/200602/434.html">http://www.zebcn.com/html/200602\434.html</a><br>使用Spring&nbsp;JMS简化异步消息处理 <br><a href="http://www.zebcn.com/html/200603/443.html">http://www.zebcn.com/html/200603\443.html</a><br>采用HttpServlet&nbsp;实现web文件下载 <br><a href="http://www.zebcn.com/html/200603/444.html">http://www.zebcn.com/html/200603\444.html</a><br>Spring&nbsp;AOP实际应用一例 <br><a href="http://www.zebcn.com/html/200603/445.html">http://www.zebcn.com/html/200603\445.html</a><br>JNI中文处理问题小结 <br><a href="http://www.zebcn.com/html/200603/446.html">http://www.zebcn.com/html/200603\446.html</a><br>java获取windows系统网卡mac地址 <br><a href="http://www.zebcn.com/html/200603/454.html">http://www.zebcn.com/html/200603\454.html</a><br>Swing&nbsp;vs.&nbsp;SWT&nbsp;之调用堆栈性能比较 <br><a href="http://www.zebcn.com/html/200603/462.html">http://www.zebcn.com/html/200603\462.html</a><br>Using&nbsp;SVN&nbsp;with&nbsp;Ant <br><a href="http://www.zebcn.com/html/200603/463.html">http://www.zebcn.com/html/200603\463.html</a><br>mud程序及内附的dom4j解析xml源代码 <br><a href="http://www.zebcn.com/html/200603/464.html">http://www.zebcn.com/html/200603\464.html</a><br>myeclipse中J2EE项目之间的组织结构 <br><a href="http://www.zebcn.com/html/200603/465.html">http://www.zebcn.com/html/200603\465.html</a><br>初学者如何开发出高质量的J2EE系统 <br><a href="http://www.zebcn.com/html/200603/467.html">http://www.zebcn.com/html/200603\467.html</a><br>WebLogic&nbsp;Server&nbsp;管理最佳实践 <br><a href="http://www.zebcn.com/html/200603/474.html">http://www.zebcn.com/html/200603\474.html</a><br>WebLogic&nbsp;Server&nbsp;性能调优 <br><a href="http://www.zebcn.com/html/200603/475.html">http://www.zebcn.com/html/200603\475.html</a><br>简化WebLogic&nbsp;8.1项目的配置 <br><a href="http://www.zebcn.com/html/200603/476.html">http://www.zebcn.com/html/200603\476.html</a><br>WebLogic域配置策略-手动和模板选项 <br><a href="http://www.zebcn.com/html/200603/477.html">http://www.zebcn.com/html/200603\477.html</a><br>JDBC中获取数据表的信息 <br><a href="http://www.zebcn.com/html/200603/479.html">http://www.zebcn.com/html/200603\479.html</a><br>Java&nbsp;开发中遇到的乱码问题 <br><a href="http://www.zebcn.com/html/200603/484.html">http://www.zebcn.com/html/200603\484.html</a><br>简易的http客户端附源代码 <br><a href="http://www.zebcn.com/html/200603/486.html">http://www.zebcn.com/html/200603\486.html</a><br>JDBC&nbsp;4.0规范之目标 <br><a href="http://www.zebcn.com/html/200603/487.html">http://www.zebcn.com/html/200603\487.html</a><br>java的各种排序算法 <br><a href="http://www.zebcn.com/html/200603/495.html">http://www.zebcn.com/html/200603\495.html</a><br>用Java实现Web服务器 <br><a href="http://www.zebcn.com/html/200603/496.html">http://www.zebcn.com/html/200603\496.html</a><br>使用DBMS存储过程 <br><a href="http://www.zebcn.com/html/200603/497.html">http://www.zebcn.com/html/200603\497.html</a><br>Java剖析工具YourKit&nbsp;Java&nbsp;Profiler&nbsp;6.0-EAP1&nbsp;发布 <br><a href="http://www.zebcn.com/html/200603/3253.html">http://www.zebcn.com/html/200603\3253.html</a><br>用Java快速开发Linux&nbsp;GUI应用 <br><a href="http://www.zebcn.com/html/200603/3260.html">http://www.zebcn.com/html/200603\3260.html</a><br>java&nbsp;理论与实践:&nbsp;伪&nbsp;typedef&nbsp;反模式 <br><a href="http://www.zebcn.com/html/200604/3262.html">http://www.zebcn.com/html/200604\3262.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(1) <br><a href="http://www.zebcn.com/html/200604/3263.html">http://www.zebcn.com/html/200604\3263.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(2) <br><a href="http://www.zebcn.com/html/200604/3264.html">http://www.zebcn.com/html/200604\3264.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(3) <br><a href="http://www.zebcn.com/html/200604/3265.html">http://www.zebcn.com/html/200604\3265.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(4) <br><a href="http://www.zebcn.com/html/200604/3266.html">http://www.zebcn.com/html/200604\3266.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(5) <br><a href="http://www.zebcn.com/html/200604/3267.html">http://www.zebcn.com/html/200604\3267.html</a><br>使用&nbsp;Struts&nbsp;Validator&nbsp;(6) <br><a href="http://www.zebcn.com/html/200604/3268.html">http://www.zebcn.com/html/200604\3268.html</a><br>查询数据库后返回Iterator <br><a href="http://www.zebcn.com/html/200604/3278.html">http://www.zebcn.com/html/200604\3278.html</a><br>DOM属性用法速查手册 <br><a href="http://www.zebcn.com/html/200604/3279.html">http://www.zebcn.com/html/200604\3279.html</a><br>论J2EE程序员的武功修为 <br><a href="http://www.zebcn.com/html/200604/3280.html">http://www.zebcn.com/html/200604\3280.html</a><br>让window服务进程中自动加载MYSQL服务 <br><a href="http://www.zebcn.com/html/200604/3287.html">http://www.zebcn.com/html/200604\3287.html</a><br>J2EE应用程序异常处理框架 <br><a href="http://www.zebcn.com/html/200604/3289.html">http://www.zebcn.com/html/200604\3289.html</a><br>Java2下Applet数字签名具体实现方法 <br><a href="http://www.zebcn.com/html/200604/3290.html">http://www.zebcn.com/html/200604\3290.html</a><br>使用tomcat4.1.31和mysql&nbsp;配置数据源 <br><a href="http://www.zebcn.com/html/200604/3291.html">http://www.zebcn.com/html/200604\3291.html</a><br>用java得到本机所有的ip地址 <br><a href="http://www.zebcn.com/html/200604/3292.html">http://www.zebcn.com/html/200604\3292.html</a><br>使用Socket连接穿越CMWAP代理 <br><a href="http://www.zebcn.com/html/200604/3293.html">http://www.zebcn.com/html/200604\3293.html</a><br>Java读取Excel方式对比 <br><a href="http://www.zebcn.com/html/200604/3294.html">http://www.zebcn.com/html/200604\3294.html</a></p><img src ="http://www.blogjava.net/jackson110/aggbug/136813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-15 08:50 <a href="http://www.blogjava.net/jackson110/archive/2007/08/15/136813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几种js实现的动态多文件上传</title><link>http://www.blogjava.net/jackson110/archive/2007/08/15/136808.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 15 Aug 2007 00:38:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/15/136808.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/136808.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/15/136808.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/136808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/136808.html</trackback:ping><description><![CDATA[<h4>&nbsp;</h4>方式一：事先写好多个input.在点击时才显示。也就是说上传的最大个数是写死了的。<br>&nbsp;html <p><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;p&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;a&nbsp;href='#'&nbsp;onclick='javascript:viewnone(more1)'&gt;&nbsp;添加附件&nbsp;&lt;/a&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;div&nbsp;id='more1'&nbsp;style='display:none'&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"> &lt;input&nbsp;type="file"&nbsp;name="attach1"&nbsp;size="50"javascript:viewnone(more2)&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"> &lt;/span&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;/div&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;div&nbsp;id='more2'&nbsp;style='display:none'&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"> &lt;input&nbsp;type="file"&nbsp;name="attach2"&nbsp;size="50"'&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;/div&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;/p&gt; <p>js  <p>&lt;SCRIPT&nbsp;language="javascript"&gt;<br>function&nbsp;viewnone(e){<br>&nbsp;&nbsp;&nbsp;&nbsp;e.style.display=(e.style.display=="none")?"":"none";<br>&nbsp;&nbsp;}<br>&lt;/script&gt; <p>方式二:这种方式的动态多文件上传是实现了的，很简单的，不说废话看code<br>html <p><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;input&nbsp;type="button"&nbsp;name="button"&nbsp;value="添加附件"&nbsp;onclick="addInput()"&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;input&nbsp;type="button"&nbsp;name="button"&nbsp;value="删除附件"&nbsp;onclick="deleteInput()"&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;span&nbsp;id="upload"&gt;&lt;/span&gt; <p>js <p>&lt;script&nbsp;type="text/javascript"&gt;<br>var&nbsp;attachname&nbsp;= "attach";<br>var&nbsp;i=1;<br>function&nbsp;&nbsp;&nbsp;addInput(){<br>if(i&gt;0){<br>var&nbsp;attach&nbsp;=&nbsp;attachname&nbsp;+&nbsp;i&nbsp;;<br>if(createInput(attach))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=i+1;<br>&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>function&nbsp;deleteInput(){<br>if(i&gt;1){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=i-1;<br>if(!removeInput())<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;i=i+1;<br>&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;<br>function&nbsp;createInput(nm){&nbsp;&nbsp;&nbsp;<br>var&nbsp;&nbsp;aElement=document.createElement("input");&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aElement.name=nm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aElement.id=nm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aElement.type="file";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aElement.size="50";<br>//aElement.value="thanks";&nbsp;&nbsp;&nbsp;<br>//aElement.onclick=Function("asdf()");&nbsp;&nbsp;<br>if(document.getElementById("upload").appendChild(aElement)&nbsp;== null)<br>return false;<br>return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>function&nbsp;removeInput(nm){<br>var&nbsp;aElement&nbsp;=&nbsp;document.getElementById("upload");<br>if(aElement.removeChild(aElement.lastChild)&nbsp;== null)<br>return false;<br>return true;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&lt;/script&gt; <p>方式三：动态多文件上传，只是在oFileInput.click();这个地方，这样做就不能上传这个文件了，因为发现它在上传之时就把这个input中的文件置空了。很可能是为了安全着想吧！<br>另外还有一点就是说，click()只有在ie中才能正常运行。<br>虽说这种方式最终没能实现上传，但还是留下来参考，看看是否有人可以真正实现上传。<br>&nbsp;html <p>&lt;A&nbsp;href="javascript:newUpload();"&gt;添加附件&lt;/A&gt;<br>&lt;TABLE&nbsp;width="100%"&nbsp;border="0"&nbsp;cellpadding="0"&nbsp;cellspacing="1"&gt;<br>&lt;TBODY&nbsp;id="fileList"&gt;&lt;/TBODY&gt;<br>&lt;/TABLE&gt;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&lt;DIV&nbsp;id="uploadFiles"&nbsp;style="display:block"&gt;&lt;/DIV&gt; <p>js <p>&lt;SCRIPT&nbsp;language="javascript"&gt;<br>//---新建上传<br>function&nbsp;newUpload(){<br>var&nbsp;oFileList&nbsp;=&nbsp;document.getElementById("fileList");<br>var&nbsp;fileCount&nbsp;=&nbsp;oFileList.childNodes.length&nbsp;+ 1;<br>var&nbsp;oFileInput&nbsp;=&nbsp;newFileInput("upfile_" +&nbsp;fileCount);<br>if(selectFile(oFileInput)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addFile(oFileInput);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>//----选择文件<br>function&nbsp;selectFile(oFileInput){<br>var&nbsp;oUploadFiles&nbsp;=&nbsp;document.getElementById("uploadFiles");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUploadFiles.appendChild(oFileInput);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.focus();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.click();//不能这样做，可能是为了安全着想吧！<br>var&nbsp;fileValue&nbsp;=&nbsp;oFileInput.value;<br>if(fileValue&nbsp;== ""){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUploadFiles.removeChild(oFileInput);<br>return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>else<br>return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>//---新建一个文件显示列表<br>function&nbsp;addFile(oFileInput){<br>var&nbsp;oFileList&nbsp;=&nbsp;document.getElementById("fileList");<br>var&nbsp;fileIndex&nbsp;=&nbsp;oFileList.childNodes.length&nbsp;+ 1;<br>var&nbsp;oTR&nbsp;&nbsp;=&nbsp;document.createElement("TR");<br>var&nbsp;oTD1&nbsp;=&nbsp;document.createElement("TD");<br>var&nbsp;oTD2&nbsp;=&nbsp;document.createElement("TD");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTR.setAttribute("id","file_" +&nbsp;fileIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTR.setAttribute("bgcolor","#FFFFFF");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTD1.setAttribute("width","6%");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTD2.setAttribute("width","94%");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTD2.setAttribute("align","left");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTD2.innerText&nbsp;=&nbsp;oFileInput.value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTD1.innerHTML&nbsp;=&nbsp;'&lt;A&nbsp;href="javascript:removeFile('+&nbsp;fileIndex&nbsp;+&nbsp;');"&gt;删除&lt;/A&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTR.appendChild(oTD1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oTR.appendChild(oTD2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileList.appendChild(oTR);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>//---移除上传的文件&nbsp;<br>function&nbsp;removeFile(fileIndex){<br>var&nbsp;oFileInput&nbsp;=&nbsp;document.getElementById("upfile_" +&nbsp;fileIndex);<br>var&nbsp;oTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;document.getElementById("file_" +&nbsp;fileIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uploadFiles.removeChild(oFileInput);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileList.removeChild(oTR);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>//---创建一个file&nbsp;input对象并返回<br>function&nbsp;newFileInput(_name){<br>var&nbsp;oFileInput&nbsp;&nbsp;=&nbsp;document.createElement("INPUT");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.type&nbsp;= "file";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.id&nbsp;=&nbsp;_name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.name&nbsp;=&nbsp;_name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInput.size="50";<br>//oFileInput.setAttribute("id",_name);<br>//oFileInput.setAttribute("name",_name);<br>//oFileInput.outerHTML&nbsp;=&nbsp;'&lt;INPUT&nbsp;type=file&nbsp;id='&nbsp;+&nbsp;_name&nbsp;+&nbsp;'&nbsp;name='&nbsp;+&nbsp;_name&nbsp;+&nbsp;'&gt;';<br>//alert(oFileInput.outerHTML);<br>return&nbsp;oFileInput;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&lt;/SCRIPT&gt; <p>posted on 2007-01-26 17:21 <a href="http://www.blogjava.net/bnlovebn/">重归本垒（BNBN）</a> 阅读(1656) <a href="http://www.blogjava.net/#Post">评论(4)</a> <a href="http://www.blogjava.net/bnlovebn/admin/EditPosts.aspx?postid=96194">编辑</a> <a href="http://www.blogjava.net/bnlovebn/AddToFavorite.aspx?id=96194">收藏</a> <a href="http://www.blogjava.net/bnlovebn/services/trackbacks/96194.aspx">引用</a> 所属分类: <a href="http://www.blogjava.net/bnlovebn/category/19433.html">JS</a> <p><img height="1" src="http://www.blogjava.net/bnlovebn/aggbug/96194.html?webview=1" width="1"> <p><a></a><a> <h5>评论</h5> <h6><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#96264">#</a> <a></a>re: 几种js实现的动态多文件上传 2007-01-27 13:20 <a href="http://www.blogjava.net/crespo9907/">施伟</a></h6> <p>呵呵，我的方法不知道和你的三种方法有没有可比性，个人感觉还不错！ <br>做一个 添加附件 然后做一个type为file的input框，把此框和span定位重叠起来 把file框透明度设置为0 即完全看不到，但是确实存在。这个时候点span的时候就是在点这个file框 但是看不到file框子 是不是实现了呢？ 然后再结合你第二种的方式给框编号 动态增加就可以实现多文件上传了 。 <br>呵呵 我在我的程序里面这样实现的 很好用 如果有兴趣讨论到我blog留言 或者发邮件给我吧 多交流。。。 <br><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#post">回复</a> <a href="http://www.blogjava.net/comment?author=%e6%96%bd%e4%bc%9f">更多评论</a> <a href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl00$DeleteLink','')"></a><a></a> <h6><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#96561">#</a> <a></a>re: 几种js实现的动态多文件上传 2007-01-29 18:00 <a href="http://www.blogjava.net/bnlovebn/">重归本垒（BNBN）</a></h6> <p>@施伟 <br>呵呵！施伟，你这样做，如果实现了，那么比我的方法更胜一筹了，我以前也这样考虑过，只是觉的好麻烦，而没有去实现它！ <br>另外，还非常谢谢你能关注我的Ｂolg! <br><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#post">回复</a> <a href="http://www.blogjava.net/comment?author=%e9%87%8d%e5%bd%92%e6%9c%ac%e5%9e%92%ef%bc%88BNBN%ef%bc%89">更多评论</a> <a href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl01$DeleteLink','')"></a><a></a> <h6><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#99484">#</a> <a></a>re: 几种js实现的动态多文件上传 2007-02-12 17:12 <a>路过的</a></h6> <p>施伟 的做法，是不是还是不能解决，先选择了一个文件，提交服务器之后这个file input域的值又被自动清空的问题？&nbsp;&nbsp;<a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#post">回复</a> <a href="http://www.blogjava.net/comment?author=%e8%b7%af%e8%bf%87%e7%9a%84">更多评论</a> <a href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl02$DeleteLink','')"></a><a></a> <h6><a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#121785">#</a> <a></a>re: 几种js实现的动态多文件上传<a></a> 2007-06-04 11:28 <a href="http://www.kankanblog.com/">sangern</a></h6> <p>第二种方法不错&nbsp;&nbsp;<a href="http://www.blogjava.net/bnlovebn/archive/2007/01/26/96194.html#post">回复</a> <a href="http://www.blogjava.net/comment?author=sangern">更多评论</a> <a href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl03$DeleteLink','')"></a><a></a> <p></a></p><img src ="http://www.blogjava.net/jackson110/aggbug/136808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-15 08:38 <a href="http://www.blogjava.net/jackson110/archive/2007/08/15/136808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写JSP网站时写的一些工具函数(收集)</title><link>http://www.blogjava.net/jackson110/archive/2007/08/03/134249.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Fri, 03 Aug 2007 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/03/134249.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/134249.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/03/134249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/134249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/134249.html</trackback:ping><description><![CDATA[<p>[ 2007-7-27 16:28:00 | By: 叶寻飞 ] <p>初学JSP时,写了一些工具函数因为不太会用JAVA下的正则表达式也只能这么写啦! <p>发出来让大家批评批评提点意见!有几个函数不算是自己写的希望爱挑剌的朋友嘴 <p>下留情!我是新手我怕谁,脸皮不行的人水平也上不去呀.嘻嘻.. <p>package mxzc.web.strctrl;<br>public class StringCtrl<br>{/********************************************<br>public synchronized String HTMLcode(String TXTcode)&nbsp;&nbsp; 功能:文本替换<br>public synchronized String Unhtmlcode(String str)&nbsp;&nbsp; 功能:(不完全)反文本 <p>替换<br>public synchronized String Unhtmlcodea(String str)&nbsp;&nbsp; 功能:反文本替换<br>public synchronized boolean emailcheck (String email)&nbsp;&nbsp; 功能:检查一个字 <p>符串是否符合E-Mail<br>public synchronized boolean isemailstr(String email)&nbsp;&nbsp; 功能:检查一个字 <p>符串是否符合E-Mail<br>public synchronized boolean isqqstr(String qq)&nbsp;&nbsp;&nbsp; 功能:检查一个字符串是 <p>否符合QQ<br>public synchronized boolean isnumstr(String num)&nbsp;&nbsp; 功能:检查一个字符串 <p>是否为一数字串<br>public synchronized String userstrlow(String user)&nbsp;&nbsp; 功能:替换用户名中 <p>不合法的部分<br>public synchronized boolean userstrchk(String user)&nbsp;&nbsp; 功能:检查字符串是 <p>否符合用户名法则<br>public synchronized boolean istelstr(String tel)&nbsp;&nbsp; 功能:检查字符串是否 <p>为TEL<br>public synchronized boolean urlcheck(String url)&nbsp;&nbsp; 功能:检查字符串是否 <p>为URL<br>public synchronized String isotogbk(String iso)&nbsp;&nbsp;&nbsp; 功能:ISO9006-1码转换 <p>为GBK<br>public synchronized String gbktoiso(String gbk)&nbsp;&nbsp;&nbsp; 功能:GBK码转换为 <p>ISO9006-1<br>public synchronized String dostrcut(String oldstr,int length)&nbsp; 功能:按 <p>汉字长换行(英文按半个字长)<br>public synchronized String inttodateshow(int datenum)&nbsp;&nbsp; 功能:将1900年至 <p>时间的秒数换为日期字符串<br>public synchronized String nowdateshow()&nbsp;&nbsp;&nbsp; 功能:显示当前日期<br>public synchronized java.util.Date inttodate(int datenum)&nbsp; 功能:将秒数 <p>转换为日期<br>public synchronized int datetoint()&nbsp;&nbsp;&nbsp;&nbsp; 功能:将时间换为从1900年至今的秒 <p>数<br>public synchronized int datetoint(java.util.Date d)&nbsp;&nbsp; 功能:将时间换为从 <p>1900年至时间的秒数<br>public synchronized String overlengthcut(String str,int length)&nbsp; 功能: <p>截取前几个字符,单位为汉字字长<br>public synchronized String replace(String str,String suba,String subb)  <p>功能:字符串替换<br>*********************************************/<br>private static final String isostr="ISO8859-1";<br>private static final String gbkstr="GBK";<br>public StringCtrl()<br>{<br>}<br>public synchronized boolean emailcheck (String email)<br>{<br>if(email==null)return false;<br>if(email.length()&lt;6)return false;<br>if(email.indexOf("@")&lt;2)return false;<br>if(email.indexOf(".")&lt;4)return false;<br>if(email.endsWith(".")||email.endsWith("@"))return false;<br>if(email.lastIndexOf("@")&gt;email.lastIndexOf(".")-1)return false;<br>if(email.lastIndexOf("@")!=email.indexOf("@"))return false;<br>String[] lowstr={"\@#","\"","\n","&amp;","\t","\r","&lt;","&gt;","/","\\","#"};<br>for(int i=0;i&lt;lowstr.length;i++)if(email.indexOf("lowstr")&gt;0)return  <p>false;<br>return true;<br>}<br>public synchronized boolean isemailstr(String email)<br>{<br>if(email==null)return false;<br>if(email.indexOf("@")==-1||email.indexOf(".")==-1||email.length()&lt;6) <p>return false;<br>return true;<br>}<br>public synchronized boolean isqqstr(String qq)<br>{<br>if(qq==null)return false;<br>if(qq.length()&gt;12)return false;<br>if(qq.length()&lt;5)return false;<br>for(int i=0;i&lt;qq.length();i++)<br>if(!(((int)qq.charAt(i))&lt;=57&amp;&amp;((int)qq.charAt(i))&gt;=48))return false;<br>return true;<br>}<br>public synchronized boolean isnumstr(String num)<br>{<br>if(num==null)return false;<br>if(num.length()&lt;1)return false;<br>for(int i=0;i&lt;num.length();i++)<br>if(!(((int)num.charAt(i))&lt;=57&amp;&amp;((int)num.charAt(i))&gt;=48))return false;<br>return true;<br>}<br>public synchronized String userstrlow(String user)<br>{<br>String newuserstr=user.trim();<br>char[] lowstr= <p><a href="mailto:{@#\@#@#,@#\&quot;@#,@#\n@#,@#&amp;@#,@#\t@#,@#\r@#,@#&lt;@#,@#&gt;@#,@#/@#,@#\\">{@#\@#@#,@#\"@#,@#\n@#,@#&amp;@#,@#\t@#,@#\r@#,@#&lt;@#,@#&gt;@#,@#/@#,@#\\</a>@#,@## <p>@#};<br>for(int i=0;i&lt;lowstr.length;i++)<br>newuserstr=newuserstr.replace(lowstr[i],@#+@#);<br>return newuserstr;<br>}<br>public synchronized boolean userstrchk(String user)<br>{<br>String newuserstr=user.trim();<br>char[] lowstr= <p><a href="mailto:{@#\@#@#,@#\&quot;@#,@#\n@#,@#&amp;@#,@#\t@#,@#\r@#,@#&lt;@#,@#&gt;@#,@#/@#,@#\\">{@#\@#@#,@#\"@#,@#\n@#,@#&amp;@#,@#\t@#,@#\r@#,@#&lt;@#,@#&gt;@#,@#/@#,@#\\</a>@#,@## <p>@#,@#~@#,@#`@#,@#!@#,@#@@#,@#$@#,@#%@#,@#^@#,@#*@#,@#(@#,@#)@#,@#- <p>@#,@#_@#,@#+@#,@#=@#,@#|@#,@#?@#,@#,@#,@#;@#,@#.@#};<br>for(int i=0;i&lt;lowstr.length;i++)<br>newuserstr=newuserstr.replace(lowstr[i],@#+@#);<br>return (user.equals(newuserstr))?true:false;<br>}<br>public synchronized boolean istelstr(String tel)<br>{<br>if(tel==null)return false;<br>if(tel.length()&lt;1)return false;<br>if(tel.length()&gt;32)return false;<br>for(int i=0;i&lt;tel.length();i++)<br>if(!(((int)tel.charAt(i))&lt;=57&amp;&amp;((int)tel.charAt(i))&gt;=48))if(tel.charAt <p>(i)!=@#-@#)return false;<br>return true;<br>}<br>public synchronized boolean urlcheck(String url)<br>{<br>if(url==null)return false;<br>if(url.length()&lt;10)return false;<br>String urls=url.toLowerCase();<br>if(!urls.startsWith("<a href="http://&quot;))return/">http://"))return</a> false;<br>if(url.indexOf("&lt;")&gt;0||url.indexOf("&gt;")&gt;0)return false;<br>return true;<br>}<br>public synchronized String isotogbk(String iso)throws Exception<br>{<br>&nbsp;if(iso!=null)return (new String(iso.getBytes(isostr),gbkstr));<br>&nbsp;if(iso.length()&lt;1)return "";<br>&nbsp;return null;<br>}<br>public synchronized String gbktoiso(String gbk)throws Exception<br>{<br>&nbsp;if(gbk!=null)return (new String(gbk.getBytes(gbkstr),isostr));<br>&nbsp;if(gbk.length()&lt;1)return "";<br>&nbsp;return null;<br>}<br>public synchronized String HTMLcode(String TXTcode)<br>{<br>&nbsp;String newstr="";<br>&nbsp;if(TXTcode==null)return "";<br>&nbsp;newstr=TXTcode;<br>&nbsp;newstr=replace(newstr,"&amp;","&amp;amp;");<br>&nbsp;newstr=replace(newstr,"\"","&amp;quot;");<br>&nbsp;newstr=replace(newstr," ","&amp;nbsp;");<br>&nbsp;newstr=replace(newstr,"&lt;","&amp;lt;");<br>&nbsp;newstr=replace(newstr,"&gt;","&amp;gt;");<br>&nbsp;newstr=replace(newstr,"\@#","&amp;#00039;");<br>&nbsp;return newstr;<br>}<br>public synchronized String Unhtmlcode(String str)<br>{<br>&nbsp;String newstr="";<br>&nbsp;if(str==null)return "";<br>&nbsp;if(str.length()&lt;1)return "";<br>&nbsp;newstr=str;<br>&nbsp;newstr=replace(newstr,"&amp;amp;","&amp;");<br>&nbsp;//newstr=replace(newstr,"&amp;quot;","\"");<br>&nbsp;newstr=replace(newstr,"&amp;nbsp;"," ");<br>&nbsp;newstr=replace(newstr,"&amp;quot;","\"");<br>&nbsp;//newstr=replace(newstr,"&amp;lt;","&lt;");<br>&nbsp;//newstr=replace(newstr,"&amp;gt;","&gt;");<br>&nbsp;newstr=replace(newstr,"&amp;#00039;","\@#");<br>&nbsp;return newstr;<br>}<br>public synchronized String Unhtmlcodea(String str)<br>{<br>&nbsp;String newstr="";<br>&nbsp;if(str==null)return "";<br>&nbsp;if(str.length()&lt;1)return "";<br>&nbsp;newstr=str;<br>&nbsp;newstr=replace(newstr,"&amp;amp;","&amp;");<br>&nbsp;newstr=replace(newstr,"&amp;quot;","\"");<br>&nbsp;newstr=replace(newstr,"&amp;nbsp;"," ");<br>&nbsp;newstr=replace(newstr,"&amp;lt;","&lt;");<br>&nbsp;newstr=replace(newstr,"&amp;gt;","&gt;");<br>&nbsp;newstr=replace(newstr,"&amp;#00039;","\@#");<br>&nbsp;return newstr;<br>}<br>public synchronized String dostrcut(String oldstr,int length)<br>{<br>&nbsp;int i=0;<br>&nbsp;int j=0;<br>&nbsp;int k=0;<br>&nbsp;String newstr="";<br>&nbsp;if(oldstr==null)return "";<br>&nbsp;if(length&lt;=0)return "";<br>&nbsp;for(i=0;i&lt;oldstr.length();i++)<br>&nbsp;{<br>&nbsp; if(oldstr.charAt(i)==@#\n@#)j=0;<br>&nbsp; else if(((int)(oldstr.charAt(i)))&gt;255)j+=2;<br>&nbsp; else j++;<br>&nbsp; if((j/2)&gt;=length)<br>&nbsp; {<br>&nbsp;&nbsp; newstr=newstr.concat(oldstr.substring(k,i)+"\n");<br>&nbsp;&nbsp; k=i;<br>&nbsp;&nbsp; j=0;<br>&nbsp; }<br>&nbsp;}<br>&nbsp;newstr=newstr.concat(oldstr.substring(k)+"\n");<br>&nbsp;return newstr;<br>}<br>public synchronized String inttodateshow(int datenum)<br>{<br>&nbsp;int year=0;<br>&nbsp;int month=0;<br>&nbsp;int day=0;<br>&nbsp;int hour=0;<br>&nbsp;int minute=0;<br>&nbsp;int second=0;<br>&nbsp;String datestr="";<br>&nbsp;java.util.Date d;<br>&nbsp;d=new java.util.Date((long)(datenum)*1000);<br>&nbsp;java.util.Calendar ds=java.util.Calendar.getInstance();<br>&nbsp;ds.setTime(d);<br>&nbsp;year=ds.get(java.util.Calendar.YEAR);<br>&nbsp;month=ds.get(java.util.Calendar.MONTH);<br>&nbsp;day=ds.get(java.util.Calendar.DATE);<br>&nbsp;hour=ds.get(java.util.Calendar.HOUR_OF_DAY);<br>&nbsp;minute=ds.get(java.util.Calendar.MINUTE);<br>&nbsp;second=ds.get(java.util.Calendar.SECOND);<br>&nbsp;datestr=Integer.toString(year)+"/"+Integer.toString(1+month) <p>+"/"+Integer.toString(day);<br>&nbsp;return datestr;<br>}<br>public synchronized String nowdateshow()<br>{<br>&nbsp;int year=0;<br>&nbsp;int month=0;<br>&nbsp;int day=0;<br>&nbsp;int hour=0;<br>&nbsp;int minute=0;<br>&nbsp;int second=0;<br>&nbsp;String datestr="";<br>&nbsp;java.util.Calendar ds=java.util.Calendar.getInstance();<br>&nbsp;year=ds.get(java.util.Calendar.YEAR);<br>&nbsp;month=ds.get(java.util.Calendar.MONTH);<br>&nbsp;day=ds.get(java.util.Calendar.DATE);<br>&nbsp;hour=ds.get(java.util.Calendar.HOUR_OF_DAY);<br>&nbsp;minute=ds.get(java.util.Calendar.MINUTE);<br>&nbsp;second=ds.get(java.util.Calendar.SECOND);<br>&nbsp;datestr=Integer.toString(year)+"/"+Integer.toString(1+month) <p>+"/"+Integer.toString(day);<br>&nbsp;return datestr;<br>}<br>public synchronized java.util.Date inttodate(int datenum)<br>{<br>&nbsp;int year=0;<br>&nbsp;int month=0;<br>&nbsp;int day=0;<br>&nbsp;String datestr="";<br>&nbsp;java.util.Date d;<br>&nbsp;d=new java.util.Date((long)(datenum)*1000);<br>&nbsp;return d;<br>}<br>public synchronized int datetoint()<br>{<br>&nbsp;java.util.Date d=null;<br>&nbsp;long ds=0;<br>&nbsp;d=new java.util.Date();<br>&nbsp;ds=d.getTime();<br>&nbsp;return (int)(ds/1000);<br>}<br>public synchronized int datetoint(java.util.Date d)<br>{<br>&nbsp;long ds=0;<br>&nbsp;ds=d.getTime();<br>&nbsp;return (int)(ds/1000);<br>}<br>public synchronized String overlengthcut(String str,int length)<br>{<br>&nbsp;int i=0;<br>&nbsp;int j=0;<br>&nbsp;if(str==null)return "";<br>&nbsp;if(length&lt;0)return "";<br>&nbsp;if(str.length()&lt;=length)return str;<br>&nbsp;for(i=0;i&lt;str.length();i++)<br>&nbsp;{<br>&nbsp; if(((int)(str.charAt(i)))&gt;255)j+=2;<br>&nbsp; else j++;<br>&nbsp; if((j/2)&gt;=length)<br>&nbsp; {<br>&nbsp;&nbsp; return str.substring(0,i);<br>&nbsp; }<br>&nbsp;}<br>&nbsp;return str;<br>}<br>public synchronized String replace(String str,String suba,String subb)<br>{<br>String newstr="";<br>int start=0;<br>int offset=0;<br>int subalength=0;<br>int strlength=0;<br>if(str==null||suba==null||subb==null)return str;<br>if(suba.equals(subb))return str;<br>if(str.length()&lt;suba.length()||str.length()&lt;subb.length())return str;<br>if(str.length()&gt;0&amp;&amp;suba.length()&gt;0&amp;&amp;subb.length()&gt;0)<br>{<br>&nbsp;subalength=suba.length();<br>&nbsp;strlength=str.length();<br>&nbsp;while(true)<br>&nbsp;{<br>&nbsp; if(str.indexOf(suba)&lt;0)break;<br>&nbsp; if(offset&gt;strlength)break;<br>&nbsp; start=str.indexOf(suba,offset);<br>&nbsp; if(start&lt;offset)break;<br>&nbsp; newstr=newstr.concat(str.substring(offset,start));<br>&nbsp; newstr=newstr.concat(subb);<br>&nbsp; offset=start+subalength;<br>&nbsp;}<br>&nbsp;newstr=newstr.concat(str.substring(offset));<br>&nbsp;return newstr;<br>}<br>else<br>{<br>&nbsp;return str;<br>}<br>}<br>}</p><img src ="http://www.blogjava.net/jackson110/aggbug/134249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-03 15:07 <a href="http://www.blogjava.net/jackson110/archive/2007/08/03/134249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中如何正确使用字体编码</title><link>http://www.blogjava.net/jackson110/archive/2007/08/01/133711.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 01 Aug 2007 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/08/01/133711.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/133711.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/08/01/133711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/133711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/133711.html</trackback:ping><description><![CDATA[<p>在Java编程中，中文字体编码难倒了不少程序员，如果抓住了影响Java中文显示的几个关键因素，问题将迎刃而解。  <p>Java是目前最流行的面向对象的编程语言之一，Java支持UTF-8、ISO-8  <p>859-1、GBK等各种字体编码，可笔者发现Java中字体编码的问题仍难倒了不少程序员，网上虽然也有不少关于在Java中如何正确显示中文的文章，但都不够全面，笔者特意总结如下。  <p>影响Java中字体编码正确显示的有几个因素: 1)<a href="http://wiki.ccw.com.cn/%E6%95%B0%E6%8D%AE%E5%BA%93"><b><a href="http://wiki.ccw.com.cn/%E6%95%B0%E6%8D%AE%E5%BA%93"><b>数据库</b></a></b></a>的连接方式; 2)网页中使用的字体编码; 3)数据库里存放数据的字体编码; 4)Java的缺省字体编码。如果在编程中遇到不能正确显示中文时，要先弄清楚以上几项所使用的字体编码，再分析找出原因，即可解决问题。  <p>众所周知，JSP是Java的一种，和网页有关，而网页也有自己的中文编码系统，所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2，数据库连接驱动是用org.gjt.mm.mysql.Driver，这里主要讨论UTF-8和GBK的显示( GB2312是GBK的一个子集，Java中可以使用GBK来代替GB系列)。我们先来研究JSP中字体编码问题， 下面第一到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别，咱们分别说明，前三点是从读取数据库到显示在网页，后三点是从网页输入数据到存入数据库)，第七到第九点针对纯Java的类文件。 以下rs表示ResultSet的一个实例，是执行Select语句之后产生的数据集。  <p>一、数据库连接方式使用UTF-8  <p>在连接数据库的驱动后面加上这句参数useUnicode=true&amp;characterEncoding=  <p>UTF-8，例如jdbc:mysql://lo<a href="http://topic.ccw.com.cn/corpCenter/249.html"><b>ca</b></a>lhost/DBVF?autoReconnect=true&amp;useUnicode=  <p>true&amp;characterEncoding=UTF-8，从数据库里读出中文显示在使用GBK的JSP的网页里，如果数据库里存放的字体编码是UTF-8，在JSP中使用 str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1)，可以正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")来显示正确的中文。值得注意的是如果页面使用UTF-8，数据库里存放的是UTF-8，也可以用str=new String(rs.getBytes(1),"GBK")正确显示中文。如果网页是UTF-8，而数据库里存放的是GBK，无法直接显示中文，需要2步转换, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK")，才可以正确显示中文。  <p>二、数据库连接方式使用GBK  <p>在连接数据库的驱动后面加上这句参数useUnicode=true&amp;characterEncoding=  <p>GBK,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&amp;UseUnicode=true&amp;  <p>characterEncoding=GBK，从数据库里读出中文，显示在使用GBK的JSP的网页里，如果数据库里存放的字体编码是UTF-8，在JSP中一定要使用 str=new String(rs.getBytes(1),"UTF-8")，才正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK") 或者直接使用str=rs.getString(1)，即可显示正确的中文。 如果网页是UTF-8，而数据库里存放的是GBK，只能用str=new String(rs.getString(1).getBytes("UTF-8"),"GBK")的方法来显示中文; 如果网页是UTF-8，而数据库里存放的是UTF-8，可用str=new String(rs.getBytes(1),"GBK") 或者rs.getString(1)方法来显示中文。  <p>三、使用缺省数据库连接方式  <p>连接数据库的驱动后面没有这句参数useUnicode=&amp;characterEncoding=，例如jdbc:mysql://localhost/DBVF?autoReconnect=true，没有参数useUnicode=true&amp;characterEncoding，表示使用默认的ISO-8895-1编码。  <p>1. 从数据库里读出中文，显示在GBK的网页里。如果数据库里存放的字体编码是UTF-8，在JSP网页中一定要使用语句 str=new String(rs.getBytes(1),"UTF-8") 或者str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8")，才可正确显示中文。如果数据库里存放的是GBK数据，那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")或str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK") 显示正确的中文。  <p>2. 如果网页是UTF-8,不能直接正确显示GBK，需要2步转换，str=new String(rs.getBytes(1),"GBK")，再str=new String(str.getBytes("UTF-8"),"GBK") 才可以正确显示中文。如果数据库里存的是UTF-8，直接用str=new String(rs.getBytes(1),"GBK")或者str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")就可以显示中文了。  <p>以上是读取数据库里中文正确显示在网页上，下面三点是如何正确存入数据库。  <p>四、数据库连接方式使用UTF-8编码  <p>JSP中要把网页输入的中文存入数据库，通常有一个提交(Submit)的过程，是用str=request.getParameter("username")，然后执行update或者insert语句来存入数据库。如何赋值给str很重要，而且这里中文输入与网页所使用的字体编码有关。  <p>1、 网页使用UTF-8，使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")或者str= new String(request.getParameter("username").getBytes(),"UTF-8")，都可以使得存到数据库里的数据是UTF-8编码。  <p>2. 网页使用GBK，使用str= new String(request.getParameter("username").getBytes(),"GBK")，那么存入数据库的是UTF-8编码。  <p>3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK。  <p>五、数据库连接方式使用GBK编码  <p>1. 输入使用GBK网页，存到数据库里是GBK的方法: str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"GBK")。  <p>2. 网页使用GBK，想存入UTF-8到数据库里，要分2步: 先str=new String(request.getParameter("username").getBytes(),"GBK")，再str=new String(str.getBytes("UTF-8"),"GBK")即可。  <p>3. 网页使用UTF-8，而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"UTF-8")，那么存到数据库里的数据是UTF-8编码。  <p>4. 网页使用UTF-8，而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")，那么存到数据库里的数据是GBK编码。  <p>六、数据库连接方式使用缺省，即不使用参数useUnicode和characterEncoding  <p>1. 网页使用GBK，如果使用str= request.getParameter("username")或者str= new String(request.getParameter("username").getBytes())，那么在数据库里的数据是GBK码。网页使用UTF-8 和使用str= request.getParameter("username")，则存入数据库是UTF-8编码。  <p>2. 如果使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"))，那么根据网页提供的字体编码而存到数据库里，比如是UTF-8的网页，那么存到数据库中就是UTF-8编码，如果使用GBK网页，那么存到数据库里的字就是GBK编码。  <p>3. 如果使用str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8")这一种组合能存到正确的数据外，其他存到数据库里的数据则都是乱码或者错误码。在这个UTF-8组合的特例中，网页使用的是GBK，则存放到数据库里就是GBK，网页使用UTF-8，那么存到数据库里的就是UTF-8。  <p>4. 网页是GBK的要存得UTF-8，一定需要2步: company=new String(request.getParameter("company").getBytes(),"GBK")和company=new String(company.getBytes("UTF-8"))。  <p>5. 网页是UTF-8的，不能存得GBK在数据库里，一句话，改变数据库连接方式不能存得GBK码。  <p>以上所有的都是基于JSP网页和数据库交换数据，下面讨论一下纯JAVA编程下的字体编码转换。  <p>七、数据库连接方式使用UTF-8编码  <p>1. 数据库里的中文是UTF-8，可以转换为GBK,但不能把GBK存入数据库。  <p>2. 数据库是GBK，如果转换为UTF-8，使用content=new String(rs.getBytes(2),"GBK")直接将content存入数据库就可为UTF-8。  <p>八、数据库连接方式使用GBK编码  <p>1. 数据库里的中文是UTF-8，如果转换为GBK，使用content= new String(rs.getString(2).getBytes(),"UTF-8"),再直接使用update或者insert语句插入到数据库，即存得GBK。如果使用content= new String(rs.getString(2).getBytes(),"GBK")或者content= new String(rs.getString(2).getBytes())，再存入数据库即存得还是UTF-8编码。  <p>2. 数据库里的中文是GBK，如果转换为UTF-8，使用content= new String(rs.getString(2).getBytes("UTF-8"))或者content= new String(rs.getString(2).getBytes("UTF-8"),"GBK")，再直接使用update或者insert语句插入到数据库,即存得UTF-8。  <p>3. 如果某个String是GBK，要转换为UTF-8，也是使用content= new String(GBKstr.getBytes("UTF-8"))或者content= new String(GBKstr.getBytes("UTF-8"),"GBK"); 如果某个String是UTF-8，要转换为GBK，应该使用new String(UTFstr.getBytes("GBK"),"UTF-8")。  <p>九、数据库连接方式使用缺省,即不跟参数  <p>1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1")，可以将数据库里的GBK编码转换为UTF-8。  <p>2. 读取UTF-8然后存入UTF-8，则用str1=new String(UTFstr.getBytes(),"ISO-8859-1")或者str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1")。  <p>3. 不能实现数据库里的UTF-8转换为GBK。  <p>如果采用UTF-8的数据库连接方式或者缺省数据连接方式，那么无法将UTF-8转为GBK；而GBK的数据库连接方式可以实现UTF-8和GBK的相互转换。建议大家采用GBK的数据连接方式。</p><img src ="http://www.blogjava.net/jackson110/aggbug/133711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-08-01 09:01 <a href="http://www.blogjava.net/jackson110/archive/2007/08/01/133711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web恶意内容入侵分析及应对措施之三 该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15407.html</title><link>http://www.blogjava.net/jackson110/archive/2007/07/18/131138.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 18 Jul 2007 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/07/18/131138.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/131138.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/07/18/131138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/131138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/131138.html</trackback:ping><description><![CDATA[<p>第三步：对动态输出内容编码<br>每一个ISO-8859-1字符集中的字符都可以编码为一个数值，完整的对应关系请见下面的几个表：  <p>数 值<br>&nbsp;编码表示法<br>&nbsp;含 义<br>&nbsp;表现形式<br>&amp;#00;-<br>&nbsp;-<br>&nbsp;Unused<br>&nbsp;- <p>&nbsp;-<br>&nbsp;HorizontalTab<br>&nbsp;space <p>&nbsp;-<br>&nbsp;Linefeed<br>&nbsp;space<br>-<br>&nbsp;-<br>&nbsp;Unused<br>&nbsp;- <p>&nbsp;-<br>&nbsp;Space<br>&nbsp;space<br>!<br>&nbsp;-<br>&nbsp;Exclamationmark<br>&nbsp;!<br>"<br>&nbsp;"<br>&nbsp;Quotationmark<br>&nbsp;"<br>#<br>&nbsp;-<br>&nbsp;Numbersign<br>&nbsp;#<br>$<br>&nbsp;-<br>&nbsp;Dollarsign<br>&nbsp;$<br>%<br>&nbsp;-<br>&nbsp;Percentsign<br>&nbsp;%<br>&amp;<br>&nbsp;&amp;<br>&nbsp;Ampersand<br>&nbsp;&amp;<br>'<br>&nbsp;-<br>&nbsp;Apostrophe<br>&nbsp;'<br>(<br>&nbsp;-<br>&nbsp;Leftparenthesis<br>&nbsp;(<br>)<br>&nbsp;-<br>&nbsp;Rightparenthesis<br>&nbsp;)<br>*<br>&nbsp;-<br>&nbsp;Asterisk<br>&nbsp;*<br>+<br>&nbsp;-<br>&nbsp;Plussign<br>&nbsp;+<br>,<br>&nbsp;-<br>&nbsp;Comma<br>&nbsp;,<br>-<br>&nbsp;-<br>&nbsp;Hyphen<br>&nbsp;-<br>.<br>&nbsp;-<br>&nbsp;Period(fullstop)<br>&nbsp;.<br>/<br>&nbsp;-<br>&nbsp;Solidus(slash)<br>&nbsp;/<br>0-9<br>&nbsp;-<br>&nbsp;Digits(0-9)<br>&nbsp;0-9<br>:<br>&nbsp;-<br>&nbsp;Colon<br>&nbsp;:<br>;<br>&nbsp;-<br>&nbsp;Semi-colon<br>&nbsp;;<br>&lt;<br>&nbsp;&lt;<br>&nbsp;Lessthan<br>&nbsp;&lt;<br>=<br>&nbsp;-<br>&nbsp;Equalssign<br>&nbsp;=<br>&gt;<br>&nbsp;&gt;<br>&nbsp;Greaterthan<br>&nbsp;&gt;<br>?<br>&nbsp;-<br>&nbsp;Questionmark<br>&nbsp;?<br>@<br>&nbsp;-<br>&nbsp;Commercialat<br>&nbsp;@<br>A-Z<br>&nbsp;-<br>&nbsp;UppercaseA-Z<br>&nbsp;A-Z<br>[<br>&nbsp;-<br>&nbsp;Leftsquarebracket<br>&nbsp;[<br>\<br>&nbsp;-<br>&nbsp;Reversesolidus(backslash)<br>&nbsp;\<br>]<br>&nbsp;-<br>&nbsp;Rightsquarebracket<br>&nbsp;]<br>^<br>&nbsp;-<br>&nbsp;Caret<br>&nbsp;^<br>_<br>&nbsp;-<br>&nbsp;Horizontalbar<br>&nbsp;_<br>`<br>&nbsp;-<br>&nbsp;Acuteaccent<br>&nbsp;`<br>a-z<br>&nbsp;-<br>&nbsp;Lowercasea-z<br>&nbsp;a-z<br>{<br>&nbsp;-<br>&nbsp;Leftcurlybrace<br>&nbsp;{<br>|<br>&nbsp;-<br>&nbsp;Verticalbar<br>&nbsp;|<br>}<br>&nbsp;-<br>&nbsp;Rightcurlybrace<br>&nbsp;}<br>~<br>&nbsp;-<br>&nbsp;Tilde<br>&nbsp;~<br>-Ÿ<br>&nbsp;-<br>&nbsp;Unused<br>&nbsp;- <p>&nbsp;Non-breakingspace<br>¡<br>&nbsp;¡<br>&nbsp;Invertedexclamation<br>&nbsp;¡<br>¢<br>&nbsp;¢<br>&nbsp;Centsign<br>&nbsp;¢<br>£<br>&nbsp;£<br>&nbsp;Poundsterlingsign<br>&nbsp;£<br>¤<br>&nbsp;¤<br>&nbsp;Generalcurrencysign<br>&nbsp;¤<br>¥<br>&nbsp;¥<br>&nbsp;Yensign<br>&nbsp;¥<br>&amp;brVBar;<br>&nbsp;¦<br>&nbsp;Brokenverticalbar<br>&nbsp;¦<br>§<br>&nbsp;§<br>&nbsp;Sectionsign<br>&nbsp;§<br>¨<br>&nbsp;¨<br>&nbsp;UMLaut(dierisis)<br>&nbsp;¨<br>©<br>&nbsp;©<br>&nbsp;Copyright<br>&nbsp;©<br>ª<br>&nbsp;ª<br>&nbsp;Feminineordinal<br>&nbsp;ª<br>«<br>&nbsp;«<br>&nbsp;Leftanglequote,guillemotleft<br>&nbsp;«<br>¬<br>&nbsp;¬<br>&nbsp;Notsign<br>&nbsp;¬<br>&shy;<br>&nbsp;&shy;<br>&nbsp;Softhyphen<br>&nbsp;&shy;<br>®<br>&nbsp;®<br>&nbsp;ReGISteredtrademark<br>&nbsp;®<br>¯<br>&nbsp;¯<br>&nbsp;Macronaccent<br>&nbsp;¯<br>°<br>&nbsp;°<br>&nbsp;Degreesign<br>&nbsp;°<br>±<br>&nbsp;±<br>&nbsp;Plusorminus<br>&nbsp;±  <p>²<br>&nbsp;²<br>&nbsp;Superscripttwo<br>&nbsp;²<br>³<br>&nbsp;³<br>&nbsp;Superscriptthree<br>&nbsp;³<br>´<br>&nbsp;´<br>&nbsp;Acuteaccent<br>&nbsp;´<br>µ<br>&nbsp;µ<br>&nbsp;Microsign<br>&nbsp;µ<br>¶<br>&nbsp;¶<br>&nbsp;Paragraphsign<br>&nbsp;¶<br>·<br>&nbsp;·<br>&nbsp;Middledot<br>&nbsp;·<br>¸<br>&nbsp;¸<br>&nbsp;Cedilla<br>&nbsp;¸<br>¹<br>&nbsp;¹<br>&nbsp;Superscriptone<br>&nbsp;¹<br>º<br>&nbsp;º<br>&nbsp;Masculineordinal<br>&nbsp;º<br>»<br>&nbsp;»<br>&nbsp;Rightanglequote,guillemotright<br>&nbsp;»<br>¼<br>&nbsp;¼<br>&nbsp;Fraction(onequarter)<br>&nbsp;¼<br>½<br>&nbsp;½<br>&nbsp;Fraction(onehalf)<br>&nbsp;½<br>¾<br>&nbsp;¾<br>&nbsp;Fraction(threequarters)<br>&nbsp;¾<br>¿<br>&nbsp;¿<br>&nbsp;Invertedquestionmark<br>&nbsp;¿<br>À<br>&nbsp;À<br>&nbsp;CapitalA,graveaccent<br>&nbsp;À<br>Á<br>&nbsp;Á<br>&nbsp;CapitalA,acuteaccent<br>&nbsp;Á<br>Â<br>&nbsp;Â<br>&nbsp;CapitalA,circumflexaccent<br>&nbsp;Â<br>Ã<br>&nbsp;Ã<br>&nbsp;CapitalA,tilde<br>&nbsp;Ã<br>Ä<br>&nbsp;Ä<br>&nbsp;CapitalA,umlaut(dierisis)<br>&nbsp;Ä<br>Å<br>&nbsp;Å<br>&nbsp;CapitalA,ring<br>&nbsp;Å<br>Æ<br>&nbsp;Æ<br>&nbsp;CapitalAEdipthong(ligature)<br>&nbsp;Æ<br>Ç<br>&nbsp;Ç<br>&nbsp;CapitalC,cedilla<br>&nbsp;Ç<br>È<br>&nbsp;È<br>&nbsp;CapitalE,graveaccent<br>&nbsp;È<br>É<br>&nbsp;É<br>&nbsp;CapitaE,acuteaccent<br>&nbsp;É<br>Ê<br>&nbsp;Ê<br>&nbsp;CapitalE,circumflexaccent<br>&nbsp;Ê<br>&amp;EUML;<br>&nbsp;Ë<br>&nbsp;CapitalE,umlaut(dierisis)<br>&nbsp;Ë<br>Ì<br>&nbsp;Ì<br>&nbsp;CapitalI,graveaccent<br>&nbsp;Ì<br>Í<br>&nbsp;Í<br>&nbsp;CapitalI,acuteaccent<br>&nbsp;Í<br>Î<br>&nbsp;Î<br>&nbsp;CapitalI,circumflexaccent<br>&nbsp;Î<br>Ï<br>&nbsp;Ï<br>&nbsp;CapitalI,umlaut(dierisis)<br>&nbsp;Ï<br>Ð<br>&nbsp;Ð<br>&nbsp;CapitalEth,Icelandic<br>&nbsp;Ð<br>Ñ<br>&nbsp;Ñ<br>&nbsp;CapitalN,tilde<br>&nbsp;Ñ<br>Ò<br>&nbsp;Ò<br>&nbsp;CapitalO,graveaccent<br>&nbsp;Ò<br>Ó<br>&nbsp;Ó<br>&nbsp;CapitalO,acuteaccent<br>&nbsp;Ó<br>Ô<br>&nbsp;Ô<br>&nbsp;CapitalO,circumflexaccent<br>&nbsp;Ô<br>Õ<br>&nbsp;Õ<br>&nbsp;CapitalO,tilde<br>&nbsp;Õ<br>Ö<br>&nbsp;Ö<br>&nbsp;CapitalO,umlaut(dierisis)<br>&nbsp;Ö<br>×<br>&nbsp;×<br>&nbsp;Multiplysign<br>&nbsp;×<br>Ø<br>&nbsp;Ø<br>&nbsp;CapitalO,slash<br>&nbsp;Ø<br>Ù<br>&nbsp;Ù<br>&nbsp;CapitalU,graveaccent<br>&nbsp;Ù<br>Ú<br>&nbsp;Ú<br>&nbsp;CapitalU,acuteaccent<br>&nbsp;Ú<br>Û<br>&nbsp;Û<br>&nbsp;CapitalU,circumflexaccent<br>&nbsp;Û<br>Ü<br>&nbsp;Ü<br>&nbsp;CapitalU,umlaut(dierisis)<br>&nbsp;Ü<br>Ý<br>&nbsp;Ý<br>&nbsp;CapitalY,acuteaccent<br>&nbsp;Ý<br>Þ<br>&nbsp;Þ<br>&nbsp;CapitalThorn,Icelandic<br>&nbsp;Þ<br>ß<br>&nbsp;ß<br>&nbsp;Smallsharps,German(szligature)<br>&nbsp;ß<br>à<br>&nbsp;à<br>&nbsp;Smalla,graveaccent<br>&nbsp;à<br>á<br>&nbsp;á<br>&nbsp;Smalla,acuteaccent<br>&nbsp;á<br>â<br>&nbsp;â<br>&nbsp;Smalla,circumflexaccent<br>&nbsp;â<br>ã<br>&nbsp;ã<br>&nbsp;Smalla,tilde<br>&nbsp;ã<br>&amp;aUML;<br>&nbsp;ä<br>&nbsp;Smalla,umlaut(dierisis)<br>&nbsp;ä<br>å<br>&nbsp;å<br>&nbsp;Smalla,ring<br>&nbsp;å<br>æ<br>&nbsp;æ<br>&nbsp;Smallaedipthong(ligature)<br>&nbsp;æ<br>ç<br>&nbsp;ç<br>&nbsp;Smallc,cedilla<br>&nbsp;ç<br>è<br>&nbsp;è<br>&nbsp;Smalle,graveaccent<br>&nbsp;è<br>é<br>&nbsp;é<br>&nbsp;Smalle,acuteaccent<br>&nbsp;é<br>ê<br>&nbsp;ê<br>&nbsp;Smalle,circumflexaccent<br>&nbsp;ê<br>ë<br>&nbsp;ë<br>&nbsp;Smalle,umlaut(dierisis)<br>&nbsp;ë<br>ì<br>&nbsp;ì<br>&nbsp;Smalli,graveaccent<br>&nbsp;ì<br>í<br>&nbsp;í<br>&nbsp;Smalli,acuteaccent<br>&nbsp;í<br>î<br>&nbsp;î<br>&nbsp;Smalli,circumflexaccent<br>&nbsp;î<br>ï<br>&nbsp;ï<br>&nbsp;Smalli,umlaut(dierisis)<br>&nbsp;ï<br>ð<br>&nbsp;ð<br>&nbsp;Smalleth,Icelandic<br>&nbsp;ð<br>ñ<br>&nbsp;ñ<br>&nbsp;Smalln,tilde<br>&nbsp;ñ<br>ò<br>&nbsp;ò<br>&nbsp;Smallo,graveaccent<br>&nbsp;òò<br>ó<br>&nbsp;ó<br>&nbsp;Smallo,acuteaccent<br>&nbsp;ó<br>ô<br>&nbsp;ô<br>&nbsp;Smallo,circumflexaccent<br>&nbsp;ô<br>õ<br>&nbsp;õ<br>&nbsp;Smallo,tilde<br>&nbsp;õ<br>ö<br>&nbsp;ö<br>&nbsp;Smallo,umlaut(dierisis)<br>&nbsp;ö<br>÷<br>&nbsp;÷<br>&nbsp;Divisionsign<br>&nbsp;÷<br>ø<br>&nbsp;ø<br>&nbsp;Smallo,slash<br>&nbsp;ø<br>ù<br>&nbsp;ù<br>&nbsp;Smallu,graveaccent<br>&nbsp;ù<br>ú<br>&nbsp;ú<br>&nbsp;Smallu,acuteaccent<br>&nbsp;ú<br>û<br>&nbsp;û<br>&nbsp;Smallu,circumflexaccent<br>&nbsp;û<br>ü<br>&nbsp;ü<br>&nbsp;Smallu,umlaut(dierisis)<br>&nbsp;ü<br>ý<br>&nbsp;ý<br>&nbsp;Smally,acuteaccent<br>&nbsp;ý<br>þ<br>&nbsp;þ<br>&nbsp;Smallthorn,Icelandic<br>&nbsp;þ<br>ÿ<br>&nbsp;ÿ<br>&nbsp;Smally,umlaut(dierisis)<br>&nbsp;ÿ <p>根据上表，我们来看2个应用实例：  <p>© 2000 Some Co., Inc.：用©表示版权标识信息。  <p>© 2000 Some Co., Inc.：用©同样标识版权标识信息。  <p>　　对不被信任的数据进行编码要优于过滤不被信任的数据。在客户端浏览器需要显示一些特殊字符的情况下，这种处理方式会恢复特殊字符的庐山真面目。当然，对所有不被信任的数据进行编码，是个相当耗费资源的工作。根据需要，Web开发者可以在编码和过滤2种方法中进行权衡，选择一种或者混合使用。  <p>该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15407.html</p><img src ="http://www.blogjava.net/jackson110/aggbug/131138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-07-18 18:50 <a href="http://www.blogjava.net/jackson110/archive/2007/07/18/131138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web恶意内容入侵分析及应对措施之二</title><link>http://www.blogjava.net/jackson110/archive/2007/07/18/131137.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 18 Jul 2007 10:49:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/07/18/131137.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/131137.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/07/18/131137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/131137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/131137.html</trackback:ping><description><![CDATA[<p>第二步：鉴别特殊的字符<br>　　什么是特殊字符？HTML定义如下：特殊字符就是那些能够影响页面显示效果的字符。依据上下文的不同，特殊字符也会有所不同。下面我们来分类看看：  <p>● 在块级别元素所包含的内容中应考虑的特殊字符有：  <p>&lt;：引入一个标记  <p>&amp;：引入一个字符实体  <p>&gt;：结束一个标记  <p>● 在属性值中应考虑的特殊字符有：  <p>"：在以双引号包裹属性值的情况下，"标记了属性值的结尾。  <p>'：在以单引号包裹属性值的情况下，'标记了属性值的结尾。  <p>空白字符：在属性值没有被任何引号包裹的情况下，空白字符标记了属性值的结尾，比如空格、tab。  <p>&amp;：当需要在属性值中引入字符实体时，就需要使用&amp;。  <p>● 搜索引擎系统会在搜索结果页面中包含一个再次运行搜索的链接，这个链接中会包含编码过的搜索查询字符串。这种情况下应考虑的特殊字符有：  <p>空格、tab以及换行符：它们标记了URL的结尾。  <p>&amp;：它标记一个字符实体，或者一个独立的CGI参数。  <p>非ASCII字符：就是ISO-8859-1编码中ASCII码大于128的字符，它们不允许在URL中使用。  <p>%：无论服务器对由escape编码的HTTP参数如何解码，都必须过滤出字符%。  <p>● 在 之间的内容中应考虑的特殊字符有：分号，圆括号，大括号以及换行符。  <p>● 在服务器端脚本中应考虑的特殊字符有：！  <p>● 其他情况下应考虑的特殊字符有：=。但注意，现有的攻击事件还没有利用过这个字符，但作为一个全面考虑，这里还是列出来。  <p>　　另外，我们还要重视一种情况：其他附加字符也可能包含在特殊字符列表中。总之，Web开发者必须对应用程序的输入内容进行检查，以确定哪些字符会影响程序的执行。 <br>该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15408.html</p><img src ="http://www.blogjava.net/jackson110/aggbug/131137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-07-18 18:49 <a href="http://www.blogjava.net/jackson110/archive/2007/07/18/131137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web恶意内容入侵分析及应对措施之一 该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15409.html</title><link>http://www.blogjava.net/jackson110/archive/2007/07/18/131136.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 18 Jul 2007 10:49:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/07/18/131136.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/131136.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/07/18/131136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/131136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/131136.html</trackback:ping><description><![CDATA[<p>在各种Internet攻击行为中，通过Web方式侵入系统造成信息泄漏、数据丢失的事件非常普遍。例如，攻击者在页面表单中输入恶意内容，绕过输入检查，攻击系统。为此，Web开发者应采取有效的措施从信息采集的入口处堵截恶意内容的进入。本文将对这方面的问题进行分析，并提供几种应对方法。  <p>问题分析  <p>　　Web页面包含文本和HTML标记，它们由服务器建立，被客户端解释。HTML标记一般被服务器特殊对待。例如，“＜”一般指示一个HTML标记的开始，“＜P&gt;”可以影响页面的显示格式，＜Script&gt;可以将脚本代码引入浏览器而执行。  <p>　　对于静态页面，服务器可以完全控制它在客户端如何解释。但是对于动态页面，服务器就不可能完全控制它在客户端的解释行为了。这样就产生了问题：如果动态页面中包含了不可信的内容，那么无论是服务器端还是客户端，就不能保证是否会发生安全问题。  <p>　　现在，几乎所有的商用Web服务器就会建立动态页面。最典型的一个例子就是我们经常要使用的搜索引擎，它接受用户的查询内容后，搜索数据库，然后将动态内容写入一个页面模板，最后显示给用户包含搜索结果的页面。这种情况下，检查动态内容是否包含了特殊字符就非常重要，例如“＜”。如果包含了特殊字符，用户端的浏览器就可能将之误解为HTML标记或者引入执行程序，而不是当做文本信息显示出来。危险也就产生于此！如果不对动态页面进行特殊字符的检查，那么攻击者就有可能在交互页面的输入表单中写入些特殊字符串，从而导致输出页面执行非法行为。这种例子很多，比如我们编写一个留言簿，却不对输入内容进行特殊字符的校验，那么攻击者就有可能填写特殊字符，最终导致留言簿页面的非正常工作，例如填写一段恶意代码：死循环JavaScript脚本、重复打开窗口的JavaScript脚本。  <p>应对措施分析  <p>　　通常，不被信任的内容主要来自以下几个方面：URL参数，表单输入元素，Cookies和数据库查询。要减轻这些方面可能导致的攻击，建议采取如下的步骤：  <p>1、为每个由服务器产生的Web页面明确地设置字符集编码  <p>2、鉴别特殊的字符  <p>3、对动态输出内容编码  <p>4、过滤动态输出内容中的特殊字符  <p>5、检查cookies 值  <p>以下详细分析这5个步骤。  <p>第一步：明确地设置字符集编码  <p>字符集编码就是页面的字符编码体系，在浏览器中可以通过“查看/编码”来转换：  <p>　　很多Web页面都省略了字符集编码设置，也就是说在页面源代码头部HTTP一节中没有定义charset参数。早期的HTML版本中，如果没有定义charset参数，字符集编码就默认为ISO-8859-1。但实际上，许多浏览器都有各自的默认字符集编码。因此，HTML版本4规定，如果没有指定charset参数，任何可能的字符集编码都可以使用，这就依赖于用户的浏览器种类了。  <p>　如果Web服务器不能指定使用哪个字符集编码，那么它就不能区分出特殊字符。没有指定字符集编码的Web页面之所以可以在大多数时间中工作良好，这是因为在大多数的字符集编码类别中，同一字符对应一个小于128的字节值。对于大于128的特殊字符，例如“＜”，将采用16位字符编码方案处理。一些浏览器能够识别并执行这种编码方案，但同时，攻击者也可能据此使用恶意脚本，使防范难度加大，因为服务器可能完全不能了解哪个字节代表哪个特殊字符。例如，字符集UTF-7为“＜”和“&gt;”提供了可选编码，几种流行的浏览器一般将它们看做标记的起始和结束字符。为了不造成服务器和客户端的字符编码的不一致，Web服务器应该明确设置字符集，以确认插入的数据是否为特殊字符编码的后续字节。比如，下面的代码强行设置了页面使用ISO-8859-1字符集编码：  <p>＜HTML&gt;<br>＜HEAD&gt;<br>＜META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;<br>＜TITLE&gt;HTML SAMPLE＜/TITLE&gt;<br>＜/HEAD&gt;<br>＜BODY&gt;<br>＜P&gt;This is a sample HTML page<br>＜/BODY&gt;<br>＜/HTML&gt;  <p>该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15409.html</p><img src ="http://www.blogjava.net/jackson110/aggbug/131136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-07-18 18:49 <a href="http://www.blogjava.net/jackson110/archive/2007/07/18/131136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win2003完美配置Apache+IIS+Tomcat多站点 该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15431.html</title><link>http://www.blogjava.net/jackson110/archive/2007/07/18/131134.html</link><dc:creator>jacksontoto</dc:creator><author>jacksontoto</author><pubDate>Wed, 18 Jul 2007 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/jackson110/archive/2007/07/18/131134.html</guid><wfw:comment>http://www.blogjava.net/jackson110/comments/131134.html</wfw:comment><comments>http://www.blogjava.net/jackson110/archive/2007/07/18/131134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackson110/comments/commentRss/131134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackson110/services/trackbacks/131134.html</trackback:ping><description><![CDATA[<p>本来以为上一次的配置就搞定了，结果本地测试好好的，到了服务器上调试就完蛋了，本地只测试了一个ASP站和一个JSP站，而实际情况是多个asp站和jsp站，又试了两次还是不行，终于在第三次尝试后搞定了，写下来做个纪念。  <p>　　第一次尝试使用：  <p>&lt;VirtualHost *:80&gt;<br>ServerAdmin feifei0658@sina.com<br>ServerName www.5hope.com<br>DcumentRoot "G:\5hope<br>DirectoryIndex index.html index.htm index.asp <br>ProxyPass / <a href="http://www.5hope.com:88/">http://www.5hope.com:88/</a><br>ProxyPassReverse / www.5hope.com:88/<br>&lt;/VirtualHost&gt;  <p>&lt;VirtualHost *:80&gt;<br>ServerAdmin feifei0658@sina.com<br>ServerName www.shundabanjia.com <br>DocumentRoot "G:\wuyubing\www"<br>DirectoryIndex index.html index.htm index.asp <br>ProxyPass / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>ProxyPassReverse / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>&lt;/VirtualHost&gt;  <p>　　本以为这样设置多站点就搞定了，结果发现只识别第一个站点，访问别的站点都是这个站的内容，折腾了一上午，没成功。  <p>　　第二次尝试使用：  <p>&lt;VirtualHost *:80&gt;<br>#添加了这个属性**********<br>ProxyPreserveHost On<br>ServerAdmin feifei0658@sina.com <br>ServerName www.shundabanjia.com <br>DocumentRoot "G:\wuyubing\www"<br>DirectoryIndex index.html index.htm index.asp <br>ProxyPass / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>ProxyPassReverse / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>&lt;/VirtualHost&gt;  <p>LoadModule jk_module modules/mod_jk.so <br>JkWorkersFile "D:\tomcat5.0.28\conf\workers.properties" <br>&lt;VirtualHost *:80&gt;<br>ServerAdmin feifei0658@sina.com <br>ServerName www.openria.cn<br>DirectoryIndex index.html index.htm index.jsp<br>JkMount /* ajp13 <br>JkAutoAlias "D:\tomcat-5.0.28\Webapps\ria" <br>&lt;Directory "D:\tomcat-5.0.28\webapps\ria"&gt;<br>Options Indexes FollowSymLinks<br>allow from all<br>&lt;/Directory&gt;<br>&lt;/VirtualHost&gt;  <p>　　这回经过查官方资料，发现了一个属性，叫ProxyPreserveHost On，试了一下，是可以用实现多个虚拟的asp站点了，但是和我的tomcat站点定义冲突，访问不了jsp站，又不行，只好再找。  <p>　　第三次尝试使用：  <p>NameVirtualHost *:80  <p>&lt;VirtualHost *:80&gt;<br>ProxyPreserveHost On<br>ServerAdmin feifei0658@sina.com<br>ServerName www.shundabanjia.com <br>DocumentRoot "G:\wuyubing\www"<br>DirectoryIndex index.html index.htm index.asp <br>ProxyPass / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>ProxyPassReverse / <a href="http://www.shundabanjia.com:88/">http://www.shundabanjia.com:88/</a><br>&lt;/VirtualHost&gt;  <p>LoadModule jk_module modules/mod_jk.so <br>JkWorkersFile "D:\tomcat5.0.28\conf\workers.properties" <br>&lt;VirtualHost *:80&gt;<br>ServerAdmin feifei0658@sina.com <br>ServerName www.openria.cn<br>DirectoryIndex index.html index.htm index.jsp<br>JkMount /* ajp13 <br>JkAutoAlias "D:\tomcat-5.0.28\webapps\ria" <br>&lt;Directory "D:\tomcat-5.0.28\webapps\ria"&gt;<br>Options Indexes FollowSymLinks<br>allow from all<br>&lt;/Directory&gt;<br>&lt;/VirtualHost&gt;  <p>　　经过反复看文档，这回终于搞定了，原来是没有吧"Use name-based virtual hosting."打开，去掉NameVirtualHost *:80前面的#号就可以了，真是晕啊。  <p>　　总算成功了，看来有问题还需要看官方资料，网友的资料还是不完整啊，通过自己的努力，发现新的线索：  <p>ProxyPreserveHost On <br>NameVirtualHost *:80  <p>　　这也是自己的收获啊，希望这些经历能帮助需要他的人。  <p>　　再次庆祝一下，自己的网站终于要开通了，欢迎访问：www.openria.cn  <p>该文章转载自1024k：http://www.1024k.cn/web/2007/200701/15431.html</p><img src ="http://www.blogjava.net/jackson110/aggbug/131134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackson110/" target="_blank">jacksontoto</a> 2007-07-18 18:46 <a href="http://www.blogjava.net/jackson110/archive/2007/07/18/131134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>