2012-04-05 5 views
11

자바 서블릿에 대한 일반적인 질문과 요청을 처리하는 가장 좋은 방법. 나는 원격 서버 요청에서 내의 doGet 방법 치면 : 내 말에 요청을 처리하고 요청자에게 내 출력을 생성 한 후자바 서블릿 - 세션 정리 (HttpServletRequest)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    .... 
    <do work here> 
    .... 
    kill(request); 
} 

private void kill(HttpServletRequest request) { 
//How do I kill the user session here? 
} 

을, 나는 기본적으로 자신의 세션을 "죽이고"싶어. 현재, 그 세션은 오래 머무르고 따라서 메모리를 먹는다. 그런 다음 최대 값에 도달하면 다른 모든 호출 시간이 초과됩니다.

내가 요청 객체를 사용하여 HttpSession이 개체를 만드는 시도했지만 같은 결과를 얻었다

:

HttpSession session = request.getSession(); 
session.invalidate(); 
+1

사용하여 세션에서 속성을 제거 할 수 있습니다. 아마도 – BalusC

+0

. 궁극적 인 목표는 요청을 처리 한 후 세션 풀에서 세션을 종료하고자하는 것입니다. 그것이 요청 객체를 죽이거나 세션 객체를 생성하여 삭제할 지 여부는 확실하지 않습니다. – user82302124

답변

20
HttpSession session = request.getSession(false); 
if (session != null) { 
    session.invalidate(); 
} 

와 시도는 제안으로 갈 수있는 적절한 방법입니다 선적 서류 비치. 새 요청을 보내면 새 세션이 만들어집니다.

세션이 여전히 메모리를 차지한다고 언급했습니다. 세션에서 해당 객체에 대한 다른 참조가 있습니까?

또한 한 번 봐 가지고 할 수 있습니다 : 여러 요청 사이에 상태를 갖는, 즉 세션의 동작을 싶지 않는 경우 Servlet Session behavior and Session.invalidate

2

session = request.getSession(false); // so if no session is active no session is created 
if (session != null) 
    session.setMaxInactiveInterval(1); // so it expires immediatly 
1

합니다. 왜 세션을 만들고/사용하고 싶습니까? 세션을 만들지 말고 세션에 아무 것도 저장하지 마십시오.

코드가 세션을 사용하고 있지 않은지 확인하려면 getSession() 메서드를 덮어 쓰는 요청 래퍼를 작성하십시오.

5

당신은 내가 당신의 구체적인 문제는 다른 방법으로 해결해야하는 인상을

session.removeAttribute("attribute name");