??xml version="1.0" encoding="utf-8" standalone="yes"?>激情综合色丁香一区二区,国产免费一区二区三区在线能观看,精品国产亚洲日本http://www.aygfsteel.com/RomKK/archive/2007/07/24/132157.htmlRomKKRomKKTue, 24 Jul 2007 14:35:00 GMThttp://www.aygfsteel.com/RomKK/archive/2007/07/24/132157.htmlhttp://www.aygfsteel.com/RomKK/comments/132157.htmlhttp://www.aygfsteel.com/RomKK/archive/2007/07/24/132157.html#Feedback0http://www.aygfsteel.com/RomKK/comments/commentRss/132157.htmlhttp://www.aygfsteel.com/RomKK/services/trackbacks/132157.html
1、引a
ZWeb技术的Internet/Intranetq年来已l得Cq泛的应用,Intranet是以TCP/IP协议为基、以Web为核心的企业内部|,用户通过低成本、简单易用的客户览器就能随旉地到企业的Web站点上查阅自己所需的数据。浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开攑֒Z标准的连接方案企业很方便地通过Internet同外界联p;同时QWeb信息动态的、交互式的发布方式从Ҏ上改变了企业的服务质量,增加了企业的商业Z?br>在许多用L来,一个Web|站的成败主要在于它所提供的内容和功能Q而支持这些内容和功能的Web服务器v着非常重要的作用?br>2、Tomcat容器
Tomcat是一个免费的开源的Serlvet容器Q它是Apache基金会的Jakarta目中的一个核心项目,由ApacheQSun和其它一些公司及个h共同开发而成。由于有了Sun的参与和支持Q最新的Servlet和Jsp规范总能在Tomcat中得C现?br>Tomcat是稳固的独立的Web服务器与Servlet ContainerQ不q,其Web服务器的功能则不如许多更健全的Web服务器完_如Apache Web服务器(举例来说QTomcat没有大量的选择性模块)。不q,Tomcat是自q开源YӞ而且有许多高手致力于其发展?br>2.1 Linux下安装Tomcat
        在安装Tomcat之前需要安装j2sdkQJava 2 Software Development KitQ,安装j2sdk的步骤如下:
1Q到http://www.java.sun.com下蝲j2sdk Q如j2sdk-1_4_2_04-linux-i586-rpm.bin?br>2Q在l端中{到j2sdk-1_4_2_04-linux-i586-rpm.bin所在的目录Q输入命令chmod +x j2sdk-1_4_2_04-linux-i586-rpm.bin,d执行的权限?br>3Q执行命?/j2sdk-1_4_2_04-linux-i586-rpm.binQ生成j2sdk-1_4_2_04-linux-i586.rpm的文件?br>4Q执行命令chmod +x j2sdk-1_4_2_04-linux-i586.rpmQ给j2sdk-1_4_2_04-linux-i586.rpmd执行的权限?br>5Q执行命?rpm –ivh j2sdk-1_4_2_04-linux-i586.rpm ,安装j2sdk?br>6Q安装界面会出现授权协议Q按Enter键接受,把j2sd安装?usr/java/j2sdk1.4.2_04?br>7Q设|环境变量,?/etc/profile.d/目录下徏立文件java.shQ文件的内容如下Q?br>#set java environment
export JAVA_HOME=/usr/java/j2sdk1.4.2_04
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
8Q执行命令chmod 755 /etc/profile.d/java.shQ给java.sh分配权限?br>9Q在l端中分别执行命令javac –help和java –versionQ如果看到有关的信息Q则表示j2sdk已成功安装?br>    接下来安装tomcatQ安装tomcat的步骤如下:
1Q访?a >http://jakarta.apache.org/tomcat/index.htmlQ下载二q制版的tomcatQ如jakarta-tomcat-5.5.10.tar.gzQ解压到/usr/local目录Q?br>cd /usr/local
gzip –zxvf jakarta-tomcat-5.5.10.tar.gz
2Q修?tomcat/bin/startup.sh和shutdown.sh文g,
export JAVA_HOME=/usr/java/j2sdk1.4.2_04
export CATALINA_HOME=/usr/local/tomcat-5.5.10
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
3Q执行startup.sh卛_?a href="http://localhost:8080/">http://localhost:8080/ 讉K到tomcat的缺省面?
2.2单独q行Tomcat的优?br>1Q容易架设。下载TomcatQ设定一些配|,完成了。不需要花Ҏ间将Web服务器的q接器整合至其它的Web服务器中?br>2Q不需要担心连接器。永q不需要排除在其它Web服务器与Tomcat之间的Q何性能或联机方面的问题?br>3Q有较佳的安全防护。相对于其它以C、CQ+所~写的Web服务器,Tomcat比较能忍受远E缓冲区溢位的攻凅R因为Tomcat的Java虚拟机是位于|络及操作系l之_它可以防止几乎所有类型的~冲区溢位攻凅R用Tomcat的安全防护领域,可以指定对各个资源的讉K?br>4Q容易移植。可以将Tomcat服务器(以及应用E序Q移植到不同的服务器、操作系l甚x构上。因为Tomcat是以Java~写的,因此可以其整个目录l构的内容复制到其它计算Zq行Q而完全不需要Q何改变,甚至于新的计机的架构与原来的不同也一栗?br>2.3单独q行Tomcat的缺?br>1QTomcat的支持Y件比较少。Tomcat内徏Web服务器的支持软g比Apache httpd Web服务器少?br>2QTomcat的Web服务器功能少。相对于Tomcat Web服务器,Apache httpd服务器有更完整的功能?br>3Q虽然Tomcatq行速度快,但还没有Apache httpd快。Tomcat服务器比Apache httpd慢,不过Q它q在改进中,而且仍然非常快,快到以q行今日大多数的企业|站Q只是在提供静态页面内容上没有Apache快?br>3、Apache Web服务?br>Apache是根据NCSA的服务器发展而来的,NCSA是最早出现的Web服务器程序之一Q由伊利诺斯大学Urbana-Champaign分校的美国国家超U计应用中心开发。在发展初期QApache主要是一个基于UNIXpȝ的服务器Q它的宗旨就是徏成一个基于UNIXpȝ的、功能更强、效率更高ƈ且速度更快的WWW服务器,q就军_了它是从其他的服务器演变而来的,q且d了大量补丁来增强它在某一斚w的性能Q所以它p命名?#8220;APAQCHy ServerQ一个补丁组成的服务器)”。发展到今天QApache已经被移植到很多q_上了?br>Apache的开发遵循GPL协议Q由全球的志愿者一起开发和l护。在保持强大的功能及不断更新的同Ӟ它仍然是免费的,q且公开源代码?br>3.1 安装Apache服务?br>可以通过以下三种Ҏ安装Apache服务器?
1Q如果安装的Linux版本中带用Apache的话Q就在选择所要安装的服务器的时候,httpdq个服务选上QLinux安装E序自动完成Apache的安装工作,q做好基本的配置?
2Q用可执行文g软g包,q比较适合那些对编译工作不是太熟悉的初U用P因ؓ它相Ҏ较简单。下载Y件包apache_1.2.4.e.tar.gz Q执行命令tar xvzf apache_1.2.4.e.tar.gz 完成安装工作。如果用的是RedHat Linux的话Q也可以下蝲apache_1.2.4.rpm软g安装包,然后使用rpm –ivh apache_1.2.4.rpm命o安装?
3Q如果想把Apache服务器充分利用v来的话,׃定要自己~译Apache 定制其功能?下蝲包含Apache源代码的软g包apache_1.2.4.tar.gzQ然后用tar命o它解开Q将当前目录改变为Apache源代码发行版的src目录Q将配置h文gQConfiguration.tmplQ复制ؓConfiguration文gQ编辑Configuration文g中的配置选项Q?
Makefile配置选项Q一些编译选项Q?br>. “CC=”一行指定用什么编译Y件编译,一般ؓ“CC=gcc”Q如果需要将额外的标志(参数Q指定给C~译软gQ可以用:
EXTRA_CFLAGS=
EXTRA_LFLAGS=
如果pȝ需要特D的库和包含文gQ可以在q里指定它们Q?
EXTRA_LIBS=
EXTRA_INCLUDES=
如果要改变代码优化设|的话,d下面一句去掉注释,然后Ҏ所需要的|
#OPTIM=-O2
Rule配置选项Q用来决定需要什么功能,一般情况下无需改变?
模块配置Q模块是Apache的组成部分,它ؓApache内核增加新功能。通过使用模块配置Q可以自定义在Apache服务器中需要什么功能,q个部分也是Apache灉|性的表现。模块配|行如下所C:
AddModule modules/standard/mod_env.o
如果需要Apache服务器具备什么功能,将那个模块用AddModule语句加到配置文gConfiguration中去?
下面列出了Apache的模块功能:
模块?nbsp;                        功能                                                     ~省
mod_access                 提供ZL的访问控制命?nbsp;                                    y
mod_actions                能够q行ZMIMEcd的CGI脚本或HTTPhҎ                      y
mod_alias                能执行URL重定向服?nbsp;                                        y
mod_asis                 使文档能在没有HTTP头标的情况下被发送到客户?nbsp;                y
mod_auth                 支持使用存储在文本文件中的用户名、口令实现认?nbsp;                y
mod_auth_dbm                   支持使用DBM文g存储基本HTTP认证                         n
mod_auth_mysql                        支持使用MySQL数据库实现基本HTTP认证                            n
mod_auth_anon                        允许以匿名方式访问需要认证的区域                            y
mod_auth_external                支持使用W三方认?nbsp;                                        n
mod_autoindex                        当缺烦引文件时Q自动生成动态目录列?nbsp;                        y
mod_cern_meta                        提供对元信息的支?nbsp;                                        n
mod_cgi                         支持CGI                                                 y
mod_dir                         能够重定向Q何对不包括尾部斜杠字W命令的h                 y
mod_env                                 使你能够环境变量传递给CGI或SSI脚本                         n
mod_expires                 让你定Apache在服务器响应h时如何处理Expires                          y
mod_headers                 能够操作HTTP应答头标                                 y
mod_imap                 提供囑Ş映射支持                                         n
mod_include                 使支持SSI                                                 n
mod_info                                 Ҏ务器配置提供了全面的描述                                 y
mod_log_agent                         允许在单独的日志文g中存储用户代理的信息                         n
mod_log_config                        支持记录日志                                                      y
mod_log_referer                          提供了将h中的Referer头标写入日志的功?nbsp;                n
mod_mime                 用来向客L提供有关文档的元信息                        y
mod_negotiation                        提供了对内容协商的支?nbsp;                                y
mod_setenvif                 使你能够创徏定制环境变量                                 y
mod_speling                 使你能够处理含有拼写错误或大写错误的URLh                     n
mod_status                 允许理员通过WEB理Apache                                 y
mod_unique_id         为每个请求提供在非常Ҏ的条件下保证是唯一的标?nbsp;                              n
在src目录下执行:“. /configure”Q?
~译ApacheQ执行命?#8220;make”Q?
编译好的可执行文ghttpd复制?etc/httpd/bin目录下;Apache发行版的配置文gQaccess.conf、httpd.conf、mime.types、srm.conf文g复制?etc/httpd/conf目录下。到此ؓ止,安装完成?
3.1单独q行Apache httpd的优?br>   1QApache httpd比Tomcat内徏的Web服务器快?br>   2Q较多的软g支持。Apache httpd有庞大的支持软g链接库?br>3Q启动与停止快。一般来_Apache httpd的启动与停止旉都比Tomcat短?br>3.2单独q行Apache httpd的缺?br>   1Q架设比较困难。比起单独运行TomcatQ安装Apache Web服务器ƈ让它与Tomcat协同q行要复杂很多?br>   2Q会拖慢动态网内容的服务?br>   3Q安全漏z。Apache httpd比较Ҏ受到~冲区溢位的d?br>   4Q升U比较复杂?br>4、Tomcat与Apache的整?br>有几U将Tomcat整合到Apache httpd Web服务器的ҎQ?br>1Q架使用不同的端口号分担负蝲?br>该方法是最Ҏ实现的,只需要在现成的网늛录中假如URL以连接到在同一台Web服务器机器上的Tomcat Web服务器端口(?080Q。实际上q是执行两个完整的Web服务器程序,彼此之间q没有真正的整合?br>2Q从Apache请求发送至Tomcat的代理服务器?br>该方法会在主服务器中使用HTTP的代理机制。代理机制常会用来将来自|关上运行的Web服务器的Web信息重新\p外部因特|上的网站。不q,也可以用来将|站区域或目录的信息重DTomcat Web服务器?br>3Q用mod_jk2q接器?br>该方法用运行于现有的Apache httpd Web服务器之内的q接器模块(如mod_jkQ,q经q定的协议快速地请求{送至Tomcat。这是将Tomcatq接至Apache httpd的标准方式?br>4Q单一q程中执行两个程序?br>该方法通过让JVM在Apache httpd的进E空间中q行的方式,可以提供“完全整合”的功能。这是最有效的办法,但也是最依赖于服务器的实现?/br>

RomKK 2007-07-24 22:35 发表评论
]]>
Lucene 基础指南http://www.aygfsteel.com/RomKK/archive/2007/07/24/132074.htmlRomKKRomKKTue, 24 Jul 2007 07:59:00 GMThttp://www.aygfsteel.com/RomKK/archive/2007/07/24/132074.htmlhttp://www.aygfsteel.com/RomKK/comments/132074.htmlhttp://www.aygfsteel.com/RomKK/archive/2007/07/24/132074.html#Feedback0http://www.aygfsteel.com/RomKK/comments/commentRss/132074.htmlhttp://www.aygfsteel.com/RomKK/services/trackbacks/132074.html Lucene是apachel织的一个用java实现全文搜烦引擎的开源项目。其功能非常的强大,但api其实很简单的Q它最主要是做两件事:建立索引和进行搜索?br>1. 建立索引时最重要的几个术?br>
* DocumentQ一个要q行索引的单元,相当于数据库的一行纪录,M惌被烦引的数据Q都必须转化为Document对象存放?br>* FieldQDocument中的一个字D,相当于数据库中的Column QField是lucene比较多概念一个术语,详细见后?br>* IndexWriterQ负责将Document写入索引文g。通常情况?IndexWriter的构造函数包括了以下3个参?索引存放的\?分析 器和是否重新创徏索引。特别注意的一点,当IndexWriter执行完addDocumentҎ后,一定要记得调用自n的closeҎ来关闭它。只 有在调用了closeҎ后,索引器才会将存放在内在中的所有内容写入磁盘ƈ关闭输出?br>* Analyzer:分析器,主要用于文本分词。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等?br>* Directory:索引存放的位|。lucene提供了两U烦引存攄位置Q一U是盘Q一U是内存。一般情况将索引攑֜盘上;相应地lucene提供了FSDirectory和RAMDirectory两个cR?br>* D:Segment,是Lucene索引文g的最基本的一个单位。Lucene说到底就是不断加入新的SegmentQ然后按一定的规则法合ƈ不同的Segment以合成新的Segment?br>
lucene建立索引的过E就是将待烦引的对象转化为Lucene的Document对象Q用IndexWriter其写入lucene 自定义格式的索引文g中?

待烦引的对象可以来自文g、数据库{Q意途径Q用戯行编码遍历目录读取文件或者查询数据库表取得ResultSetQLucene的API只负责和字符串打交道?br>1.1 Field 的解?br>
从源代码中,可以看出Field 构造函数如下:

Field(String name, byte[] value, Field.Store store)
Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)
Field(String name, String value, Field.Store store, Field.Index index)
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)

在Field当中有三个内部类QField.Index,Field.Store,Field.termVector。其?br>
* Field.Index有四个属性,分别是:
Field.Index.TOKENIZEDQ分词烦?br>Field.Index.UN_TOKENIZEDQ分词进行烦引,如作者名Q日期等QRod Johnson本nZ单词Q不再需要分词?br>Field.IndexQ不q行索引Q存放不能被搜烦的内容如文档的一些附加属性如文档cd, URL{?br>Field.Index.NO_NORMSQ;
* Field.Store也有三个属性,分别是:
Field.Store.YESQ烦引文件本来只存储索引数据, 此设计将原文内容直接也存储在索引文g中,如文档的标题?br>Field.Store.NOQ原文不存储在烦引文件中Q搜索结果命中后Q再Ҏ其他附加属性如文g的PathQ数据库的主键等Q重新连接打开原文Q适合原文内容较大的情c?br>Field.Store.COMPRESS 压羃存储Q?br>* termVector是Lucene 1.4.3新增的它提供一U向量机制来q行模糊查询,很少用?br>
上面所说的Field属性与lucene1.4.3版本的有比较大的不同Q在旧版?.4.3里lucene是通过Field.Keyword (...),FieldUnIndexed(...),FieldUnstored(...)和Field.Text(...)来设|不同字D늚cd以达 C同的用途,而当前版本由Field.Index和Field.Store两个字段的不同组合来辑ֈ上述效果?br>q有一点说?其中的两个构造函数其默认的gؓField.Store.NO和Field.Index.TOKENIZED。:

Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)

* 限制Field的长?
IndexWritercL供了一个setMaxFieldLength的方法来对Field的长度进行限Ӟ看一下源代码q道其默认gؓ10000Q?我们可以在用时重新讄此参数。如果用默认|那么Lucene׃仅对文档的前面的10000个termq行索引Q超q这一个数的文档就不会被徏?索引?br>
1.2 索引的合q、删除、优?br>
* IndexWriter中的addIndexesҎ烦引进行合q?当在不同的地方创Z索引后,如果需要将索引合ƈQ这时候用addIndexesҎ显得很有意义?br>* 可以通过IndexReadercM索引中进行文档的删除。IndexReader是很特别的一个类Q看源代码就知道它主要是通过自n的静态方法来完成构造的。示例:

IndexReader reader = IndexReader.open("C:\\springside");
reader.deleteDocument(X); //q里的X是一个int的常敎ͼ不推荐这一U删除方?br>reader.deleteDocument(new Term("name","springside"));//q是另一U删除烦引的ҎQ按字段来删除,推荐使用q一U做?br>reader.close();

* 优化索引:可以使用IndexWritercȝoptimizeҎ来进行优先,它会多个Segmentq行合ƈQ组成一个新的Segment,可以?快徏立烦引后搜烦的速度。另外需要注意的一点,optimizeҎ会降低徏立烦引的速度Q而且要求的磁盘空间会增加?br>
2. q行搜烦时最常用的几个术?br>
* IndexSearcher:是lucene中最基本的检索工P所有的索都会用到IndexSearcher工具。初始化IndexSearcher需要设|烦引存攄路径Q让查询器能定位索引而进行搜索?br>* Query:查询Qlucene中支持模p查询,语义查询Q短语查询,l合查询{等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery{一些类?br>* QueryParser: 是一个解析用戯入的工具Q可以通过扫描用户输入的字W串Q生成Query对象?br>* Hits:在搜索完成之后,需要把搜烦l果q回q显C给用户Q只有这h是完成搜烦的目的。在lucene中,搜烦的结果的集合是用Hitscȝ实例来表C的。Hits对象中主要方法有Q?br>
length(): q回搜烦l果的L,下面单的用法中有用到Hit的这一个方?br>doc(int n): q回Wn个文?br>iterator(): q回一个P代器

q里再提一下HitsQ这也是Lucene比较_ֽ的地方,熟悉hibernate的朋友都知道hibernate有一个gq加载的属性,同样, Lucene也有。Hits对象也是采用延迟加蝲的方式返回结果的Q当要访问某个文档时QHits对象在内部对Lucene的烦引又q行一ơ检索,最?才将l果q回到页面显C?br>
3. 一个简单的实例Q?br>
首先把lucene的包攑֜classpath路径中去Q写下面一个简单的c:

public class FSDirectoryTest {
//建立索引的\?br>public static final String path = "c:\\index2";

public static void main(String[] args) throws Exception {
Document doc1 = new Document();
doc1.add( new Field("name", "lighter springside com",Field.Store.YES,Field.Index.TOKENIZED));

Document doc2 = new Document();
doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));

IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.close();

IndexSearcher searcher = new IndexSearcher(path);
Hits hits = null;
Query query = null;
QueryParser qp = new QueryParser("name",new StandardAnalyzer());

query = qp.parse("lighter");
hits = searcher.search(query);
System.out.println("查找\"lighter\" ? + hits.length() + "个结?);

query = qp.parse("springside");
hits = searcher.search(query);
System.out.println("查找\"springside\" ? + hits.length() + "个结?);

}
}

执行的结果:

查找"lighter" ?个结?br>查找"springside" ?个结?br>
4. 一个复杂一点的实例

* 在windowspȝ下的的C盘,Z个名叫s的文件夹,在该文g多w面随便徏三个txt文gQ随便v名啦Q就?1.txt","2.txt"?3.txt"?br>其中1.txt的内容如下:

springsideC֌
更大q步Q吸引更多用?更多贡献
2007q?br>
?2.txt"?3.txt"的内容也可以随便写几写,q里懒写Q就复制一个和1.txt文g的内容一样吧

* 下蝲lucene包,攑֜classpath路径中,然后建立索引:

/**
* author lighter date 2006-8-7
*/
public class LuceneExample {
public static void main(String[] args) throws Exception {

File fileDir = new File("c:\\s"); // 指明要烦引文件夹的位|?q里是C盘的S文g夹下
File indexDir = new File("c:\\index"); // q里攄引文件的位置
File[] textFiles = fileDir.listFiles();

Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
indexFile(luceneAnalyzer,indexWriter, textFiles);
indexWriter.optimize();//optimize()Ҏ是对索引q行优化
indexWriter.close();
}

public static void indexFile(Analyzer luceneAnalyzer,IndexWriter indexWriter,File[] textFiles) throws Exception
{
//增加document到烦引去
for (int i = 0; i < textFiles.length; i++) {
if (textFiles[i].isFile() && textFiles[i].getName().endsWith(".txt")) {
String temp = FileReaderAll(textFiles[i].getCanonicalPath(),"GBK");
Document document = new Document();
Field FieldBody = new Field("body", temp, Field.Store.YES,Field.Index.TOKENIZED);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
}
public static String FileReaderAll(String FileName, String charset)throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(FileName), charset));
String line = "";
String temp = "";
while ((line = reader.readLine()) != null) {
temp += line;
}
reader.close();
return temp;
}
}

* 执行查询Q?br>
public class TestQuery {
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
String queryString = "C֌";
Query query = null;
IndexSearcher searcher = new IndexSearcher("c:\\index");

Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
query = qp.parse(queryString);
} catch (ParseException e) {
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("扑ֈ:" + hits.length() + " 个结?");
}
}
}
}

* 执行l果Q?br>扑ֈ:3 个结?



RomKK 2007-07-24 15:59 发表评论
]]>
վ֩ģ壺 | | | | | | ײ| ͩ| | | | ƽ| ޼| | | | ʡ| | | ͨ| | ɽ| | ̩| | | غ| ָɽ| ׶| | | | | | ͬ| | | ǿ| ɽ| | |