Поскольку я новичок в Spring MVC, я застрял в этой проблеме. Я пытаюсь использовать область сеанса, где я хочу, чтобы список совместно использовался несколькими контроллерами в сеансе http. Но я не хочу, чтобы этот сеанс совместно использовался разными сеансами http. Каждый http-сеанс должен иметь свой собственный список (хранилище), который используется всеми его контроллерами.
Проблема, с которой я столкнулся, заключается в том, что этот список используется всеми параллельными запросами. Например, Если я нажму на контроллер на своей машине и придет другой запрос с другого компьютера, они оба используют один и тот же список (хранилище сеансов)
Это класс MySession, содержащий список, который должен использоваться несколькими контроллерами, и каждый контроллер может выполнять операции с этим списком.
@Component
@Scope("session")
public class MySession
{
public List<String> mylist;
}
Вот мой контроллер, который использует объект класса MySession. Точно так же есть другие контроллеры, которые могут обновлять список в сеансе.
@Controller
@Scope("request")
public class SessionController
{
@Autowired
private MySession mySession;
@RequestMapping("/updateSession")
public ModelAndView updateSession(@RequestParam("id") int id)
{
//Operation on List(add remove items)
}
}
Итак, теперь происходит то, что List в MySession выполняет некоторые другие мои запросы, поскольку я думаю, что все параллельные запросы используют один и тот же список.
Пожалуйста, помогите мне, как я могу решить эту проблему, если что-то мне не хватает Спросите о любых изменениях. Заранее спасибо.
Нет, это не статично. На самом деле это простой объект класса, который содержит список массивов java. В основном некоторая информация, относящаяся к сеансу.
Ага. Я говорю, что было бы полезно, если бы вы могли еще немного показать, как выглядит MySession.
Я обновил mySession. Выглядит это примерно так.
Почему ваш контроллер вообще ограничен областью действия? Это должен быть синглтон. И что вы делаете в методе updateSession?
Я прочитал здесь, в этой ссылке ниже, что контроллер должен иметь область действия запроса, иначе объект будет глобально разделен. blog.chesterwood.io/2011/03/…
Но даже после выполнения этого сеанса объект становится доступным глобально.
Не могли бы вы предоставить дополнительную информацию о списке
MySession? Я знаю, что вы, вероятно, этого не делаете, но, например, если бы это был статический список, у вас была бы эта проблема