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("");
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(" ");
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("");
}
}
}