📄 searchaction.java
字号:
package com.booksearch.action;
/************************************************************
FileName: SearchAction.java
Author: fengguang
Date:11/16/08
Description: 在本地数据库中查找是否有匹配记录,如果有,则转到数据处理类,否则,转到抽取网站内容的action
Class List: SearchAction
***********************************************************/
import java.io.StringReader;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.booksearch.actionform.SearchActionForm;
import com.booksearch.dao.BookLoadDao;
import com.booksearch.dao.BookSaveDao;
import com.booksearch.dao.DailyLoadDao;
import com.booksearch.dao.DailySaveDao;
import com.booksearch.orm.Book;
import com.booksearch.orm.Daily;
import com.booksearch.orm.Price;
import com.booksearch.util.SessionBean;
import com.booksearch.util.UpdateUtilBean;
/**
* Class:SearchAction
* Description: 在本地数据库中查找是否有匹配记录,如果有,则转到数据处理类,否则,转到抽取网站内容的action
* extens:Action
* @author feng guang
* @since 11/16/08
*/
public class SearchAction extends Action {
/*检索关键字*/
private String keyword;
private String searchKind;
/*数据库中匹配记录数*/
private long recordNum;
/*处理Book bean持久化的接口引用*/
private BookLoadDao bookLoadDao;
private SessionBean sessionBean;
private DailySaveDao dailySaveDao;
private DailyLoadDao dailyLoadDao;
private BookSaveDao bookSaveDao;
private Analyzer writerAnalyzer;
public void setBookSaveDao(BookSaveDao bookSaveDao) {
this.bookSaveDao = bookSaveDao;
}
public void setBookLoadDao(BookLoadDao bookLoadDao) {
this.bookLoadDao = bookLoadDao;
}
public void setSessionBean(SessionBean sessionBean) {
this.sessionBean = sessionBean;
}
public void setDailyLoadDao(DailyLoadDao dailyLoadDao) {
this.dailyLoadDao = dailyLoadDao;
}
public void setDailySaveDao(DailySaveDao dailySaveDao) {
this.dailySaveDao = dailySaveDao;
}
public void setWriterAnalyzer(Analyzer writerAnalyzer) {
this.writerAnalyzer = writerAnalyzer;
}
/**
* Function: execute
* Description: 在本地数据库检索关键字,如果能找到记录则转向结果处理类,否则转到抽取网站数据类
* Calls: no
* Called By: no
* @param mapping as ActionMapping,form as ActionForm request as HttpServletRequest,response as HttpServletResponse
* @return ActionForward
* @throws Exception
*/
public ActionForward execute (ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)throws Exception{
String temKeyword = URLDecoder.decode(request.getParameter("keyword"), "utf-8");
String temSearchKind = request.getParameter("searchkind");
if(null == temKeyword&&temSearchKind == null){
/*从form中取出搜索关键字*/
SearchActionForm searchActionForm = (SearchActionForm)form;
this.keyword = searchActionForm.getKeyword().trim();
this.searchKind = searchActionForm.getSearchkind().trim();
}else{
this.keyword = temKeyword;
this.searchKind = temSearchKind;
}
request.getSession().setAttribute("beginTime", System.currentTimeMillis());
/*进行一些初始化工作*/
this.webInit();
// this.dailySaveDao.updateDaily("java", "dangdang", "http://www.dangdang.com");
// this.dailySaveDao.updateDaily("java", 5, false);
// this.dailySaveDao.updateDaily("java");
//this.dailyLoadDao.isFirstVisit(request.getSession().getCreationTime(), this.sessionBean.getKeyword());
// Price price = new Price();
// price.setBookschinaDiscount((float) 0.88);
// price.setBookschinaPrice((float) 2345600);
// price.setBookschinaUrl("http://www.bookschina.com/1377769.htms");
// Book book = new Book();
// book.setBookAuthor("Bruce");
// book.setBookName("编程思想");
// book.setBookISBN("7121022095");
// book.setBookPublishTime("2007-06-01");
// book.setBookPublisher("机械工业出版社");
// book.setBookImage("http://www.bookschina.com/cover1/2006/060629/s1377769.jpg");
// book.setBookFixPrice((float) 6060.108);
// book.setPrice(price);
//
// this.bookSaveDao.addBook(book);
// this.dailySaveDao.updateDaily(keyword, "dangdang", "www.dangdang.com");
// // this.dailyLoadDao.loadNextPageUrl(keyword);
// this.bookLoadDao.loadBook(keyword, 7);
// this.bookLoadDao.loadBook("清华大学出版社", "all", 1, "bookFixPrice");
// System.out.println(this.dailyLoadDao.isKeywordExist("null+null+null+清华出版社+null+null+null+null+null+null"));
// request.setAttribute("isAdvancedSearch", false);
// request.setAttribute("keyword", keyword);
// System.out.println(this.bookSaveDao.isExist("9787111213826"));
// return mapping.findForward("index");
/*到本地数据库查询是否有匹配记录*/
recordNum = this.bookLoadDao.loadBookNum(keyword,searchKind);
/*如果本地数据库中检索到了相关的内容,则转向结果处理类,否则转到抽取网站数据类*/
if(recordNum>0){
/*设置为是否从数据库中检索出的结果标志为true*/
this.sessionBean.setFromDatabase(true);
this.sessionBean.setHasupdate(true);
/*匹配记录数为数据库中查找到的记录数*/
this.sessionBean.setRecordNum(recordNum);
/*添加日志信息*/
if(!this.dailyLoadDao.isKeywordExist(keyword))
this.addDaily(request,recordNum,1);
else
this.dailySaveDao.updateDaily(this.keyword,recordNum,true);
return mapping.findForward("page");
/*如果本地数据库中无匹配记录,则去网站上抓取*/
}else{
/*设置为是否从数据库中检索出的结果标志为false*/
this.sessionBean.setFromDatabase(false);
/*添加日志信息*/
if(!this.dailyLoadDao.isKeywordExist(keyword))
this.addDaily(request,0,1);
else
this.dailySaveDao.updateDaily(this.keyword, recordNum,true);
request.setAttribute("keyword", keyword);
return mapping.findForward("crampData");
}
}
/**
* Function: webInit
* Description: 初始化session级bean
* Calls: no
* Called By: this.execute()
* @param no
* @return void
* @throws no
*/
private void webInit(){
this.sessionBean.initList();
this.sessionBean.setRecordNum(0);
this.sessionBean.setHasupdate(false);
this.sessionBean.setRankKind("relavancy");
//this.sessionBean.setAdvancedSearch(false);
this.sessionBean.setSearchKind(searchKind);
String splitKeyword = this.keyword;
if(this.keyword.indexOf(" ")!=-1){
StringTokenizer st = new StringTokenizer(this.keyword, " ");
while(st.hasMoreElements()){
splitKeyword += "/"+st.nextToken().trim();
}
}
if(keyword.length()>2&&("all".equals(searchKind)||"name".equals(searchKind))){
try {
TokenStream ts = this.writerAnalyzer.tokenStream("", new StringReader(this.keyword));
Token token ;
while ((token = ts.next()) != null) {
splitKeyword += "/"+token.toString().substring(1, token.toString().indexOf(",")).trim();
}
}catch (Exception e) {
e.printStackTrace();
Logger logger = Logger.getLogger(this.getClass());
logger.error(e + "==========" + "庖丁解牛分词出错" + "==========");
//System.out.println("poading error");
}
}
if(null != splitKeyword){
this.sessionBean.setKeyword(splitKeyword);
}
System.out.println(this.sessionBean.getKeyword());
}
/**
* Function: addDaily
* Description: 在本地数据库检索关键字,如果能找到记录则转向结果处理类,否则转到抽取网站数据类
* Calls: no
* Called By: this.execute()
* @param request as HttpServletRequest,recordNum as long, visitNum as long
* @return void
* @throws no
*/
private void addDaily(HttpServletRequest request,long recordNum,long visitNum){
Daily daily = new Daily();
String remoteAddr = request.getRemoteAddr();
HttpSession session = ((HttpServletRequest)request).getSession();
String sessionId = session.getId();
Long visitTime = session.getCreationTime();
daily.setRemoteAddr(remoteAddr);
daily.setKeyword(keyword);
daily.setSearchKind(searchKind);
daily.setSessionId(sessionId);
daily.setVisitTime(visitTime);
daily.setVisitNum(visitNum);
daily.setRecordNum(recordNum);
this.dailySaveDao.addDaily(daily);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -