📄 41.html
字号:
<br>
<br>
<br>
<br>
9.4.实例:定制的搜索引擎界面 <br>
<br>
下面也是一个搜索引擎界面的例子,通过修改前面HTTP状态代码的例子得到。在这个Servlet中,用户界面是动态生成而不是由静态HTML文件提供的。Servlet除了负责读取表单数据并把它们发送给搜索引擎之外,还要把包含表单数据的Cookie发送给客户端。以后客户再次访问同一表单时,这些Cookie的值将用来预先填充表单,使表单自动显示最近使用过的数据。 <br>
<br>
SearchEnginesFrontEnd.java <br>
<br>
该Servlet构造一个主要由表单构成的用户界面。第一次显示的时候,它和前面用静态HTML页面提供的界面差不多。然而,用户选择的值将被保存到Cookie(本页面将数据发送到CustomizedSearchEngines Servlet,由后者设置Cookie)。用户以后再访问同一页面时,即使浏览器是退出之后再启动,表单中也会自动填好上一次搜索所填写的内容。 <br>
<br>
注意该Servlet用到了ServletUtilities.java,其中getCookieValue前面已经介绍过,headWithTitle用于生成HTML页面的一部分。另外,这里也用到了前面已经说明的LongLiveCookie类,我们用它来创建作废期限很长的Cookie。 <br>
package hall;<br>
<br>
import java.io.*;<br>
import javax.servlet.*;<br>
import javax.servlet.http.*;<br>
import java.net.*;<br>
<br>
public class SearchEnginesFrontEnd extends HttpServlet {<br>
public void doGet(HttpServletRequest request,<br>
HttpServletResponse response)<br>
throws ServletException, IOException {<br>
Cookie[] cookies = request.getCookies();<br>
String searchString =<br>
ServletUtilities.getCookieValue(cookies,<br>
"searchString",<br>
"Java Programming");<br>
String numResults =<br>
ServletUtilities.getCookieValue(cookies,<br>
"numResults",<br>
"10");<br>
String searchEngine =<br>
ServletUtilities.getCookieValue(cookies,<br>
"searchEngine",<br>
"google");<br>
response.setContentType("text/html");<br>
PrintWriter out = response.getWriter();<br>
String title = "Searching the Web";<br>
out.println(ServletUtilities.headWithTitle(title) +<br>
"<BODY BGCOLOR=\"#FDF5E6\">\n" +<br>
"<H1 ALIGN=\"CENTER\">Searching the Web</H1>\n" +<br>
"\n" +<br>
"<FORM ACTION=\"/servlet/hall.CustomizedSearchEngines\">\n" +<br>
"<CENTER>\n" +<br>
"Search String:\n" +<br>
"<INPUT TYPE=\"TEXT\" NAME=\"searchString\"\n" +<br>
" VALUE=\"" + searchString + "\"><BR>\n" +<br>
"Results to Show Per Page:\n" +<br>
"<INPUT TYPE=\"TEXT\" NAME=\"numResults\"\n" + <br>
" VALUE=" + numResults + " SIZE=3><BR>\n" +<br>
"<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" +<br>
" VALUE=\"google\"" +<br>
checked("google", searchEngine) + ">\n" +<br>
"Google |\n" +<br>
"<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" +<br>
" VALUE=\"infoseek\"" +<br>
checked("infoseek", searchEngine) + ">\n" +<br>
"Infoseek |\n" +<br>
"<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" +<br>
" VALUE=\"lycos\"" +<br>
checked("lycos", searchEngine) + ">\n" +<br>
"Lycos |\n" +<br>
"<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" +<br>
" VALUE=\"hotbot\"" +<br>
checked("hotbot", searchEngine) + ">\n" +<br>
"HotBot\n" +<br>
"<BR>\n" +<br>
"<INPUT TYPE=\"SUBMIT\" VALUE=\"Search\">\n" +<br>
"</CENTER>\n" +<br>
"</FORM>\n" +<br>
"\n" +<br>
"</BODY>\n" +<br>
"</HTML>\n");<br>
}<br>
<br>
private String checked(String name1, String name2) {<br>
if (name1.equals(name2))<br>
return(" CHECKED");<br>
else<br>
return("");<br>
}<br>
}<br>
<br>
<br>
<br>
<br>
CustomizedSearchEngines.java <br>
<br>
前面的SearchEnginesFrontEnd Servlet把数据发送到CustomizedSearchEngines Servlet。本例在许多方面与前面介绍HTTP状态代码时的例子相似,区别在于,本例除了要构造一个针对搜索引擎的URL并向用户发送一个重定向应答之外,还要发送保存用户数据的Cookies。 <br>
package hall;<br>
<br>
import java.io.*;<br>
import javax.servlet.*;<br>
import javax.servlet.http.*;<br>
import java.net.*;<br>
<br>
public class CustomizedSearchEngines extends HttpServlet {<br>
public void doGet(HttpServletRequest request,<br>
HttpServletResponse response)<br>
throws ServletException, IOException {<br>
<br>
String searchString = request.getParameter("searchString");<br>
Cookie searchStringCookie =<br>
new LongLivedCookie("searchString", searchString);<br>
response.addCookie(searchStringCookie);<br>
searchString = URLEncoder.encode(searchString);<br>
String numResults = request.getParameter("numResults");<br>
Cookie numResultsCookie =<br>
new LongLivedCookie("numResults", numResults);<br>
response.addCookie(numResultsCookie);<br>
String searchEngine = request.getParameter("searchEngine");<br>
Cookie searchEngineCookie =<br>
new LongLivedCookie("searchEngine", searchEngine);<br>
response.addCookie(searchEngineCookie);<br>
SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs();<br>
for(int i=0; i<commonSpecs.length; i++) {<br>
SearchSpec searchSpec = commonSpecs[i];<br>
if (searchSpec.getName().equals(searchEngine)) {<br>
String url =<br>
searchSpec.makeURL(searchString, numResults);<br>
response.sendRedirect(url);<br>
return;<br>
}<br>
}<br>
response.sendError(response.SC_NOT_FOUND,<br>
"No recognized search engine specified.");<br>
}<br>
<br>
public void doPost(HttpServletRequest request,<br>
HttpServletResponse response)<br>
throws ServletException, IOException {<br>
doGet(request, response);<br>
}<br>
}<br>
<br>
<br>
</td>
</tr>
<tr><td colspan=2 align=right class=t> <a href="http://www.chinajavaworld.com/doc/servlet-jsp/32.html" ></a> <a href="40.html" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/40.html" ></a> <a href="42.html" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/42.html" ></a> </td></tr>
</td>
</tr>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -