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