www.pudn.com > 33_online_store.rar > HTMLSearchServlet.java


package shopcart.servlets;

import java.io.*;
import java.util.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import DebugLog;
import LogServer;

import index.*;

public class HTMLSearchServlet extends HttpServlet
{
	protected DebugLog logger;
	protected String noIndexPage;
	protected String helpPage;
    protected String contextPath;
	
	protected static final int DEFAULT_MAX_HITS=25;
	
	public static final String QUERY_FIELD_NAME="query";
	public static final String MAX_FIELD_NAME="maxhits";
	public static final String CURRENT_FIELD_NAME="hitstart";
	public static final String SUBMIT_FIELD_NAME="submit";
	public static final String HELP_NAME="help";
	
    public void init(ServletConfig config)
    throws ServletException
    {
    	super.init(config);
	
    	String logFile,logServer;
    	String updateIntervalString;
    	long updateInterval;
    
        logger = DebugLog.getSharedLog();
    
        logFile = getInitParameter("logfile");
        logServer = getInitParameter("logserver");
        helpPage = getInitParameter("helppage");
        noIndexPage = getInitParameter("noindexpage");
        updateIntervalString = getInitParameter("updateinterval");
        contextPath = getInitParameter("contextpath");
    
        if(updateIntervalString != null)
        {
            try
            {
                updateInterval = Long.parseLong(updateIntervalString);
                IndexManager.updateInterval = updateInterval;
            }
            catch(Exception exp)
            {
            }
        }
        
        if((logFile != null)||(logServer != null))
        {
        
            //Index builder uses the same log
        
            synchronized(logger)
            {
                if(!logger.initialized())
                {
                    if(logServer != null)
                    {
                        logger.logTo(logServer);
                    }
                    else
                    {
                        logger.logTo(new File(logFile));
                    }
                }
            }
        }
    }
    
	
    public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
    throws IOException
    {
        String requestType;
    
        requestType = request.getParameter(SUBMIT_FIELD_NAME);
    
        if((requestType != null)
            &&(requestType.equalsIgnoreCase(HELP_NAME)))
        {
            logger.log("Got help request");
        
            if(helpPage != null)
                response.sendRedirect(helpPage);
            else
                response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
        }
        else//null is the same as do query
        {
            handleQuery(request,response);
        }
    }
	
    protected void handleQuery(HttpServletRequest request,
                                HttpServletResponse response)
    throws IOException
    {
        HTMLIndex index;
        String query;
        Vector results;
        int i,max,resultCount=0;
        String maxString;
        int maxHits = DEFAULT_MAX_HITS;
        String curHitStartString;
        int curHitStart=0;
        PrintWriter writer;
        String dir,fullDir;
        String curFileName=null;
        String myURL;
    
        dir = request.getPathInfo();
	    fullDir = request.getPathTranslated();
        
    	response.setContentType("text/html");
    
        writer = response.getWriter();
        query = request.getParameter(QUERY_FIELD_NAME);
        maxString = request.getParameter(MAX_FIELD_NAME);
        curHitStartString = request.getParameter(CURRENT_FIELD_NAME);
    
        myURL = request.getRequestURL().toString();
    
        if(maxString != null)
        {
            try
            {
                maxHits = Integer.parseInt(maxString);
            }
            catch(Exception exp)
            {
                maxHits = DEFAULT_MAX_HITS;
            }
        }
    
        if(curHitStartString != null)
        {
            try
            {
                curHitStart = Integer.parseInt(curHitStartString);
            }
            catch(Exception exp)
            {
                curHitStart = 0;
            }
        }
        
        if(contextPath != null) dir+=contextPath;
        
        logger.log("Requesting index for: "+dir+" fulldir: "+fullDir);

        index = IndexManager.indexForDirectory(fullDir,dir);
    
        if(index == null)
        {
            logger.log("Index not available for: "+fullDir);
        
            if(noIndexPage != null)
                response.sendRedirect(noIndexPage);
            else
                response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
        }
        else
        {
            results = index.filesForQuery(query);

    	    if(results != null) resultCount = results.size();

            logger.log("Got "+resultCount+" results for query: "+query);
        
    	    writer.println("");
    	    writer.println("");
    	    writer.println("");
    	    writer.println("Search Results");
    	    writer.println("");
    	    writer.println("");
    	    writer.println("");
    
    	    writer.println("
"); writer.println(""); writer.println(""); writer.println(""); writer.println(""); writer.println("
"); if(resultCount > 0) { writer.println("

Your search results are:

"); max = Math.min(resultCount-curHitStart ,maxHits); //inc printout by one to make it 1-25 not 0-25 writer.println("
"+(curHitStart+1)+"-"+(curHitStart+max) +" of "+resultCount+" matches
"); outputHitsNavigator(maxHits,curHitStart,resultCount ,query,myURL,writer); writer.println("
"); try { for(i=0;i"); outputHitsNavigator(maxHits,curHitStart,resultCount ,query,myURL,writer); } else { writer.println("

No files matched your query.

"); } writer.println("
"); writer.println("
"); writer.println(""); writer.println(""); } } protected void outputFile(String file,String dir,PrintWriter w) { String fileName = file.substring(dir.length()); w.print(""); w.print(fileName.replace('\\','/')); w.println("
"); } protected void outputHitsNavigator(int maxHits,int current ,int curMax,String query ,String url,PrintWriter w) { boolean needPrev,needNext; int prev,next; if(curMax>maxHits) { needPrev = (current != 0); needNext = ((current+maxHits)"); if(needPrev) { w.print("<prev "); } else { w.print(""); w.print("<prev "); w.println(""); } if(needNext) { w.print("next>"); } else { w.print(""); w.print("next>"); w.println(""); } w.println(""); } } }