Я думал, что уже знаю, когда переменная имеет значение.
Но я был удивлен, что переменная уже имеет значение, когда я открываю ее в другом браузере.
Я предполагаю, что значение все еще находится на веб-сервере. Я думал, что когда я открою его в другом браузере, даже на другом компьютере, у него будет собственная переменная, расположенная в памяти.
Я объявляю переменную, установленную в null, в первый раз в глобальной области видимости в моих сервлетах.
List<RecordsInfo> recordsInfo = null;
//with getter and setter;
тогда у меня есть такая функция
function exportToExcel(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String filePath = "";
try {
if(recordsInfo != null){
/*I need to check first if recordsInfo has already value before creating an excel file.
This is to make sure that the records viewed are the same and will not make another query.*/
filePath = excelExporter.generateExcel(recordsInfo); //do something...
request.setAttribute("filePath ",filePath );
getServletContext().getRequestDispatcher("/docs/download.jsp").forward(request, response);
} else {
//so something....
}
} catch (Exception e)
e.printStackTrace();
}
}
download.jsp (JSTL)
Click <a href="${filePath}">here</a> to download.
Я знаю, что могу получить значение recordsInfo после его инициализации, поэтому я использовал его в exportToExcel. Но моя проблема в том, что другие браузеры, использующие ту же функцию, получают тот же результат, который, по моему мнению, является нулевым, поскольку у него другой сеанс.
Хотя я уже планирую это исправить, я просто хочу посоветоваться с экспертом.
У меня вопрос, когда переменная умирает (когда ее удаляет сборщик мусора Java)
и как лучше объявлять переменную, уникальную для каждого сеанса.
Надеюсь, я прояснил свой вопрос. Я буду признателен за любую помощь. Спасибо!