Java Web学习笔记---用GET实现搜索引擎
今天做了一个实验,关于Servlet的.使用GET实现搜索引擎.因自己没有搜索引擎数据库,所以使用了Yahoo提供的Search API.
浏览效果如下图:
现在雅虎推出了新的Search API---BOSS Search API.把旧的也就是我现在用的API废弃了,导致搜索不到结果.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>search.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div align="center">
<img src="http://us.i1.yimg.com/us.yimg.com/i/yahoo.gif" alt="Yahoo!" width="147" height="31" border="0" style="margin: 25px; ">
<div>
<form action="/testServlet/servlet/SearchServlet" method="get">
<input type="radio" name="type" value="web" checked>网页
<input type="radio" name="type" value="news">新闻
<input type="radio" name="type" value="image">图片
<input type="radio" name="type" value="video">视频
<input type="checkbox" name="allowedAdult" value="true">允许成人内容 <br/><br/>
<input type="text" name="word" value="" style="width: 300px; ">
<input type="submit" value="用雅虎搜索" style="width: 100px; ">
</form>
</div>
<div style="margin-top: 50px; ">
© Helloxr 2016-2020
</div>
</div>
</body>
</html>
以上是search.html的代码
下面是Servlet的代码:
package com.helloxr.servlet; import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.yahoo.search.ImageSearchRequest;
import com.yahoo.search.ImageSearchResult;
import com.yahoo.search.ImageSearchResults;
import com.yahoo.search.NewsSearchRequest;
import com.yahoo.search.NewsSearchResult;
import com.yahoo.search.NewsSearchResults;
import com.yahoo.search.SearchClient;
import com.yahoo.search.VideoSearchRequest;
import com.yahoo.search.VideoSearchResult;
import com.yahoo.search.VideoSearchResults;
import com.yahoo.search.WebSearchRequest;
import com.yahoo.search.WebSearchResult;
import com.yahoo.search.WebSearchResults; public class SearchServlet extends HttpServlet { private static final long serialVersionUID = 98643567L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); String word = request.getParameter("word");
String type = request.getParameter("type");
String allowedAdult = request.getParameter("allowedAdult");
boolean adultOk = "true".equals(allowedAdult); // 是否允许成人内容checkbox的特性,若选中,则为"true",否则,为 null. PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>" + word + " 搜索结果</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<div style='float:left; heigt:40px; '><img src='http://us.i1.yimg.com/us.yimg.com/i/yahoo.gif'></div>");
out.println("<form action='" + request.getRequestURI() + "' method='get'>");
out.println(" <div style='height:40px; '>");
out.println(" <input type='radio' name='type' value='web' " + (type.equals("web")?"checked":"") + ">网页");
out.println(" <input type='radio' name='type' value='news' " + (type.equals("news")?"checked":"") + ">新闻");
out.println(" <input type='radio' name='type' value='image' " + (type.equals("image")?"checked":"") + ">图片");
out.println(" <input type='radio' name='type' value='video' " + (type.equals("video")?"checked":"") + ">视频");
out.println(" ");
out.println(" <input type='checkbox' name='allowedAdult' value='true' " + (adultOk?"checked":"" ) + ">允许成人内容 <br/>");
out.println(" <input type='text' name='word' value='" + word + "' style='width:300px; '> <input type='submit' value='用雅虎搜索' style='width:100px; '>");
out.println("</div>");
out.println("</form>"); SearchClient client = new SearchClient("javasdktest"); try{
if("image".equals(type)){
ImageSearchRequest searchRequest = new ImageSearchRequest(URLEncoder.encode(word, "UTF-8")); searchRequest.setAdultOk(adultOk);
searchRequest.setResults(20);
searchRequest.setStart(BigInteger.valueOf(0)); double startTime = System.currentTimeMillis();
ImageSearchResults results = client.imageSearch(searchRequest); double endTime = System.currentTimeMillis();
out.println("<div align=right style='width:100%; background:#FFDDDD; height:25px; padding:2px; border-top:1px; solid #FF9999; margin-bottom:5px; '>");
out.println(" 总共 " + results.getTotalResultsAvailable() + "条数据, 总用时 " + (endTime - startTime) / 1000 + " 秒. ");
out.println("</div>"); for(ImageSearchResult result : results.listResults()){
out.println("<div class='imgDiv'>");
out.println(" <div align='center'><a href='" + result.getClickUrl() + "' target=_blank><img width=160 height=120 src=\"" + result.getThumbnail().getUrl() + "\" border='0'></a></div>");
out.println(" <div align='center'><a href=\"" + result.getRefererUrl() + "\" target=_blank>" + result.getTitle() + "</a></div>");
out.println(" <div align='center'>" + result.getWidth() + "x" + result.getHeight() + " " + result.getFileFormat() + "</div>");
out.println(" <div>" + (result.getSummary() == null ? "" : result.getSummary()) + "</div>");
out.println("</div>");
}
}else if("web".equals(type)){
WebSearchRequest searchRequest = new WebSearchRequest(URLEncoder.encode(word, "UTF-8"));
// 是否显示成人内容
searchRequest.setAdultOk(adultOk);
// 查询记录数
searchRequest.setResults(20);
// 从第 0 条记录开始显示
searchRequest.setStart(BigInteger.valueOf(0)); double startTime = System.currentTimeMillis();
WebSearchResults results = client.webSearch(searchRequest);
double endTime = System.currentTimeMillis(); out.println("<div align=right style='width:100%; background: #FFDDDD; height:25px; padding:2px; border-top:1px solid #FF9999; margin-bottom:5px; '>");
out.println(" 总共 " + results.getTotalResultsAvailable() + " 条数据,总用时 " + ( endTime - startTime )/1000 + " 秒。");
out.println("</div>");
for(WebSearchResult result : results.listResults()){
out.println("<div style='margin:8px; width:500px; '>");
out.println(" <div><a href=\"" + result.getClickUrl() + "\" target=_blank><b>" + result.getTitle() + "</b></a> 文件格式:" + result.getMimeType() + "</div>");
out.println(" <div>网址:<a href=\"" + result.getUrl() + "\" target=_blank>" + result.getUrl() + "</a></div>");
out.println(" <div>" + result.getSummary() + (result.getCache()==null ? "" : " [<a href=\"" + result.getCache().getUrl() + "\" target=_blank>网页快照</a>]") +"</div>"); out.println("</div>");
}
}
else if("news".equals(type)){ NewsSearchRequest searchRequest = new NewsSearchRequest(URLEncoder.encode(word, "UTF-8"));
// 是否显示成人内容
// searchRequest.setAdultOk(adultOk);
// 查询记录数
searchRequest.setResults(20);
// 从第 0 条记录开始显示
searchRequest.setStart(BigInteger.valueOf(0)); double startTime = System.currentTimeMillis();
NewsSearchResults results = client.newsSearch(searchRequest);
double endTime = System.currentTimeMillis(); out.println("<div align=right style='width:100%; background: #FFDDDD; height:25px; padding:2px; border-top:1px solid #FF9999; margin-bottom:5px; '>");
out.println(" 总共 " + results.getTotalResultsAvailable() + " 条数据,总用时 " + ( endTime - startTime )/1000 + " 秒。");
out.println("</div>");
for(NewsSearchResult result : results.listResults()){
out.println("<div style='margin:8px; width:500px; '>");
out.println(" <div><a href=\"" + result.getClickUrl() + "\" target=_blank><b>" + result.getTitle() + "</b></a></div>");
out.println(" <div>网址:<a href=\"" + result.getUrl() + "\" target=_blank>" + result.getUrl() + "</a></div>");
out.println(" <div>" + result.getSummary() + "</div>");
out.println("</div>");
}
}
else if("video".equals(type)){
VideoSearchRequest searchRequest = new VideoSearchRequest(URLEncoder.encode(word, "UTF-8"));
// 是否显示成人内容
searchRequest.setAdultOk(adultOk);
// 查询记录数
searchRequest.setResults(20);
// 从第 0 条记录开始显示
searchRequest.setStart(BigInteger.valueOf(0)); double startTime = System.currentTimeMillis();
VideoSearchResults results = client.videoSearch(searchRequest);
double endTime = System.currentTimeMillis(); out.println("<div align=right style='width:100%; background: #FFDDDD; height:25px; padding:2px; border-top:1px solid #FF9999; margin-bottom:5px; '>");
out.println(" 总共 " + results.getTotalResultsAvailable() + " 条数据,总用时 " + ( endTime - startTime )/1000 + " 秒。");
out.println("</div>"); for(VideoSearchResult result : results.listResults()){
out.println("<div class='imgDiv'>");
out.println(" <div align='center'><a href=\"" + result.getClickUrl() + "\" target=_blank><img width=160 height=120 src=\"" + result.getThumbnail().getUrl() + "\" border='0'></a></div>");
out.println(" <div align='center'><a href=\"" + result.getRefererUrl() + "\" target=_blank>" + result.getTitle() + "</a></div>");
out.println(" <div align='center'>" + result.getWidth() + "x" + result.getHeight() + " " + result.getFileFormat() + "</div>");
out.println(" <div>" + (result.getSummary()==null ? "" : result.getSummary()) + "</div>");
out.println("</div>");
}
}
}catch(Exception e){
e.printStackTrace();
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
Java Web学习笔记---用GET实现搜索引擎的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- Java Web 学习笔记 1
Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
随机推荐
- Linux:常用命令
文件压缩.解压 网络.进程 磁盘.文件使用情况 内存使用 1.文件压缩.解压 1)tar.gz文件解压: .bin.tar.gz 解压到指定目录: (指定的目录是存在的) .bin. 2)zip 文件 ...
- Java线程并发:知识点
Java线程并发:知识点 发布:一个对象是使它能够被当前范围之外的代码所引用: 常见形式:将对象的的引用存储到公共静态域:非私有方法中返回引用:发布内部类实例,包含引用. 逃逸:在对象尚未准备 ...
- 实现CheckBox的三种选中状态(全选、半选、不选)在GridView中模拟树形的功能
度娘了很多帖子,只说三种状态要用图片替换来做,但没找到有用的例子,被逼自己写了一个 三方控件肯定是很多的,如jstree,可以直接用 由于公司的UDS限制,不能上传图片,只能文字说明了. 就是要在gr ...
- [数据科学] 从text, json文件中提取数据
文本文件是基本的文件类型,不管是csv, xls, json, 还是xml等等都可以按照文本文件的形式读取. #-*- coding: utf-8 -*- fpath = "data/tex ...
- VS2015 出现 .NETSystem.Runtime.Remoting.RemotingException: TCP 错误
错误内容: 界面显示内容为: .NET�������������System.Runtime.Remoting.RemotingException: TCP 淇¢亾鍗忚鍐茬獊: 搴斾负鎶ュご銆� 鍦 ...
- shell 脚本之 shell 练习题汇总
整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...
- [python]获取网页中内容为汉字的字符串的判断
实际上是这样,将获取到网页中表单内容与汉字字符串作比较,即: a = request.POST['a'] if a == '博客园': print 'ok' else: print 'false' a ...
- 开坑Java编写Json解析器,简明教程
https://zhuanlan.zhihu.com/p/22460835?refer=json-tutorial 课程不是我原创,我打算照他的这个C版本来重写一遍Java的,打算用面向对象的方式来编 ...
- MySQL 主从复制与读写分离概念及架构分析
1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...
- [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...