powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / сессии в Web (EJB)
8 сообщений из 8, страница 1 из 1
сессии в Web (EJB)
    #38885927
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет!
я только изучаю JEE, так что не судите строго.
возникла одна проблема с работой JEE. точнее пишу проект на основе EJB. создал страницу авторизации пользователя если все успешно то переход на таблицу а там уже можно выполнять операции CRUD, и т.д.
на первый взгляд все правильно работает, но вчера ради интереса проверял на работоспособность при коллективном использовании. там заметил что если первый пользователь (условно user1) авторизуются успешно и потом авторизуется user2 происходит чудо... а точнее user1 становится user2 помогите разобраться.
кстати сервлет для проверки логина/пароля и forward'а выглядит вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
package demo;

import demo.entity.Users;

import demo.facade.SessionEJBLocal;

import java.io.IOException;
import java.io.PrintWriter;

import java.util.Date;
import java.util.List;
import java.util.TreeSet;

import javax.ejb.EJB;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;

public class LoginCheck extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    @EJB
    private SessionEJBLocal sel;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println("App Start ---->>>> " + new Date());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String login = "";
        String password = "";
        try {
            login = request.getParameter("login");
            password = request.getParameter("password");
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>LoginCheck</title></head>");
        out.println("<body>");
        try {
            Users user = new Users();
            user = sel.getUsersFindUserByLoginPass(login, password);
                        
            if (user != null) {
                getServletContext().setAttribute("new", user);
                
                System.out.println("v sayt zaxodit ---->>> " + login);
                request.getRequestDispatcher("abiturientslist").forward(request, response);
            } else {
                System.out.println("Ошибка при авторизации!!!");
                out.println("<b><font color=" + "red" + ">Проверте правильность логина/пароля!</font></b>");
                out.println("<a href=start>back</a>");
            }
        } catch (IOException ioe) {
            // TODO: Add catch code
            System.out.println("UPS!!!");
            System.out.println(ioe);
        } catch (ServletException se) {
            // TODO: Add catch code
            System.out.println("UPS SORRY!!!");
            System.out.println(se);
        }

        out.println("</body></html>");
        out.close();
    }
}



если я не ошибаюсь я должен использовать сессию, так да?
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38885998
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Музаффар,

Поскольку Вы не привели код SessionEJBLocal, то остается только догадываться, но похоже Вы путаете stateless session beans (из EJB) с session-scoped bean (из CDI).
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886000
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886010
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас создается 1 экземпляр объекта сервлета, туда один раз инжектится Ваш EJB, затем он обрабатывает ВСЕ Ваши запросы. Т.е. на каждый новый запрос новый EJB не создается. Как это решить - гугл в помощь.
Код: java
1.
2.
Users user = new Users();
user = sel.getUsersFindUserByLoginPass(login, password);


Это как-то странно...
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886034
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привожу SessionEJB
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
package demo.facade;

import demo.entity.Abiturients;
import demo.entity.Groups;

import demo.entity.Users;

import java.math.BigDecimal;

import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "SessionEJB", mappedName = "DemoAbits-Model-SessionEJB")
@Remote
@Local
public class SessionEJBBean implements SessionEJB, SessionEJBLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Model")
    private EntityManager em;

    public SessionEJBBean() {
    }

...

    public Users persistUsers(Users users) {
        em.persist(users);
        return users;
    }

    public Users mergeUsers(Users users) {
        return em.merge(users);
    }

    public void removeUsers(Users users) {
        users = em.find(Users.class, users.getIduser());
        em.remove(users);
    }

    /** <code>select o from Users o</code> */
    public List<Users> getUsersFindAll() {
        return em.createNamedQuery("Users.findAll").getResultList();
    }

    /** <code>SELECT o FROM Users o WHERE o.login = :l AND o.password = :p</code> */
    public Users getUsersFindUserByLoginPass(String l, String p) {
        try {
            return (Users)em.createNamedQuery("Users.findUserByLoginPass").setParameter("l", l).setParameter("p",
                                                                                                             p).getSingleResult();
        } catch (Exception e) {
            // TODO: Add catch code
            return null;
        }

    }

   ....
}



наверное я где то должен объявит HttpSession и проверять состояния, а точнее if(HttpSession.isNew()){...}
или я что то пропустил?
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886461
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Про @Stateless бин предположил неверно. Вот только непонятно зачем там SessionContext, если оно не используется. "Амулетами" классы обвешиваете? )
Музаффарпроисходит чудо... а точнее user1 становится user2 помогите разобраться.В чем это выражается?
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886510
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA,
на сколько я понял дело в getServletContext().setAttribute("new", user);
я должен передавать объект в атрибуте сессии типа
request.getSession().setAttribute("new", user); или session.setAttribute("new", user);
...
Рейтинг: 0 / 0
сессии в Web (EJB)
    #38886651
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарWGA,
на сколько я понял дело в getServletContext().setAttribute("new", user);
я должен передавать объект в атрибуте сессии типа
request.getSession().setAttribute("new", user); или session.setAttribute("new", user);

Читаем ооф доку первым делом - офф дока
Ниже основная мысль.
There is one context per "web application" per Java Virtual Machine. (A "web application" is a collection of servlets and content installed under a specific subset of the server's URL namespace such as /catalog and possibly installed via a .war file.)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / сессии в Web (EJB)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]