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">视频  &nbsp;&nbsp;
                <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; ">
            &copy; 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("    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        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();
    }
}
时间: 2024-10-12 14:20:12

Java Web学习笔记---用GET实现搜索引擎的相关文章

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记10:GenericServlet

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Java Web学习笔记

本来挺不想学java web的,但做搜索引擎要做出一个demo来,好像不学不行了,那就简单的学一学把. 本文为我学习是的感悟和理解为主,按条来写,所以会比较乱吧. *servlet与jsp直观理解 servlet:java生产html网页的程序,把html println出来 jsp:html中加入java,不用每句都println,而jsp实现原理是将jsp转换成servlet源程序,编译执行返回 *jsp的优点 内容生成和显示分离 jsp为页面设计者,使用javaBean,jdbc等方便的使

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------