2012-05-12 33 views
1

這裏是一段代碼,我寫道:寫從Servlet的文件

public class ServletCounter extends HttpServlet { 

    private final Object lock = new Object(); 

    private int serviceCounter = 0; 
    private FileOutputStream out; 
    private boolean shuttingDown; 

    @Override 
    public void init(ServletConfig servletConfig) throws ServletException { 
     super.init(servletConfig); 
      } 

    @Override 
    protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { 
     enteringServiceMethod(); 
     try { 
      super.service(httpServletRequest, httpServletResponse); 
      out = new FileOutputStream("C:\\xampp\\tomcat\\webapps\\myapp\\WEB-INF\\lib\\counter.txt"); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     } 
     @Override 
    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { 
     if (!shuttingDown) { 
      writeToFile("number of servlet access = " + serviceCounter); 

     } 
    } 

    @Override 
    public void destroy() { 
     ... 
    } 
    private void enteringServiceMethod() { 
     synchronized (lock) { 
      serviceCounter++; 
      writeToFile("method enteringServiceMethod serviceCounter = " + serviceCounter); 
     } 
    } 
    private int getNumServices() { 
     synchronized (lock) { 
      return serviceCounter; 
     } 
    } 
    private void writeToFile(String text) { 
     System.out.println(text); 
     text += "\r\n"; 

     try { 
      out.write(text.getBytes()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 

我需要的是每一個有人打開我的servlet,它應該打開「counter.txt」文件和存儲多個時間Servlet被打開了多少次。例如,如果文件保存號碼8,然後在某人訪問該servlet之後,它應該存儲數字9並刪除數字8.這有意義嗎?任何人都可以幫我重寫writeToFile方法。我寫的代碼是不完整的,但我卡住了,嘗試了幾件事情,似乎沒有任何工作。

+0

我不認爲這是一個很好的想法直接寫,因爲你將不得不處理併發執行(在最好的情況下延遲你的回答時間,最壞的情況下導致無效值)。發生這種情況時,請將消息放入隊列中,讓單個實例處理消息並更新值。 – SJuan76

回答

2

如果你想算頁面命中,然後Filter將是不錯的辦法

攔截每個請求,並採取​​變量在應用範圍和增加它

+0

嗯,我不認爲我知道如何去做。我試過使用過濾器,但是我的writeetoFile方法有問題。它確實編譯,但是在運行時,當我啓動我的servlet時,它會引發異常,並且我看不到它在工作。 – Gipsy

+0

但是爲什麼要在每個請求中寫入文件,你可以在內存中管理它,可能在某個時間間隔你可以寫入文件/ DB –

+0

這是我要求做的:每當有一個訪問ServletCounret時,應該打開文件,記下入口和文件關閉的數量。 – Gipsy