Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 我是否可以缓存下拉数据,而不是每次请求都从数据库中获取?_Jsp - Fatal编程技术网

Jsp 我是否可以缓存下拉数据,而不是每次请求都从数据库中获取?

Jsp 我是否可以缓存下拉数据,而不是每次请求都从数据库中获取?,jsp,Jsp,我正在使用数据库存储过程填充三个下拉菜单。每次调用页面时,它都会执行存储过程并填充下拉列表。这样做需要很多时间。是否有其他方法可以缓存数据并使用它而不是执行存储过程?将其存储在应用程序或会话范围中。假设这些下拉列表代表应用程序范围的常量,那么您可以使用一个。它在webapp启动时只执行一次 例如 @WebListener 公共类ApplicationDataConfigurator实现ServletContextListener{ @凌驾 公共void contextInitialized(Se

我正在使用数据库存储过程填充三个下拉菜单。每次调用页面时,它都会执行存储过程并填充下拉列表。这样做需要很多时间。是否有其他方法可以缓存数据并使用它而不是执行存储过程?

将其存储在应用程序或会话范围中。假设这些下拉列表代表应用程序范围的常量,那么您可以使用一个。它在webapp启动时只执行一次

例如

@WebListener
公共类ApplicationDataConfigurator实现ServletContextListener{
@凌驾
公共void contextInitialized(ServletContextEvent事件){
Map countries=populateAndGetItSomehow();
event.getServletContext().setAttribute(“国家”,国家);
// ...
}
@凌驾
公共无效上下文已销毁(ServletContextEvent事件){
//努普。
}
}
ServletContext属性也可以通过通常的方式提供:

<select name="countries">
  <c:forEach items="${countries}" var="country">
    <option value="${country.key}">${country.value}</option>
  </c:forEach>
</select>

${country.value}

如果您希望将其存储在会话中,则使用预处理,如果当前会话中尚未存在,则检查
doGet()
,然后填充它。您只需意识到,当涉及大数据时,这可能会影响总内存使用量。

Hi balusC感谢您的快速回复。因为我对这个世界并不陌生。希望更多地关注这一点。。请
<select name="countries">
  <c:forEach items="${countries}" var="country">
    <option value="${country.key}">${country.value}</option>
  </c:forEach>
</select>