Estou tentando criar um CRUD que é referente a criar uma Lista de Compras…
E estou com os seguintes problemas:
1) Como dizer do modo que fiz, que o Usuário possui uma Lista de produtos?
2) Como inicializar com essa lista de produtos vazia, ao cadastrar o  usuário ?
3) Como faço para que o meu servlet não “reset” a minha lista de usuário ? Digo isto, pois ao dar POST no cadastro do usuário, ele me indica 1 usuário, porém se voltar a página e der novamente POST, ele indica 1 usuário, ou sejá ele está apagando a minha lista de usuário e suas informações, eu preciso manter para fazer as trocas de informações nas rotas…
MINHA ARQUITETURA DE PASTAS:

SERVLET CLASSE REGISTER
@WebServlet(name = "Register", urlPatterns = {"/Register"})
public class Register extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        // REQUEST
        final String username = request.getParameter("username");
        final String password = request.getParameter("password");
        
        // MSG RESPONSE
        String msgSaveUser = "";
        
        
        
        if(!username.equals("") && !username.equals(" ") && !password.equals("") && !password.equals(" ")){
            Produto newProduct = new Produto(null, 0);
            RepositorioProduto rp = new RepositorioProduto();
            rp.saveProduct(newProduct);
            
            Usuario newUser = new Usuario(username, password);
            RepositorioUsuario ru = new RepositorioUsuario();
            
            msgSaveUser = ru.saveUser(newUser);
           
        }
        
        
    }
}
CLASSE PRODUTO:
public class Produto {
private String name;
private int quantity;public Produto(String name, int quantity){ this.name = name; this.quantity = quantity; } public String getName(){ return this.name; } public int getQuantity(){ return this.quantity; }}
CLASSE USUÁRIO:
public class Usuario {
    private String username;
    private String password;
    
    public Usuario(String username, String password){
        this.username = username;
        this.password = password;
    }
    
    public String getUsername(){
        return this.username;
    }
    
    public String getPassword(){
        return this.password;
    }
}
INTERFACE REPOSITÓRIO USUÁRIO:
public interface IRepositorioUsuario {
        public String saveUser(Usuario user);
        public boolean checkExistUser(String username);
        public int getUserListSize();
        public List<Usuario> getUser(String username);
    }
INTERFACE REPOSITÓRIO PRODUTO:
public interface IRepositorioProduto {
    public String saveProduct(Produto product);
    public boolean checkExistProduct(String productName);
    public int getProductListSize();
    public List<Produto> getProduct(String productName);
}
CLASSE REPOSITÓRIO USUÁRIO:
public class RepositorioUsuario implements IRepositorioUsuario {
    private List<Usuario> userList = new ArrayList<Usuario>();
    @Override
    public String saveUser(Usuario user) {
        try {
            // VERIFICA SE EXISTE USUÁRIO ADICIONADO
            // SE, NÃO EXISTIR, ADICIONE O USUÁRIO
            // SE NÃO, VERIFIQUE O USUÁRIO A SER CADASTRADO, CASO JÁ EXISTA RETURN FALSE, CASO NÃO EXISTA ADICIONE O USUÁRIO
            if(this.getUserListSize() == 0){ 
                this.userList.add(user);
                return "USUÁRIO SALVO";
            } else { 
                if(this.checkExistUser(user.getUsername())){
                    return "USUÁRIO JÁ EXISTE NO BANCO DE DADOS";
                } else {
                    this.userList.add(user);
                    return "USUÁRIO SALVO";
                }    
            }
        } catch (Exception e){
            return e.toString();
        }
    }
    @Override
    public int getUserListSize() {
        return this.userList.size();
    }
    
    @Override
    public List<Usuario> getUser(String username) { return null; }
    
    @Override
    public boolean checkExistUser(String username) {
        for(Usuario user : this.userList){
            return (user.getUsername().equals(username)) ? true : false;
        }
        
        return false;
        
    }
}
CLASSE REPOSITÓRIO PRODUTO:
public class RepositorioProduto implements IRepositorioProduto {
    private List<Produto> productList = new ArrayList<Produto>();
    @Override
    public String saveProduct(Produto product) {
        try {
            // VERIFICA SE EXISTE PRODUTO ADICIONADO
            // SE, NÃO EXISTIR, ADICIONE O PRODUTO
            // SE NÃO, VERIFIQUE O PRODUTO A SER CADASTRADO, CASO JÁ EXISTA RETURN FALSE, CASO NÃO EXISTA ADICIONE O PRODUTO
            if(this.getProductListSize() == 0){ 
                this.productList.add(product);
                return "PRODUTO SALVO";
            } else { 
                if(this.checkExistProduct(product.getName())){
                    return "PRODUTO JÁ EXISTE NO BANCO DE DADOS";
                } else {
                    this.productList.add(product);
                    return "PRODUTO SALVO";
                }    
            }
        } catch (Exception e){
            return e.toString();
        }
    }
    @Override
    public boolean checkExistProduct(String productName) {
        for(Produto product : this.productList){
            return (product.getName().equals(productName)) ? true : false;
        }
        
        return false;
    }
    @Override
    public int getProductListSize() {
        return this.productList.size();
    }
    @Override
    public List<Produto> getProduct(String productName) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}