2012-08-25 44 views
1

我使用Eclipse JUNO IDE和tomcat 7.0。如何從servlet使用分派器時刷新jsp頁面?

我有一個web應用程序。在應用程序中,我有:

  1. 的Servlet

  2. JSP頁面

  3. HTML - 主頁。

在主網頁我有一個重定向到Servlet(因爲我需要從服務器獲取數據)被點擊提交按鈕和servlet的重定向到比賽jsp頁面時的一種形式。 現在,當我刷新jsp頁面時,servlet在請求中獲得NULL。所以我的問題 是如何重新提交?因爲我想顯示來自服務器的新數據。

注意:Servlet使用套接字與服務器通信,所以當用戶按下某個提交按鈕時,請求將重定向到servlet,並且該servlet將請求 重定向到服務器以獲取所需的數據。現在,當servlet收到的數據,它的傳輸數據到JSP頁面,JSP頁面顯示爲HTML

if (request.getParameter("submit").equals("Show Taxis at Driving")) 
    { 
      requests.add("driving"); 
      to_server.writeObject(requests); 
      to_server.flush(); 
      requests.removeAllElements(); 

      try{ 
       driving = (Vector)from_server.readObject(); 
       request.setAttribute("driving", driving); 
       //request.getRequestDispatcher("/WEB-INF/driving_page.jsp").forward(request, response); 
       RequestDispatcher disp = getServletContext().getRequestDispatcher("/WEB-INF/driving_page.jsp"); 
       disp.forward(request, response); 
      }catch(ClassNotFoundException e) 
      { 
       e.printStackTrace(); 
      } 
    } 
    else if (request.getParameter("submit").equals("Add Passenger to Taxi")) 
    { 
     requests.add("taxis"); 
     requests.add("passengers"); 
     to_server.writeObject(requests); 
     to_server.flush(); 
     requests.removeAllElements(); 

     try { 
      taxis_waiting = (Vector)from_server.readObject(); 
      passengers = (Vector)from_server.readObject(); 
      request.setAttribute("taxis", taxis_waiting); 
      request.setAttribute("passengers", passengers); 
      request.getRequestDispatcher("/WEB-INF/add_passenger_to_taxi.jsp").forward(request, response); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      request.getRequestDispatcher("error_page.jsp").forward(request, response);  
     } 
    } 

回答

1

這裏一個最簡單,最常用的方法:

  1. index.html頁應該有一個使用GET操作的表單。這樣的形式參數是通過查詢參數傳遞給你的servlet:

    /servlet?search=foo 
    
  2. 你的servlet處理中的搜索和轉發results.jsp使瀏覽器仍指向/servlet?search=foo

    RequestDispatcher dispatcher = getServletContext(). 
                 getRequestDispatcher("results.jsp); 
    dispatcher.forward(request,response); 
    
  3. 如果您的用戶刷新頁面,她將再次點擊/servlet?search=foo,調用服務器端邏輯並刷新搜索結果。

+0

感謝您的回覆,但這與我所做的完全相同。在'MainPage.html'中,使用GET方法的表單和動作重定向到servlet。現在servlet處理請求並將其轉發到所需的jsp頁面。但是當用戶刷新jsp頁面時,servlet會變爲空。 – eliorsh

+0

@eliorsh:顯示您的servlet代碼。如果使用request參數和簡單的'request.getParameter(...)',它應該檢索參數,無論它是來自表單還是手動粘貼到URL中。 –

+0

我編輯了我的問題並添加了servlet代碼,這個代碼是'doPost'方法中的 – eliorsh

1

您可以簡單地使用會話解決此問題。這將是一個替代解決方案。

if(session.getAttribute("REFRESH")!=null){ 
    response.sendRedirect("../your_servlet"); 
} 
else{  
session.setAttribute("REFRESH","TRUE"); 
} 

您可以將上面的代碼放在jsp頁面中。 第一次加載頁面時,它會檢查會話值,但不會保存這樣的會話,因此它會像代碼的其他部分一樣創建會話。但在此之後,當用戶單擊刷新按鈕時,會話將有一個值併發生重定向。

但要避免循環重定向,你需要在的servelt拆除會話。所以下面的代碼應該放在你的servlet中。

session.removeAttribute("REFRESH");