分享
 
 
 

简单的网页关键词匹配工具

王朝html/css/js·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

你是否曾经使用大量的详细信息创建网页,然后希望读者可以使用一种简单的方法,根据特定于用户的关键词分析和进入相应页面?本文解释了如何使用HTML表单和JSP技术来正确地实现上述要求。即使你从没希望得到这种效果,你可能也会发现本文的演示例子和代码练习十分有用,因为这些例子和代码涵盖了如何检索请求的值,并将这些值与静态文件中读到的值进行比较。

工作原理

HTML表单

搜索网页

代码训练

捕捉关键词

工作原理

这个HTML表单已经放置在你想要搜索的网页里了。该表单给出了一个可选的关键词列表,这些关键词是网页中已知的词,与你的主题不匹配,但是你相信用户可能想要搜索这些词。该表单还为用户提供了一个输入域,如果用户没有在那个列表中找到想要的关键词,就可以在这个输入域中输入他想要的关键字。

当用户敲回车键或点击Go按钮时,就会调用JSP逐行分析HTML页面,寻找用户指定的关键词,并返回该HTML页面中包含关键词的所有行。返回的结果根据匹配的关键词来组织。

HTML表单

下图左面显示了这个HTML表单,右边给出了创建该表单的HTML代码。这个表单是可以用的,你可以选则或输入关键词并点击Go按钮。

当你点击Go按钮之后,一个JSP页面将被调用来分析JavaServer Pages Technology索引页面的一份拷贝,并返回一个文章列表,这些文章的某个或某些条目包含了指定的关键词。举例来说,如果你记得曾经读到一篇Steve写的文章,那么输入“Steve”并点击Go按钮,就可以查看Steve的文章列表。

注意: 这个过程可能持续几秒钟的时间,因为下面描述的这个搜索页需要读取很多标题条、脚注和左侧导航的HTML代码。

表单外观

实现该表单的HTML

Select keywords from the list below:

JakartaCachedRowSetPropertiesApache

and/or enter a search phrase:

<form action="findwords.jsp" method="get"

Select keywords from the list below:

<input type="hidden" name="col" value="searchreports"

<select size="4" name="qp" multiple

<option value="Jakarta"Jakarta

<option value="CachedRowSet"CachedRowSet

<option value="properties"Properties

<option value="Apache"Apache

</select

and/or enter a search phrase:</font

<input type="text" name="qt" size="20" maxlength="50" value=""

<input type="image" src="go.gif" border="0"

</form

搜索页面

这个JSP网页的代码需要搜索页 使用段落标签包含起来。例如,网页入口的代码应该像下面给出的这样。注意,为了使HTML页面更加易读,因而在下面的入口代码中没有使用回车:

<P

<a href="/pathname/"Maintaining State for HTML Form Buttons</a by Matthias Laux <brHere's the scoop on using JavaServer Pages custom tags to maintain button state in your HTML forms. <i(October 2002)</i

</p

相反,下面这个例子在“Laux”和“Here’s”之间使用了回车,以确保源文件更加易于理解。

<P

<a href="/pathname/"Maintaining State for HTML Form Buttons</a by Matthias Laux

<brHere's the scoop on using JavaServer Pages custom tags to maintain button state in your HTML forms. <i(October 2002)</i

</p

为什么没有返回格式?

如果你像上面的第一个例子那样不考虑漏掉用于格式化的回车符,那么JSP代码将读取整行数据,分析其中是否有关键词出现,如果有匹配存在,则在结果页面中返回整行。在第二个例子中,JSP代码读取“Laux”之上的行,然后进行分析,如果有匹配就在结果页面中返回该行。这段代码接下来读取以“Here’s”开始的下一行。

简而言之,由于整个页面被打乱了,因此并没有完全返回整个页面。在上面的例子中,如果搜索条件是“Maintaining”,结果只会返回标题和作者而没有简介;如果搜索条件是“maintain”,结果将返回简介而不是标题和作者。

代码分析

本节对findwords.jsp的每一部分分别进行介绍,findwords.jsp是当用户点击Go按钮时调用的JSP代码。

注意: 源代码在一个txt文件中,因此你可以将其当作文本来浏览。以“jsp”为后缀意味着web服务器需要将该文件编译成一个servlet并且执行它。

