zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/datapool/p/6220442.html
Copyright © 2011-2022 走看看