📄 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("<HTML>"); writer.println("<HEAD>"); writer.println("<TITLE>"); writer.println("Search Results"); writer.println("</TITLE>"); writer.println("</HEAD>"); writer.println("<BODY TEXT=\"#000000\" BGCOLOR=\"#FFFFFF\"" +" LINK=\"#0000EE\" VLINK=\"#551A8B\"" +" ALINK=\"#FF0000\">"); writer.println("<CENTER>"); writer.println("<TABLE>"); writer.println("<TR>"); writer.println("<TD>"); if(resultCount > 0) { writer.println("<H1>Your search results are:</H1>"); max = Math.min(resultCount-curHitStart ,maxHits); //inc printout by one to make it 1-25 not 0-25 writer.println("<CENTER>"+(curHitStart+1)+"-"+(curHitStart+max) +" of "+resultCount+" matches</CENTER>"); outputHitsNavigator(maxHits,curHitStart,resultCount ,query,myURL,writer); writer.println("<BLOCKQUOTE>"); try { for(i=0;i<max;i++) { curFileName = (String) results.elementAt(curHitStart+i); outputFile(curFileName,dir,writer); } } catch(Exception exp) { logger.log("Bad file name: "+curFileName); } writer.println("</BLOCKQUOTE>"); outputHitsNavigator(maxHits,curHitStart,resultCount ,query,myURL,writer); } else { writer.println("<H1>No files matched your query.</H1>"); } writer.println("</TD>"); writer.println("</TR>"); writer.println("</TABLE>"); writer.println("</CENTER>"); writer.println("</BODY>"); writer.println("</HTML>"); } } protected void outputFile(String file,String dir,PrintWriter w) { String fileName = file.substring(dir.length()); w.print("<A HREF=\""); w.print(file.replace('\\','/'));//make sure the URL is valid w.print("\">"); w.print(fileName.replace('\\','/')); w.println("</A><BR>"); } 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)<curMax); w.println("<CENTER>"); if(needPrev) { w.print("<A HREF=\""); w.print(url); w.print("?"); w.print(QUERY_FIELD_NAME); w.print("="); w.print(URLEncoder.encode(query)); w.print("&"); w.print(MAX_FIELD_NAME); w.print("="); w.print(maxHits); w.print("&"); w.print(CURRENT_FIELD_NAME); w.print("="); prev = (current-maxHits); w.print(prev); w.println("\"><prev</A> "); } else { w.print("<FONT COLOR=\"#777777\">"); w.print("<prev "); w.println("</FONT>"); } if(needNext) { w.print("<A HREF=\""); w.print(url); w.print("?"); w.print(QUERY_FIELD_NAME); w.print("="); w.print(URLEncoder.encode(query)); w.print("&"); w.print(MAX_FIELD_NAME); w.print("="); w.print(maxHits); w.print("&"); w.print(CURRENT_FIELD_NAME); w.print("="); next = (current+maxHits); w.print(next); w.println("\">next></A>"); } else { w.print("<FONT COLOR=\"#777777\">"); w.print("next>"); w.println("</FONT>"); } w.println("</CENTER>"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -