?? searchaction.java
字號:
package com.booksearch.action;
/************************************************************
FileName: SearchAction.java
Author: fengguang
Date:11/16/08
Description: 在本地?cái)?shù)據(jù)庫中查找是否有匹配記錄,如果有,則轉(zhuǎn)到數(shù)據(jù)處理類,否則,轉(zhuǎn)到抽取網(wǎng)站內(nèi)容的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: 在本地?cái)?shù)據(jù)庫中查找是否有匹配記錄,如果有,則轉(zhuǎn)到數(shù)據(jù)處理類,否則,轉(zhuǎn)到抽取網(wǎng)站內(nèi)容的action
* extens:Action
* @author feng guang
* @since 11/16/08
*/
public class SearchAction extends Action {
/*檢索關(guān)鍵字*/
private String keyword;
private String searchKind;
/*數(shù)據(jù)庫中匹配記錄數(shù)*/
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: 在本地?cái)?shù)據(jù)庫檢索關(guān)鍵字,如果能找到記錄則轉(zhuǎn)向結(jié)果處理類,否則轉(zhuǎn)到抽取網(wǎng)站數(shù)據(jù)類
* 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中取出搜索關(guān)鍵字*/
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());
/*進(jìn)行一些初始化工作*/
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("機(jī)械工業(yè)出版社");
// 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("清華大學(xué)出版社", "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");
/*到本地?cái)?shù)據(jù)庫查詢是否有匹配記錄*/
recordNum = this.bookLoadDao.loadBookNum(keyword,searchKind);
/*如果本地?cái)?shù)據(jù)庫中檢索到了相關(guān)的內(nèi)容,則轉(zhuǎn)向結(jié)果處理類,否則轉(zhuǎn)到抽取網(wǎng)站數(shù)據(jù)類*/
if(recordNum>0){
/*設(shè)置為是否從數(shù)據(jù)庫中檢索出的結(jié)果標(biāo)志為true*/
this.sessionBean.setFromDatabase(true);
this.sessionBean.setHasupdate(true);
/*匹配記錄數(shù)為數(shù)據(jù)庫中查找到的記錄數(shù)*/
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");
/*如果本地?cái)?shù)據(jù)庫中無匹配記錄,則去網(wǎng)站上抓取*/
}else{
/*設(shè)置為是否從數(shù)據(jù)庫中檢索出的結(jié)果標(biāo)志為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: 在本地?cái)?shù)據(jù)庫檢索關(guān)鍵字,如果能找到記錄則轉(zhuǎn)向結(jié)果處理類,否則轉(zhuǎn)到抽取網(wǎng)站數(shù)據(jù)類
* 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);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -