构思时这样:采用3层架构
表示层:有3个jsp页面。
1 (index.jsp):用来形成一个搜索的页面(大概弄成像google主页那种模式)
2 (resutl.jsp):用来显示查询结果
3 (product.jsp):用来显示产品的详细信息;
控制层:用struts2来实现,包括2个action。
1 (search.action):用来对用户输入的信息查询,并转到result.jsp页面将查询结果返回。
2 (product.action):用来实现产品详细信息的db查询,与转到product.jsp页面的返回。
持久层:jdbc实现产品信息的查询
index.jsp:
页面风格写成和Google差不多的样子,用post方式发送数据到后台,这里遇到了一个中文乱码问题,解决方法:
1:把index.jsp的pageEncoding 改成"gbk"
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
2:在webroot目录下创建struts.prpperties并写入:struts.i18n.enconing =gbk
或者在struts.xml中加入:<constant name="struts.i18n.encoding" value="gbk"></constant>
search.action
1:实现搜索功能
1):获得页面传来的查询关键字
2):使用lucene对传来的关键字查询,返回所有满足条件的product的id
3):用id查询数据库返回所有product
4):传递到result.jsp页面显示
2:实现result.jsp页面的分页功能:
1:策略:第一次返回10个结果,以后每次点击下一页或其他页码,将关键字和当前页码一起传到数据库,进行处理返回10条记录。
2:实现方法:新增size(每页显示多少条记录,10条)nowpage(现在时在第几页)pagesize(一共有多少分页)nextpage(下一页页码)
if((nowpage*10)<id_list.size() )
id_list = id_list.subList((nowpage-1)*10, nowpage*10);
else id_list = id_list.subList((nowpage-1)*10, id_list.size());
id_list为查询出的所有结果,上面的代码实现从查询出的结果中根据当前页码返回10条记录。
result.jsp
1:显示所有search.action post来的查询结果
2:实现分页
对于显示查询结果:采用struts2的遍历标签iterator,具体如下
<s:iterator value="p" status="s">
<table width="800" height="10" cellpadding="5">
<tr>
<td>
<s:a href="product.action?id=%{id}">
<font color="blue">${type } </font>
</s:a>
</td>
</tr>
<tr>
<td>
${summary }
</td>
</tr>
<tr>
<td>
<font color="green" size="2 "> nature url: <a
href="<s:property value="originalUrl" />"> <s:property
value="originalUrl" /> </a> </font>
</td>
</tr>
</table>
<hr size="2" color="lightblue">
</s:iterator>
对于分页:采用jstl的循环标签 foreach,具体代码如下:
<c:forEach begin="1" end="${pagesize}" varStatus="vs">
<a href="search.action?infor=${infor}&&nowpage=${vs.count }"
id="${vs.count }">${vs.count }</a>
</c:forEach>
<a href="search.action?infor=${infor}&& nowpage=${nextpage}"
id="${nextpage}">下一页</a>
对于分页还有一个问题,就是如何知道让用户知道现在时第几页的问题:这里采用ajax中的dwr框架重后台获得nowpage并把这个链接的字变成绿色,后来出现了个意外,就改用隐藏域方法,具体关键代码如下:
function load() {
var hidden = dwr.util.getValue("hidden");
var str = "<font color='green' >"+hidden+"</font>";
document.getElementById(hidden).innerHTML=str;
}
<body onload="load()">
<input type="hidden" value=${nowpage } id="hidden" />
.....
这样就实现了把当前页变成绿色。
product.action
1:获得reslut.jsp传递来的product id
2:根据id重db中取得product,并对其进行处理
3:转到product.jsp
对于第2 点要说明下,由于存入数据库是没有对汽车的详细参数处理,一股脑的存入了数据库,这里要通过字符串处理把车的参数分离出来具体代码
private void process(String str1, String str2, String str3) {
StringBuffer sb = new StringBuffer();
String[] st_list = str1.split("\n");
// 获得 price
sb
.append("<table align='center' bordercolor='cadetblue' border='1' width='80%'><tr><td width='50%'><img src="
+ this.p.getImageURI().trim()
+ "></td><td><img src='green.png'></td></tr><tr bgcolor='lightblue'><td>厂家估价:</td>");
sb.append("<td>" + str2 + "</td></tr>");
sb.append("<tr bgcolor='lightblue'><td >上市时间:</td><td>" + str3+ "</td></tr>");
// 获得其他详细参数
for (int i = 1; i < st_list.length; i++) {
if (st_list[i].indexOf(";") != -1) {
String[] st1_list = st_list[i].split(";");
for (int j = 0; j < st1_list.length; j++) {
int beginIndex1 = st1_list[j].indexOf(":");
if (beginIndex1 != -1) {
String index1 = st1_list[j].substring(0, beginIndex1);
String content1 = st1_list[j]
.substring(beginIndex1 + 1);
sb.append("<tr bgcolor='cornsilk'><td>" + index1
+ "</td>");
sb.append("<td>" + content1 + "</td>");
} else {
sb.append("<tr><td>" + st1_list[j] + "</td>");
}
}
sb.append("</tr>");
} else if (st_list[i].indexOf(",") != -1) {
String[] st2_list = st_list[i].split(",");
for (int k = 0; k < st2_list.length; k += 2) {
sb.append("<tr bgcolor='cornsilk'><td>" + st2_list[k]
+ "</td>");
if (k + 1 >= st2_list.length)
break;
sb.append("<td>" + st2_list[k + 1] + "</td>");
}
sb.append("</tr>");
} else {
sb.append("<tr><td bgcolor='lightblue'>" + st_list[i]
+ "</td></tr>");
}
}
sb.append("</table>");
contenthtml = sb.toString();
}
这样就实现了详细参数的处理
product.jsp
仅有显示的功能
这样就基本实现了一个简单搜索引擎,下一步就是对搜索引擎的美化和优化
分享到:
相关推荐
基于struts2实现的lucene搜索引擎 包括创建索引,搜索索引,高亮显示 有详细的注释,适合初学者学习
基于Lucene的搜索引擎在Struts中的应用.pdf基于Lucene的搜索引擎在Struts中的应用.pdf基于Lucene的搜索引擎在Struts中的应用.pdf基于Lucene的搜索引擎在Struts中的应用.pdf基于Lucene的搜索引擎在Struts中的应用.pdf
我的毕业论文基于开源LUCENE的新闻搜索引擎的实现
基于Lucene小型搜索引擎的研究与实现
ssh 集成lucene,spring+ibitas+struts 资源开发 希望学lucene的人可以多了解下
基于Lucene的搜索引擎的研究与应用基于Lucene的搜索引擎的研究与应用
基于LUCENE的搜索引擎的设计与实现源代码..
struts2.3 spring3.2 mybatis3.2 lucene4.2搜索引擎
Lueene是一个强大的全文索引引擎工具包,...网的中文搜索引擎的系统结构,Lucene的索引和搜索,并且设计实现了一个自己的搜索引擎——易搜中文搜 索引擎。结果表明,基于Lucene的搜索引擎在索引和查找上的效率很高。
最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引...Lucene的目的是为软件开发人员提供一个简易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。
完整代码,基于Lucene的分词,根据搜索引擎的目标和基本内容,将实现功能模块主要划分为创建中文分析器(创建索引)、读取索引文件查询记录、根据输入的内容进行分词、根据关键字进行全文检索、将结果按JSON格式输出...
基于lucene的站内搜索引擎研究,介绍了基于lucene架构的,站内搜索引擎的具体实现
资源名字:基于java+Lucene+Tomcat的搜索引擎设计与实现(源码+文档)JAVA_Lucene_Tomcat_搜索引擎.zip 资源类型:项目全套源码+文档+辅导视频 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合场景...
[硕士论文]_基于Lucene的Web搜索引擎实现.pdf [硕士论文]_基于MapReduce的分布式智能搜索引擎框架研究.pdf [硕士论文]_基于Nutch的垂直搜索引擎的分析与实现.pdf 一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术...
对网络搜索引擎技术进行简要研究,学习搜索引擎完成搜索工作的整个流程中涉及的各种技术,并采用开源工具Nutch、Lucene实现一个简单的搜索引擎,具体功能如下: 1、熟悉网络爬虫程序,采用开源的爬虫工具采集指定...
Lucene搜索引擎1Lucene搜索引擎1Lucene搜索引擎1Lucene搜索引擎1Lucene搜索引擎1Lucene搜索引擎1
Lucene+Heritrix(搜索引擎与信息检索),Lucene+Heritrix(搜索引擎与信息检索)