⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advancedsearchaction.java

📁 本系统实现了从五个网站上搜索的图书进行整合后
💻 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 + -