Как создать новый текстовый файл за один сеанс входа в систему?

#jsp #logging

#jsp #ведение журнала

Вопрос:

Я хотел бы создать новый файл и записать некоторую новую информацию для нового входа в систему, но я получаю проблему, которая постоянно записывается в один и тот же файл журнала. Как мне создать новый файл после входа в систему? У меня есть jsp-код в моем файле logincheck.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) {
}%>
  

Комментарии:

1. Вы хотите создать новый файл или переопределить существующие данные или хотите добавить их в конце?

2. @Braj нет. я хочу создать файл с другим именем. Например, у меня есть log.txt теперь, когда он генерируется системой автоматически, но после того, как я снова запущу систему, я хочу, чтобы она создала новый файл с именем log2.txt или что-то вроде log.txt.2

3. используйте счетчик в приведенном ниже примере кода и увеличьте его в sessionCreated() методе и создайте новый файл журнала при событии входа в систему.

Ответ №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 откуда взят этот пример.


Некоторые моменты

  • Всегда старайтесь избегать сценариев, вместо этого используйте JSTL и EL.

  • Переместите код в вышеуказанный класс прослушивателя из JSP.