天天看點

(三)你今天上熱搜了嗎(背景篇_需求二)

回憶下需求二是什麼

(三)你今天上熱搜了嗎(背景篇_需求二)

需求分析:

當搜尋框有文本時或者文本值發生變化時,前台發送這個文本到背景,背景會查詢資料庫與這個文本相關資訊,若查找到相關資訊傳回這個相關資訊的标題,由于資料可能會很多,隻傳回十個資料,更多的資料需要使用者點選送出鍵後才會傳回更多的資訊,這裡還有個問題傳回十個資料依據什麼确定傳回使用者想要得到的資料,很明顯依據就是通路量,使用者通路的次數越多,說明使用者想得到這個資訊可能性很大

(三)你今天上熱搜了嗎(背景篇_需求二)

新增一個TopSearchKeyServlet類,在web.xml添加相應的servlet代碼,我們發現當我們擷取到資料後,都需要轉換為json格式,在TopSearchServlet類中也需要轉化為json格式,是以為了避免代碼重複,把這個功能放在com.util包下,可以重複使用

JSON類

package com.util;

import java.util.List;

public class JSON {
    public static String toJson(List<String> list) {
        String data = "";
        int count=1;
        for (String str : list) {
            // "1":"title1","2":"title2",
            data+="\""+count+"\":\""+str+"\",";
            count++;
        }
        data+="\"length\":"+count;
        return "{"+data+"}";
    }
}
           

TopSearchKeyServlet類

package com.servlet;

import com.service.TopSearchService;
import com.service.impl.TopSearchServiceImpl;
import com.util.JSON;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class TopSearchKeyServlet extends HttpServlet {

    TopSearchService topSearchService=new TopSearchServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //設定跨域請求
        response.setHeader("Access-Control-Allow-Origin","*");
        //處理請求中文亂碼
        request.setCharacterEncoding("utf-8");
        //進行中文亂碼
        response.setContentType("text/html;charset=utf-8");
        //擷取搜尋框的文本
        String key=request.getParameter("search");
        //擷取熱搜清單
        List<String> lists=topSearchService.list(key);
        PrintWriter out=response.getWriter();
        if (lists.size()>0) {
            out.println(JSON.toJson(lists));
        }
    }
}
           

對TopSearchServlet做一個小修改

package com.servlet;

import com.service.TopSearchService;
import com.service.impl.TopSearchServiceImpl;
import com.util.JSON;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class TopSearchServlet extends HttpServlet {

    TopSearchService topSearchService=new TopSearchServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //設定跨域請求
        response.setHeader("Access-Control-Allow-Origin","*");
        //進行中文亂碼
        response.setContentType("text/html;charset=utf-8");
        //擷取熱搜清單
        List<String> lists=topSearchService.list();
        PrintWriter out=response.getWriter();
        if (lists.size() > 0) {
            out.println(JSON.toJson(lists));
        }
    }
}
           

接下來需要編寫對資料庫的操作代碼

TopSearchService

package com.service;

import java.util.List;

public interface TopSearchService {
    /**
     * 擷取熱搜前10名
     * @return
     */
    public List<String> list();

    /**
     * 擷取與關鍵字相關的資訊清單通路量最多的前10條記錄
     * @param key
     * @return
     */
    List<String> list(String key);
}
           

TopSearchServiceImpl

package com.service.impl;

import com.service.TopSearchService;
import com.util.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class TopSearchServiceImpl implements TopSearchService {
    private Connection connection = null;
    private Statement statement = null;
    private PreparedStatement preparedStatement=null;
    private ResultSet resultSet = null;

    @Override
    public List<String> list() {
        String sql = "select top 10 ts_key from topSearch order by ts_count desc";
        List<String> list = new ArrayList<>(10);
        try {
            connection = DBUtil.getConn();
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                list.add(resultSet.getString("ts_key"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(connection, statement, resultSet);
        }
        return list;
    }

    @Override
    public List<String> list(String key) {
        String sql = "select top 10 info_title from info where info_title like ? order by info_clickCount desc";
        List<String> list = new ArrayList<>(10);
        try {
            connection = DBUtil.getConn();
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,"%"+key+"%");
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                list.add(resultSet.getString("info_title"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(connection, preparedStatement, resultSet);
        }
        return list;
    }
}
           

背景需求二功能開發完畢,看下效果,通路http://localhost:8080/你的項目名/topSearchKey?search=的

(三)你今天上熱搜了嗎(背景篇_需求二)

按照通路量排序輸出包含關鍵字"的"清單資料

(二)你今天上熱搜了嗎(前台篇_需求一)

(四)你今天上熱搜了嗎(前台篇_需求二)