用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);

}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值