2014-07-05 55 views
0

我想創建新文件並記錄新的登錄信息,但是我遇到了連續寫入同一個日誌文件的問題。登錄後如何創建新文件?我在我的logincheck.jsp文件中有jsp代碼。如何在一個登錄會話中創建新的文本文件?

<% 
     java.util.Date date= new java.util.Date(); 
     //String ADDRESS = request.getRemoteAddr(); 
     InetAddress thisIp = InetAddress.getLocalHost(); 

     String strPath = "C:\\Users\\learningAppLogFile\\mylog.txt"; 
     File strFile = new File(strPath); 

     boolean fileCreated = strFile.createNewFile(); 

     try{ 
    if(!strFile.exists()){ 
     strFile.createNewFile(); 
    } 

    FileWriter fileWriter = new FileWriter(strFile, true); 

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 
    bufferedWriter.newLine(); 
    bufferedWriter.write(" [" + date + "] : [" + username + "] : [" + thisIp + "] "); 
    bufferedWriter.flush(); 
    bufferedWriter.close(); 

} catch(IOException e) { 
}%> 
+0

是否要創建新文件或覆蓋現有數據還是希望將其附加到最後? – Braj

+0

@Braj no。我想創建一個不同名稱的文件。例如,我現在有一個log.txt,它由系統自動生成,但是在我再次運行系統之後,我希望它創建一個名爲log2.txt的新文件或類似log.txt.2的東西。 –

+0

在下面的示例中使用計數器代碼並在'sessionCreated()'方法中增加它,並在登錄事件中創建一個新的日誌文件。 – Braj

回答

1

如何創建一個新的文件,一旦我登錄?我想創建一個不同名稱的文件。

例如,我有現在的log.txt,其中由系統自動生成的,但之後我再次運行該系統,我希望它創建新的文件名爲log2.txt或類似的東西log.txt.2

下面是一個簡單的HttpSessionListener示例,用於監視會話的創建和刪除行爲,然後考慮此偵聽器。

示例代碼:

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class SessionCounterListener implements HttpSessionListener { 

    private int counter=0; 

    @Override 
    public void sessionCreated(HttpSessionEvent arg0) { 
    System.out.println("sessionCreated"); 

    counter++; 
    // create a new file appending counter value in the file name 

    // Here log the sign-in events 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent arg0) { 
    System.out.println("sessionDestroyed"); 
    // Here do whatever you want to do on sign out event 
    } 
} 

的web.xml

<web-app ...> 
    <listener> 
     <listener-class>com.x.y.z.SessionCounterListener</listener-class> 
    </listener> 
</web-app> 

它是如何工作的?

  • 如果創建了新的會話,例如request.getSession();,則會執行聽衆的sessionCreated()
  • 如果會話被破壞,例如會話超時或session.invalidate(),則會執行偵聽器的sessionDestroyed()

示例代碼:

HttpSession session = request.getSession(); //sessionCreated() is executed 
... 
session.invalidate(); //sessionDestroyed() is executed 

欲瞭解更多信息請訪問mkyong.com從那裏這個例子被稱爲。


幾點

  • 總是儘量避免Scriplet改爲使用JSTL和EL。

  • 將代碼移入JSP的上述監聽器類中。

相關問題