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

📄 searchaction.java

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