JSP看上去就像一个HTML网页,只不过其中通过JSP标签嵌入了servlet代码片段。有许多不同类型的JSP标签,在本小节只涉及了其中的一部分。

指令

JSP指令用<%@ and %指令标签来包含,当JSP网页被转换为servlet时由JSP引擎处理。 本例中的页面指令告诉JSP引擎脚本语言是Java(language="java"),并且需要包含指定的Java包。

声明

JSP声明由<%! and %声明标签包含,允许你设置变量以便稍后在程序中使用。你也可以在使用的时候声明变量。只是要记住无论变量在哪里声明,其作用域都是整个JSP页面。本例中的声明声明了一个随机访问文件和一些用于读取搜索页的字符串变量。

设置文件和变量

代码的下一行初始化变量,并且打开一个到searchpage.html的连接,searchpage.html是将要搜索的网页。在这个例子中,该文件是JavaServer Pages Technology索引页面的一份拷贝。这个初始化过程获得要搜索的文件的长度,得到该文件的第一行,并且将一些变量设为0或空值。

val变量是一个标志,用于指示一个匹配是否是其类别中的第一个,并且由此判断是必须重新建立一个匹配序列,还是在已有的序列上继续搜索。

results变量也是一个标志变量,用于指示是否找到匹配。如果没有任何匹配,则在返回页上向用户返回一个消息。

File inputFile = new File("/pathname/searchpage.html");

in = new RandomAccessFile(inputFile, "r");

long length = in.length();

s = in.readLine();

int val = 0;

int results = 0;

String[] qpValues = null;

String qtValue = null;

结果页和记录条目

接下来的代码用于打印结果网页的标题,检查从可选序列得到的选择值(getParameterValues("qp"))和从表单上的输入域得到的值(getParameter("qt"))。找到的所有值都会被检索,并用于创建在结果页顶部显示的项目列表索引。

out.println("<h4Keyword Search Results</h4");

out.println("<ul");

for(int j = 0; j < qpValues.length; j++) {

out.println("<li<a href=#" + qpValues[j] + ""

+ qpValues[j] + "</a");

}

}

if(request.getParameter("qt") != null) {

qtValue=request.getParameter("qt");

if(qtValue.length() 0) {

out.println("<li<a href=#" + qtValue + ""

qtValue + "</a");

}

}

out.println("</ul");

大小写和从文件中读取

检索到的任何选项值都使用它在表单中输入的原始大小写,从而与文件中读到的行的字符进行匹配,并且还被全部转换为小写来进行比较。这是为了捕捉该条目中的所有可能性。例如,“Properties”使用大写的“P”与searchpage.html 中的每行进行一次比较,使用小写“p”也做一次。这样同时满足了“properties”在一个句子的开头和在中间的情况。从输入域得到的值则只使用输入的精确值,或者全大写、或者全小写,或者是输入状态。

每行开头和结尾的空格自动去掉,并且每行都检查是否以“<A HREF”开始。searchpage.html文件的每一行都是用左对齐,但是当一行以空格或tab开头时,去掉空格的操作可以解决可能错误地输入到关键词前面的空格或者制表键的问题。文件中我们感兴趣的所有行都是以“<A HREF” 开头的,而这在另一个文件中理所当然是必然会改变的,例如对以“<li”开头的行感兴趣,或其他的一些什么。

选项值:寻找匹配

这段代码的主要部分将选项值和从searchpage.html读到的行进行比较以便寻找匹配。当寻找到匹配时,将该行在其正确的类别下作为一个项目列表项返回到结果页面。

if(request.getParameterValues("qp") != null) {

qpValues = request.getParameterValues("qp");

for (int i = 0; i < qpValues.length; i++) {

while(s!=null) {

if(s != null && s.length() 0 ) {

if(s.trim().startsWith("<A HREF")

&& qpValues[i].length() 0) {

String lower = qpValues[i].toLowerCase();

if(s.indexOf(qpValues[i]) 0

|| s.indexOf(lower) 0) {

results=1;

if(val == 0) {

out.println("<a name=" + qpValues[i] + "</a");

out.println("<h4");

out.println(qpValues[i]);

out.println("</h4");

out.println("<ul");

val=1;

}

out.println(s);

out.println("<p");

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有