📄 advancedsearchaction.java
字号:
package com.booksearch.action;
/************************************************************
FileName: AdvancedSearchAction.java
Author: fengguang
Date:11/29/08
Description: 在本地数据库中查找是否有匹配记录,如果有,则转到数据处理类,否则,转到抽取网站内容的action
Class List: SearchAction
***********************************************************/
import java.io.StringReader;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.booksearch.actionform.AdvancedSearchForm;
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.dao.BookLoadDao;
import com.booksearch.dao.DailyLoadDao;
import com.booksearch.dao.DailySaveDao;
import com.booksearch.orm.Daily;
import com.booksearch.util.SessionBean;
/**
* Class:SearchAction
* Description: 在本地数据库中查找是否有匹配记录,如果有,则转到数据处理类,否则,转到抽取网站内容的action
* extens:Action
* @author feng guang
* @since 11/29/08
*/
public class AdvancedSearchAction extends Action {
private String keyword;
private String searchKind;
private long matchRecord;
private BookLoadDao bookLoadDao;
private SessionBean sessionBean;
private DailyLoadDao dailyLoadDao;
private DailySaveDao dailySaveDao;
private Analyzer writerAnalyzer;
public void setBookLoadDao(BookLoadDao bookLoadDao) {
this.bookLoadDao = bookLoadDao;
}
public void setDailyLoadDao(DailyLoadDao dailyLoadDao) {
this.dailyLoadDao = dailyLoadDao;
}
public void setDailySaveDao(DailySaveDao dailySaveDao) {
this.dailySaveDao = dailySaveDao;
}
public void setSessionBean(SessionBean sessionBean) {
this.sessionBean = sessionBean;
}
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) {
AdvancedSearchForm adform = (AdvancedSearchForm) form;
request.getSession().setAttribute("beginTime", System.currentTimeMillis());
// System.out.println("<" + adform.getBookAuthor() + ">"
// + "<" + adform.getBookISBN() + ">"
// + "<" + adform.getBookName() + ">"
// + "<" + adform.getBookPublisher() + ">"
// + "<" + adform.getMaxPrice() + ">"
// + "<" + adform.getMinPrice() + ">"
// + "<" + adform.getPublishDownMonth() + ">"
// + "<" + adform.getPublishDownYear() + ">"
// + "<" + adform.getPublishUpMonth() + ">"
// + "<" + adform.getPublishUpYear() + ">");
if((!"".equals(adform.getBookName())&&null != adform.getBookName())
&&("".equals(adform.getBookAuthor())||null == adform.getBookAuthor())
&&("".equals(adform.getBookISBN())||null == adform.getBookISBN())
&&("".equals(adform.getBookPublisher())||null == adform.getBookPublisher())
&&("".equals(adform.getPublishUpYear())||null == adform.getPublishUpYear())
&&("".equals(adform.getPublishUpMonth())||null == adform.getPublishUpMonth())
&&("".equals(adform.getPublishDownYear())||null == adform.getPublishDownYear())
&&("".equals(adform.getPublishDownMonth())||null == adform.getPublishDownMonth())
&&("0.00".equals(adform.getMinPrice())||null == adform.getMinPrice())
&&("0.00".equals(adform.getMaxPrice())||null == adform.getMaxPrice())){
this.keyword = adform.getBookName();
this.searchKind = "name";
System.out.println(keyword);
}else if(("".equals(adform.getBookName())||null == adform.getBookName())
&&(!"".equals(adform.getBookAuthor())&&null != adform.getBookAuthor())
&&("".equals(adform.getBookISBN())||null == adform.getBookISBN())
&&("".equals(adform.getBookPublisher())||null == adform.getBookPublisher())
&&("".equals(adform.getPublishUpYear())||null == adform.getPublishUpYear())
&&("".equals(adform.getPublishUpMonth())||null == adform.getPublishUpMonth())
&&("".equals(adform.getPublishDownYear())||null == adform.getPublishDownYear())
&&("".equals(adform.getPublishDownMonth())||null == adform.getPublishDownMonth())
&&("0.00".equals(adform.getMinPrice())||null == adform.getMinPrice())
&&("0.00".equals(adform.getMaxPrice())||null == adform.getMaxPrice())){
this.keyword = adform.getBookAuthor();
this.searchKind = "author";
}else if(("".equals(adform.getBookName())||null == adform.getBookName())
&&("".equals(adform.getBookAuthor())||null == adform.getBookAuthor())
&&("".equals(adform.getBookISBN())||null == adform.getBookISBN())
&&(!"".equals(adform.getBookPublisher())&&null != adform.getBookPublisher())
&&("".equals(adform.getPublishUpYear())||null == adform.getPublishUpYear())
&&("".equals(adform.getPublishUpMonth())||null == adform.getPublishUpMonth())
&&("".equals(adform.getPublishDownYear())||null == adform.getPublishDownYear())
&&("".equals(adform.getPublishDownMonth())||null == adform.getPublishDownMonth())
&&("0.00".equals(adform.getMinPrice())||null == adform.getMinPrice())
&&("0.00".equals(adform.getMaxPrice())||null == adform.getMaxPrice())){
this.keyword = adform.getBookPublisher();
this.searchKind = "publisher";
}else{
if(!"".equals(adform.getBookName())&&null != adform.getBookName())
this.keyword = adform.getBookName().replace("+", "%20");
else this.keyword = "null";
if(!"".equals(adform.getBookAuthor())&&null != adform.getBookAuthor())
this.keyword += "+"+adform.getBookAuthor().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getBookISBN())&&null != adform.getBookISBN())
this.keyword += "+"+adform.getBookISBN().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getBookPublisher())&&null != adform.getBookPublisher())
this.keyword += "+"+adform.getBookPublisher().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getPublishUpYear())&&null != adform.getPublishUpYear())
this.keyword += "+"+adform.getPublishUpYear().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getPublishUpMonth())&&null != adform.getPublishUpMonth())
this.keyword += "+"+adform.getPublishUpMonth().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getPublishDownYear())&&null != adform.getPublishDownYear())
this.keyword += "+"+adform.getPublishDownYear().replace("+", "%20");
else this.keyword += "+null";
if(!"".equals(adform.getPublishDownMonth())&&null != adform.getPublishDownMonth())
this.keyword += "+"+adform.getPublishDownMonth().replace("+", "%20");
else this.keyword += "+null";
if(!"0.00".equals(adform.getMinPrice())&&null != adform.getMinPrice())
this.keyword += "+"+adform.getMinPrice().replace("+", "%20");
else this.keyword += "+null";
if(!"0.00".equals(adform.getMaxPrice())&&null != adform.getMaxPrice())
this.keyword += "+"+adform.getMaxPrice().replace("+", "%20");
else this.keyword += "+null";
this.searchKind = "advanced";
}
/*进行一些初始化工作*/
this.webInit();
if("advanced".equals(this.searchKind))
this.matchRecord = this.bookLoadDao.loadAdvancedBookNum(keyword);
else
this.matchRecord = this.bookLoadDao.loadBookNum(keyword, searchKind);
/*如果本地数据库中检索到了相关的内容,则转向结果处理类,否则转到抽取网站数据类*/
if(matchRecord>0){
/*设置为是否从数据库中检索出的结果标志为true*/
this.sessionBean.setFromDatabase(true);
/**/
this.sessionBean.setRecordNum(matchRecord);
/*添加日志信息*/
if(!this.dailyLoadDao.isKeywordExist(keyword))
this.addDaily(request,matchRecord,1);
else
this.dailySaveDao.updateDaily(keyword, matchRecord,true);
return mapping.findForward("page");
/*如果本地数据库中无匹配记录,则去网站上抓取*/
}else{
/*添加日志信息*/
if(!this.dailyLoadDao.isKeywordExist(keyword))
this.addDaily(request,0,1);
else
this.dailySaveDao.updateDaily(keyword, matchRecord,true);
/*设置为是否从数据库中检索出的结果标志为false*/
this.sessionBean.setFromDatabase(false);
request.setAttribute("keyword", keyword);
return mapping.findForward("dataCramp");
}
}
/**
* 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.setKeyword(keyword);
this.sessionBean.setSearchKind(this.searchKind);
this.sessionBean.setRecordNum(0);
this.sessionBean.setHasupdate(false);
this.sessionBean.setRankKind("relavancy");
String splitKeyword = this.keyword;
if(!"advanced".equals(this.searchKind)){
if(this.keyword.indexOf(" ")!=-1){
StringTokenizer st = new StringTokenizer(this.keyword, " ");
while(st.hasMoreElements()){
splitKeyword += "/"+st.nextToken().trim();
}
}
/*如果查询类别是全部或书名则对关键字进行分词*/
if(keyword.length()>2&&"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(this.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 + -