Поддержка отдельного экземпляра сессионного компонента с сохранением состояния для каждого клиента - PullRequest
0 голосов
/ 30 ноября 2018

Я создал простое веб-приложение на Java с компонентом сеанса с сохранением состояния.Я хочу, чтобы он вел отдельный список целых чисел для каждого нового клиента.

мой удаленный интерфейс

package Emote.ejb;

import java.util.List;
import javax.ejb.Remote;

@Remote
public interface EmoteRemote {


    void addElement(int e);
    void removeElement(int e);

    List<Integer> getElement();



}

мой компонент Stateful

package Emote.ejb;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateful;

/**
 *
 * @author 
 */
@Stateful
public class EmoteStateful implements EmoteRemote{

   List<Integer> values = new ArrayList<>();

    @Override
    public void addElement(int e) {

        values.add(e);
    }



    @Override
    public void removeElement(int e) {

        values.remove(new Integer(e));
    }

    @Override
    public List<Integer> getElement() {

        return values;
    }
}

JSP-страница

<%@page import="java.util.List"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="Emote.ejb.EmoteRemote"%>
<!DOCTYPE html>
<%!    
    private static EmoteRemote values;

    public void jspInit() {

        try {

            InitialContext ic = new InitialContext();
            values = (EmoteRemote) ic.lookup("java:global/EmoteCaps/EmoteStateful");

        } catch (Exception e) {

            System.out.println(e.getMessage());
        }

    }

%>

<%
    if (request.getParameter("AddNum") != null) {

        int e = Integer.parseInt(request.getParameter("t1"));
        values.addElement(e);

    }

    if (request.getParameter("remNum") != null) {

        int e = Integer.parseInt(request.getParameter("t1"));
        values.removeElement(e);

    }


%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Welcome</h1>

        <form name="abc" method="post">

            <input type="text" name="t1"/><br>
            <input type="submit" value="Add" name="AddNum"><br>
            <input type="submit" value="Remove" name="remNum">

               <%
                if(values != null){

                    List<Integer> nums = values.getElement();

                    for(int value : nums){

                        out.println("<br>" + value);
                    }

                     out.println("<br> Size" + nums.size());
                }


            %>

        </form>
    </body>
</html>

Сначала я запускаю программу и добавляю значения всписок.Затем я открыл другой браузер и назвал ту же программу по ее URL.Я надеялся, что он вернет мне новый список массивов, который пуст, вместо этого он вернул мне тот же список массивов, который я создал в предыдущем экземпляре браузера.

Но я хочу сохранить отдельный список массивов для каждого клиента,

Как создать отдельный экземпляр компонента Stateful bean для каждого клиента и поддерживать его?.

Заранее спасибо.

...