首先,在HTML中使用FORM提交数据。当FORM的method属性设置为GET时,浏览器以GET方式提交表单数据。FORM的action属性设置数据将提交到哪个URL。
1 <body>
2 <div align = "center">
3 <img src = "http://www.logostage.com/logos/Google.png" style = 'margin: 25px;' width="368" height="186">
4 <div>
5 <form action = '/servlet/servlet/SearchServlet' method = 'get'>
6 <input type = "radio" name = "type" value = "web" checked>网页
7 <input type = "radio" name = "type" value = "news">新闻
8 <input type = "radio" name = "type" value = "image">图片
9 <input type = "radio" name = "type" value = "video">视频
10 <br/><br/>
11 <input type = "text" name = "word" value = "" style = "300px;"><br/><br/>
12 <input type = "submit" value= "Google一下" style = "150px;">
13 </form>
14 </div>
15 <div style = "margin-top:50px;">© Clara 2011</div>
18 </div>
20 </body>
这段HTML代码的页面效果如下图。好吧,我山寨了><~
然后写一个SearchServlet的类来实现业务逻辑。这里我用了yahoo的search API,不过是下的老版本,现在yahoo搞了个BOSS,要收钱。用的是yahoo_search-2.0.1.jar,需要添加到项目的library里面去,即/WEB-INF/lib下。这里有个问题,直接加到目录底下还是不会找到,需要右键jar包,具体见下图。
图片搜索的结果如下:
搜索部分的关键代码:
public class SearchServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); // 搜索关键字 String word = request.getParameter("word"); // 搜索类型 String type = request.getParameter("type"); response.setContentType("text/html"); ..... ..... SearchClient client = new SearchClient("javasdktest"); try{ if("image".equals(type)){ ImageSearchRequest searchRequest = new ImageSearchRequest(URLEncoder.encode(word, "UTF-8")); // 查询记录数 searchRequest.setResults(20); // 从第 0 条记录开始显示 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)){
}
else .......
}