Данные периодически возвращаются из базы данных в JSP при обновлении страницы с помощью RequestMethod.GET - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь передать данные из DAO в JSP с помощью ModelMap.Это работает, но когда я обновляю эту страницу, одни и те же данные появляются неоднократно при каждом обновлении.Я хочу, чтобы данные не приходили снова и снова при обновлении страницы.Помогите мне в этом вопросе.

    @Autowired
    private SelectInfo selectInfo; /* Instance of SelectInfo DAO class injected here, here the method of fetching data from databse is defined and fetched data is passed to GetInfo bean*/

    @Autowired
    private GetDetail getDetails; /* GetDetail is the bean where the values are stored which are coming from database */

    @RequestMapping(value="/selectInfo", method=RequestMethod.GET)

    public String registerComplete(ModelMap model,HttpSession session,HttpServletResponse res) {

    if(session.getAttribute("user")==null) {
           return "redirect:/";
    }else {     

    selectInfo.getInfo(); /*getInfo is the method defined in SelectInfo class which fetch data from database*/

    /* the values are adding in modelmap using getter method from GetInfo bean */
    model.put("cities", getDetails.getCities());
    model.put("theaters", getDetails.getTheaters());
    model.put("movies", getDetails.getMovies());
    model.put("dates", getDetails.getDates());
    model.put("timings", getDetails.getTimings());

    return "cities";
    }

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Если вы передаете данные с использованием средства modelMap, данные будут передаваться каждый раз при загрузке или обновлении страницы.Чтобы загрузить данные один раз, используйте ajax и sessionStorage

Создайте новый метод в классе контроллера для возврата данных, подобных этому

@RequestMapping(value="/cities", method=RequestMethod.GET)
public @ResponseBody Object registerComplete(){
  return getDetails.getCities()
}

Injavascript проверяет sessionStorage, если он равен нулю, затем загружает данные, используя ajax.

$(document).ready(function(){

    if(sessionStorage.cities ==null){

        $.ajax({
            type : 'GET',
            url : "/cities",
            contentType:'application/json',
            data:JSON.stringify(data),
            success : function(response) {
                sessionStorage.cities =response;
            }
        });

    }

}) ;

Таким образом, вы можете ограничить загрузку данных при каждом обновлении

0 голосов
/ 14 февраля 2019

Кэширование - это естественный способ избежать ненужных поездок в базу данных.Spring предоставляет поддержку для этого с помощью аннотации @Cacheable.

Если вы используете Spring Boot, вам будет проще.Убедитесь, что у вас есть spring-boot-starter-cache в ваших зависимостях или один из ваших стартеров зависит от spring-boot-starter-cache.Затем вы можете аннотировать ваш метод DAO следующим образом:

@Component
public class SelectInfo {
  ...
  @Cacheable("dbInfo")
  public <returnType> getInfo() {
    // Implementation of the method
  }
  ...
}

Рекомендуется помещать аннотацию Cacheable поверх метода в вашем DAO, так как он отвечает за выборку фактических данных, которые вы хотите кэшировать.

Если вы не используете Spring Boot, вам нужно будет включить Cache Provider и настроить bean-компонент для этого поставщика.Подробную информацию о том, как это сделать, можно найти в документах Spring Caching https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html#boot-features-caching-provider

0 голосов
/ 14 февраля 2019

То есть вы не хотите вызывать свою базу данных каждый раз, когда страница обновляется?Я думаю, что вы можете попробовать кэширование в этом случае.Пожалуйста, посмотрите на пример здесь: https://spring.io/guides/gs/caching/

Вы можете просто добавить аннотацию к вашему методу контроллера.

@RequestMapping(value="/selectInfo", method=RequestMethod.GET)
@Cacheable
public String registerComplete(ModelMap model,HttpSession session,HttpServletResponse res) {
    //your code goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...