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