Почему сервлеты 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;
}
}'''