簡體   English   中英

從服務器JSP創建的文件中讀取客戶端上的更新數據

[英]read updated data on client from file created by server JSP

我正在用Java創建一個Web應用程序。 在客戶端,我有一個條形圖,顯示一些由Java服務器頁面創建的tsv文件中存儲的數據。 通過單擊按鈕,服務器將更新文件中的這些數據。 現在,我想讀取刷新的數據,但是我得到了較舊的數據。 似乎瀏覽器緩存了文件,因此無法獲取更改后的文件。

這是我的servlet代碼:

public class GetDataServlet extends HttpServlet 
{
    private static final long serialVersionUID = 1L;

    private User user;
    Utility utility; 

    public void init() throws ServletException {
        reset();
    }

    public void doGet (HttpServletRequest request,HttpServletResponse response)  throws ServletException, IOException {
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        PrintWriter out = response.getWriter();
        user.getProfile().get(0).setWeigth(user.getProfile().get(0).getWeigth()+0.03);
        user.getProfile().get(1).setWeigth(user.getProfile().get(1).getWeigth()+0.02);
        user.getProfile().get(5).setWeigth(user.getProfile().get(5).getWeigth()+0.01);
        utility.createTsvFile(user, "/usr/local/apache-tomcat-7.0.50/webapps/Visualizer/data.tsv");
        String message = String.format("data.tsv");
        i++;
        out.print(message);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if(request.getParameter("reset").compareTo("yes")==0)
            reset();
    }

    private void reset(){
        List<Concept> children = new ArrayList<Concept>();

        Concept food = new Concept();
        food.setWeigth(0.10);
        food.setLabel("food");
        food.setColor("#98abc5");

        Concept dish = new Concept();
        dish.setWeigth(0.08);
        dish.setLabel("dish");
        dish.setParent(food);
        dish.setColor("#8a89a6");

        Concept cuisine = new Concept();
        cuisine.setWeigth(0.06);
        cuisine.setLabel("cuisine");
        cuisine.setParent(food);
        cuisine.setColor("#8a89a6");

        children.add(dish);
        children.add(cuisine);
        food.setChildren(children);

        children.clear();

        Concept pizza = new Concept();
        pizza.setWeigth(0.05);
        pizza.setLabel("pizza");
        pizza.setParent(dish);
        pizza.setColor("#6b486b");

        Concept spaghetti = new Concept();
        spaghetti.setWeigth(0.05);
        spaghetti.setLabel("spaghetti");
        spaghetti.setParent(dish);
        spaghetti.setColor("#6b486b");

        Concept sushi = new Concept();
        sushi.setWeigth(0.06);
        sushi.setLabel("sushi");
        sushi.setParent(dish);
        sushi.setColor("#6b486b");

        children.add(pizza);
        children.add(spaghetti);
        children.add(sushi);

        dish.setChildren(children);



        List<Concept> profile = new ArrayList<Concept>();
        profile.add(food);
        profile.add(dish);
        profile.add(cuisine);
        profile.add(pizza);
        profile.add(spaghetti);
        profile.add(sushi);

        user = new User("mario", profile);
        utility = new Utility("");


    }

}

這是調用servlet的javascript代碼:

    function ajaxSyncRequest(reqURL) {
    //Creating a new XMLHttpRequest object
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest(); //for IE7+, Firefox, Chrome, Opera, Safari
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //for IE6, IE5
    }
    //Create a asynchronous GET request
    xmlhttp.open("GET", reqURL, false);
    xmlhttp.send(null);

    //Execution blocked till server send the response
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            document.getElementById("message").innerHTML = xmlhttp.responseText;
            update(xmlhttp.responseText);
            //alert(xmlhttp.responseText);
        } else {
            alert('Something is wrong !!');
        }
    }
}

function update(file){
    d3.tsv(file, function(error, data) {
......

在html頁面中,我也輸入了以下內容:

<meta http-equiv="Cache-control" content="no-cache">

但這不起作用。

有了此代碼,即使文件tsv中的數據發生更改,我也可以在第一次調用servlet時顯示正確的數據。

讀取文件中刷新數據的最佳方法是哪種?

好吧,我正面臨着這樣的瀏覽器緩存問題,因此可以完成兩個操作

1)您可以創建一個過濾器,並在過濾器中指示不要緩存這樣的內容,以防止用戶注銷后看到以前訪問過的安全頁面

2)每次您訪問tsv文件的url時,請在末尾添加一個隨機變量。(通常是在Internet exlorer的情況下)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM