0
我正在使用数据库存储过程来填充三个下拉菜单。每次调用页面时,都会执行存储过程并填充下拉列表。这样做需要大量的时间。有没有其他方式可以缓存数据,并且可以使用它而不是执行存储过程?我可以使用下拉数据缓存,而不是每次请求都从数据库获取数据吗?
我正在使用数据库存储过程来填充三个下拉菜单。每次调用页面时,都会执行存储过程并填充下拉列表。这样做需要大量的时间。有没有其他方式可以缓存数据,并且可以使用它而不是执行存储过程?我可以使用下拉数据缓存,而不是每次请求都从数据库获取数据吗?
将其存储在应用程序或会话范围中。假设这些下拉菜单代表应用程序范围内的常量,那么您可以使用ServletContextListener
。它只能在webapp的启动时执行一次。
例如
@WebListener
public class ApplicationDataConfigurator implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
Map<String, String> countries = populateAndGetItSomehow();
event.getServletContext().setAttribute("countries", countries);
// ...
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP.
}
}
ServletContext的属性,也可在JSP EL通常的方式:
<select name="countries">
<c:forEach items="${countries}" var="country">
<option value="${country.key}">${country.value}</option>
</c:forEach>
</select>
如果你宁愿喜欢将其存储在会话代替,然后用预处理servlet代替它检查在doGet()
如果它们不在当前会话中,然后填充它。您只需要认识到,这可能会影响大数据时的总内存使用量。
嗨balusC感谢您的快速回复。 因为我对这个世界并不陌生。想要更多的关注这个.. 请。 –
不客气。慢慢来。 – BalusC