用Cookie实现简单的搜索引擎界面

一个搜索引擎界面的例子,在这个Servlet中,用户界面是动态生成而不是由静态HTML文件提供的。Servlet除了负责读取表单数据并把它们发送给搜索引擎之外,还要把包含表单数据的Cookie发送给客户端。以后客户再次访问同一表单时,这些 Cookie的值将用来预先填充表单,使表单自动显示最近使用过的数据。

   SearchEnginesFrontEnd.java

   该Servlet构造一个主要由表单构成的用户界面。第一次显示的时候,它和静态HTML页面提供的界面差不多。然而,用户选择的值将被保存到 Cookie(本页面将数据发送到CustomizedSearchEngines Servlet,由后者设置Cookie)。用户以后再访问同一页面时,即使浏览器是退出之后再启动,表单中也会自动填好上一次搜索所填写的内容。

   注意该Servlet用到了ServletUtilities.java,其中getCookieValue()方法可以获取指定名字的Cookie值,headWithTitle 用于生成HTML页面的一部分。LongLiveCookie类,作用是用来创建作废期限很长的Cookie。

package com.test.qian.zui;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
/**    
 * 用Cookie实现简单的搜索引擎界面   
 *     
 * @author 千醉  JAVA新手菜鸟群 32413139    
 *     
 */ 
public class SearchEnginesFrontEnd extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Cookie[] cookies = request.getCookies();
		String searchString = getCookieValue(cookies, "searchString",
				"Java Programming");
		String numResults = getCookieValue(cookies, "numResults", "10");
		String searchEngine = getCookieValue(cookies, "searchEngine", "google");
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String title = "Searching the Web";
		out.println("<BODY BGCOLOR=\"#FDF5E6\">\n"
				+ "<H1 ALIGN=\"CENTER\">Searching the Web</H1>\n" + "\n"
				+ "<FORM ACTION=\"/servlet/hall.CustomizedSearchEngines\">\n"
				+ "<CENTER>\n" + "Search String:\n"
				+ "<INPUT TYPE=\"TEXT\" NAME=\"searchString\"\n" + " VALUE=\""
				+ searchString
				+ "\"><BR>\n"
				+ "Results to Show Per Page:\n"
				+ "<INPUT TYPE=\"TEXT\" NAME=\"numResults\"\n"
				+ " VALUE="
				+ numResults
				+ " SIZE=3><BR>\n"
				+ "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n"
				+ " VALUE=\"google\""
				+ checked("google", searchEngine)
				+ ">\n"
				+ "Google |\n"
				+ "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n"
				+ " VALUE=\"infoseek\""
				+ checked("infoseek", searchEngine)
				+ ">\n"
				+ "Infoseek |\n"
				+ "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n"
				+ " VALUE=\"lycos\""
				+ checked("lycos", searchEngine)
				+ ">\n"
				+ "Lycos |\n"
				+ "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n"
				+ " VALUE=\"hotbot\""
				+ checked("hotbot", searchEngine)
				+ ">\n"
				+ "HotBot\n"
				+ "<BR>\n"
				+ "<INPUT TYPE=\"SUBMIT\" VALUE=\"Search\">\n"
				+ "</CENTER>\n"
				+ "</FORM>\n" + "\n" + "</BODY>\n" + "</HTML>\n");
	}

	private String checked(String name1, String name2) {
		if (name1.equals(name2))
			return (" CHECKED");
		else
			return ("");
	}

	public String getCookieValue(Cookie[] cookies, String cookieName,
			String defaultValue) {
		for (int i = 0; i < cookies.length; i++) {
			Cookie cookie = cookies[i];
			if (cookieName.equals(cookie.getName()))
				return (cookie.getValue());
		}
		return (defaultValue);
	}

}



CustomizedSearchEngines.java

   前面的SearchEnginesFrontEnd Servlet把数据发送到CustomizedSearchEngines Servlet,下面例子除了要构造一个针对搜索引擎的URL并向用户发送一个重定向应答之外,还要发送保存用户数据的Cookies。

package com.test.qian.zui;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
/**    
 * 用Cookie实现简单的搜索引擎界面    
 *     
 * @author 千醉  JAVA新手菜鸟群 32413139    
 *     
 */ 
public class CustomizedSearchEngines extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String searchString = request.getParameter("searchString");
		Cookie searchStringCookie = new LongLivedCookie("searchString",
				searchString);
		response.addCookie(searchStringCookie);
		// searchString = URLEncoder.encode(searchString);

		String numResults = request.getParameter("numResults");
		Cookie numResultsCookie = new LongLivedCookie("numResults", numResults);
		response.addCookie(numResultsCookie);
		String searchEngine = request.getParameter("searchEngine");
		Cookie searchEngineCookie = new LongLivedCookie("searchEngine",
				searchEngine);
		response.addCookie(searchEngineCookie);
		String url = request.getContextPath() + "/index.jsp";
		url = response.encodeRedirectURL(url);

		// 这里用这个url代替了google搜索
		response.sendRedirect(url);

	}

}


这个应用的运行图:(用户的输入数据浏览器下次启动时将会保留)

你可能感兴趣的:(java,浏览器,搜索引擎,servlet,Google)