• 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=" 300px;  ">
                    <input type="submit" value="用雅虎搜索" style=" 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='300px; '> <input type='submit' value='用雅虎搜索' style='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='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='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; 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='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; 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='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();
        }
    }
  • 相关阅读:
    jekins构建自动化项目的步骤
    CRT 和mysql 中文乱码解决方式
    Jenkins的配置(rpm red hat方式)
    MapReduce job.setNumReduceTasks(0)思考
    浏览器angent分析工具
    npm中的 --save-dev
    computed与methods的异同
    JS函数种类详解
    Vue.js和Nodejs的关系
    AJAX复习笔记
  • 原文地址:https://www.cnblogs.com/datapool/p/6220442.html
Copyright © 2020-2023  润新知