Почему сервлеты WEB app Java не видят Map>?

Исходные данные: 1. многомодульное веб-приложение на сервлетах
2. Реализация без баз данных, а просто в памяти Java -машины.

 

Проблема(описание): Есть самый главный сервлет(main) -который запускается самым первым.В методе init() - я создал метод, который идет в обычный класс(MemoryRepo) и там в мапу созданную (private static) набрасывает мне Людей разных. далее после того как init() отработал, пошел следующий метод do Post() который отработал и передал управление( форвардом) другому сервлету(CoachController), соответсвенно там init() я не трогаю, начинаю производить манипуляци c с моим репозиторием(который ранее был создан в main). Дак суть в том что есть еще один сервлет Студентов который тоже юзает Репозиторий в своих целях, Все сервлеты работают по порядку . И как только я начинаю тестировать данные как будто перетираются (сразу пустые), друг другом (возможно потому что все хранится в HashMap. Решил проблему добавлением во все init() метод создание людей. Кто че подскажет в чем проблема? Смущает одно что приходиться повторять код в каждом init методе. Как исправить ситуацию Вот куски кода

**Вот mainController**
    
@WebServlet(value = "/login")
public class LoginController extends HttpServlet {
    private final PersonRepoInMemories personRepoInMemories;
    private final LoginService loginService;
    {
        personRepoInMemories =new PersonRepoInMemories();
        loginService =new LoginService();
    }

    @Override
    public void init() throws ServletException {
        super.init();
        personRepoInMemories.addCoachesAndStudents();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session =req.getSession();
        String login = (String) req.getParameter("login");
        String password =(String) req.getParameter("password");
        boolean result= loginService.checkUser(login,password);
        if(result){

            session.setAttribute("user",req.getParameter("login"));
            getServletContext().getRequestDispatcher("/home").forward(req,resp);
        }
        else  {
            resp.sendRedirect(req.getContextPath()+"/index.jsp");
        }
    }
}

**А тут CoachController**

'''    //@WebServlet(value = "/user-coach")
public class CoachController extends HttpServlet {

private final   PersonRepoInMemories personRepoInMemories;
private final   CoachService coachService;
    {
        personRepoInMemories =new PersonRepoInMemories();
        coachService =new CoachService();
    }

    @Override
    public void init() throws ServletException {
        super.init();
      //  personRepoInMemories.addCoachesAndStudents(); // тренеров и студентов добавим из хардкор метода.
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Person> listPersons =personRepoInMemories.findAll();
        List<Coach> coaches =coachService.filterCoachForMap(listPersons);
        BigDecimal bigDecimal= coachService.averageSalary(coaches);
        ServletContext servletContext =getServletContext();
        servletContext.setAttribute("salary",bigDecimal);
        servletContext.setAttribute("listCoaches",coaches);

        if(req.getParameter("salarylist") != null) { //проверка чтобы узнать куда пользователь нажал
            getServletContext().getRequestDispatcher("/salary-coach").forward(req, resp);
        } else{
            getServletContext().getRequestDispatcher("/show-coaches").forward(req, resp);
        }
    }
'''
 Ну и собственно RepoMemory
'''
    public class PersonRepoInMemories implements PersonRepo{

    private static Map<Integer, Person> personMap;
    private static List<String> grades;

    {
        personMap = new HashMap<>();
        grades =new ArrayList<String>();
    }
    public static Map<Integer, Person> getPersonMap() {
        return personMap;
    }

    @Override
    public void addPerson(Person person) {
         personMap.put(person.getId(), person);
    }

    @Override
    public void deletePerson(Person person) {
         personMap.remove(person.getId(),person);
    }

    @Override
    public void updatePerson(Person person) {
        personMap.put(person.getId(), person);
    }

    @Override
    public List<Person> findAll() {
        return new ArrayList<Person>(personMap.values());
    }

    @Override
    public Person findById(int id) {
        return personMap.get(id);
    }

    /**
     * Ниже хардкор методы откуда берутся обычные юзеры для примера
     */

    public void addGradeList() {
        grades= Arrays.asList("-","8","-","10");
    }

    public Map<Integer, Person>  addCoachesAndStudents(){
        addGradeList();
        personMap.put(1,new Coach(new CredUser(1,"coach1","123", Role.COACH),1,"Ivan Ivanov",32,1000));
        personMap.put(2,new Coach(new CredUser(2,"coach2","123", Role.COACH),2,"Fred Mike",30,1900));
        personMap.put(3,new Coach(new CredUser(3,"coach3","123", Role.COACH),3,"Joe Kolobok",19,1500));
        personMap.put(4,new Coach(new CredUser(4,"coach4","123", Role.COACH),4,"Frank Sidorov",29,1800));
        personMap.put(5,new Coach(new CredUser(5,"coach5","123", Role.COACH),5,"Jhon Mel",33,900));
        personMap.put(6,new Student(new CredUser(6,"student6","123", Role.USER),6,"Vanya Petrov", 20,"GR-1",grades));
        personMap.put(7,new Student(new CredUser(7,"student7","123", Role.USER),7,"Nic Tinov", 22,"GR-1",grades));
        personMap.put(8,new Student(new CredUser(8,"student8","123", Role.USER),8,"Alex Wapir", 23,"GR-2",grades));
        personMap.put(9,new Student(new CredUser(9,"student9","123", Role.USER),9,"Dima Bagenov", 24,"GR-2",grades));
        personMap.put(10, new Admin(new CredUser(10, "admin", "123", Role.ADMIN), 10, "Dimas Bagenovee", 28));
   return personMap;
    }
}'''

Ответы (0 шт):