2015-01-15 3 views
0

나는이 질문에 많은 시간을 요구 받았지만 실제로 그것을 얻는 방법을 이해할 수는 없다는 것을 알고있다. 나는 작은 서블릿을 만들었고, 로그인 폼 후에 stateful 세션 빈 (엔터티를 검색)을 설정하고 사용자를 집으로 리디렉션했다. 서블릿 그렇게 작동합니다서블릿에서 리디렉션되는 jsp의 사용자 이름

@EJB 
private SessionCart ses; 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
String email = request.getParameter("email"); 
String password = request.getParameter("password"); 
ses.login(email, password); 
} 

을 이제 SessionCart는 이름을 돌려 줄 방법이 있습니다 (방법은 .getNome()) 그리고 난 사용자가 집으로 리디렉션 동안 trought HTTP를 전달하고 싶습니다. 요청 객체를 사용하여 리디렉션 할 수 있지만 (예를 들어 localhost : 8080/web/form/login URL에 서블릿이 있고 localhost : 8080/web/form 주소의 홈페이지가 있습니다./login이지만 localhost : 8080/web /에있을 수도 있고 브라우저가 이미지와 다른 요소를 인식하지 못할 수도 있습니다). 어떻게하면이 일을 할 수 있을까요?

업데이트 : 당신은 HttpSession를 사용하고 request 객체에서 세션을 얻고, 그 안에 빈 둘 필요가 @developerwjk

@Stateful 
@LocalBean 
public class SessionCart { 

@Resource 
private SessionContext context; 
@PersistenceContext(unitName="ibeiPU") 
private EntityManager manager; 
private LinkedList<Vendita> carrello; 
private LinkedList<Integer> quantita; 
private Persona utente; 
/* 
* Business methods 
*/ 
} 
+0

response.addCookie (c)와 함께 쿠키를 설정하려했는데, 여기서 c는 사용자 이름이 들어있는 쿠키이지만 브라우저는 리디렉션 후 보내지 않습니다. ( – Neo87

+0

실제로 세션 콩을 세션에 넣어야합니다. 그냥'SessionCart'라고 명명하면 세션에 넣지 않습니다. – developerwjk

+0

그리고 집중하십시오. 지도 전체를 뛰어 넘지 마십시오. 'HttpSession'을 찾아서 사용하는 방법 ... 세션에 마술처럼 나타나지 않기 때문에 쿠키를 쓰는 대신 세션에 "Session"이라는 단어가 포함 된 이름을 주면됩니다. – developerwjk

답변

0

에 대한 SessionCart에 대한 몇 가지 코드 : 그런 다음

private HttpSession session; 
private SessionCart cart; 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
{ 
    String email = request.getParameter("email"); 
    String password = request.getParameter("password"); 
    session = request.getSession(); 
    //I assume the cart was initialized somehow, maybe in the init() method 
    cart.login(email, password); 
    session.setAttribute("cartbean", cart); 
    //there should be a redirect here to some other page 
    response.sendRedirect("home"); 
} 

을 다른 페이지에서 카트 빈을 검색하려면 다음을 수행하십시오.

HttpSession session = request.getSession(); 
SessionCart cart = (SessionCart)session.getAttribute("cartbean"); 
+0

세션 빈은 컨테이너에 의해 자동으로 sessioncontext에 상대적이지 않아야합니까? 왜냐하면 나는 j2ee에 관한 책을 읽고 있는데 아직 이것을 본 적이 없다. – Neo87

+0

@ Neo87,'SessionCart'는 당신이 쓴 것입니까? 어쩌면 코드가 무엇인지 명확하게하기 위해 거기에서 코드를 게시해야합니다. 하지만 기본적으로'SessionCart'의 생성자가'HttpSession'을 사용하지 않는다면 이런 식으로해야 할 것입니다. 세션을'SessionCart'에 넘겨 주면 세션에 물건을 넣을 수 있습니다. – developerwjk

+0

@ Neo87,'SessionCart cart = new SessionCart (request.getSession())'처럼하고 카트 클래스에서'HttpSession'을 사용하십시오. 그러나 여전히 다음 페이지의'SessionCart' 객체에 대한 참조를 가지려면 앞서 보았 듯이'SessionCart' 객체 자체를 세션에 넣어야합니다. – developerwjk