package coreservlets;
  
  
import java.io.*;
  
import javax.servlet.*;
  
import javax.servlet.http.*;
  
import java.net.*;  
  
  
public class SearchEngines extends HttpServlet {
  
public void doGet(HttpServletRequest request,
  
HttpServletResponse response)
  
throws ServletException, IOException {
  
String searchString = request.getParameter("searchString");
  
if ((searchString == null) //
  
(searchString.length() == 0)) {
  
reportProblem(response, "Missing search string.");
  
return;
  
}
  
// The URLEncoder changes spaces to "+" signs and other
  
// non-alphanumeric characters to "%XY", where XY is the
  
// hex value of the ASCII (or ISO Latin-1) character.
  
// Browsers always URL-encode form values, so the
  
// getParameter method decodes automatically. But since
  
// we're just passing this on to another server, we need to
  
// re-encode it.
  
searchString = URLEncoder.encode(searchString);
  
String numResults = request.getParameter("numResults");
  
if ((numResults == null) //
  
(numResults.equals("0")) //
  
(numResults.length() == 0)) {
  
numResults = "10";
  
}
  
String searchEngine =
  
request.getParameter("searchEngine");
  
if (searchEngine == null) {
  
reportProblem(response, "Missing search engine name.");
  
return;
  
}
  
SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs();
  
for(int i=0; i<commonSpecs.length; i++) {
  
SearchSpec searchSpec = commonSpecs;
  
if (searchSpec.getName().equals(searchEngine)) {
  
String url =
  
searchSpec.makeURL(searchString, numResults);
  
response.sendRedirect(url);
  
return;
  
}
  
}
  
reportProblem(response, "Unrecognized search engine.");
  
}  
  
private void reportProblem(HttpServletResponse response,
  
String message)
  
throws IOException {
  
response.sendError(response.SC_NOT_FOUND,
  
"<H2>" + message + "</H2>");
  
}  
  
public void doPost(HttpServletRequest request,
  
HttpServletResponse response)
  
throws ServletException, IOException {
  
doGet(request, response);
  
}
  
}