gpt4 book ai didi

java - 变量值何时在 Java 中消失或删除

转载 作者:行者123 更新时间:2023-11-29 06:15:27 25 4
gpt4 key购买 nike

我以为我已经知道变量何时有值。但令我惊讶的是,当我在另一个浏览器中打开它时,该变量已经有了一个值。我想该值仍然驻留在 Web 服务器中。我在想,当我将它打开到另一个浏览器甚至另一台计算机时,它会在内存中有自己的变量。

我在我的 Servlet 的全局范围内第一次出现时将变量设置为 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();
}
}

下载.jsp (JSTL)

Click <a href="${filePath}">here</a> to download.

我知道recordsInfo初始化后可以得到它的值,所以我在exportToExcel中使用了它。但我的问题是使用相同功能的其他浏览器得到相同的结果,我认为它是空的,因为它有不同的 session 。

虽然我已经有解决这个问题的计划,但我只是想听听专家的一些建议。

我的问题是变量什么时候死(当 Java 垃圾收集器处理它时)声明每个 session 唯一的变量的最佳做法是什么。我希望我把我的问题说清楚了。我将不胜感激任何帮助。谢谢!

最佳答案

I declare the variable set to null on it first occurrence in a global scope in my Servlets.

Servlet 在第一次被请求时加载到内存中一次..

现在对于每个请求,它的服务方法都会被调用。但是您在全局范围内有 recordsInfo,因此它将为所有 session /请求共享,直到类加载器重新加载 servlet。

因此对于您的场景,您可以将 recordsInfo 设置为 session 属性,因为您需要它因不同的 session 而不同,并为 requests 缓存

更新您的新问题:

In which memory the Servlet will load, is it in web-server?

内存将是您机器的内存,尤其是运行服务器的 jvm 的堆内存。

是的,如果它太大而无法缓存,则不要

关于java - 变量值何时在 Java 中消失或删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com