튜토리얼에 의해 Bean가 직렬화 가능 오브젝트를 구현하는 경우와, 그렇지 않은 경우가있는 이유는 무엇입니까? 네트워크를 통해 보낼 때 객체를 직렬화해야한다는 것을 알고 있으므로 세션에서 사용되는 각 빈은 직렬화 가능 객체를 구현해야하며 JSP 페이지에 정의 된 빈은 HTTP 요청 집합을 사용하여 전송되지 않아야합니다.JSP에서의 빈의 직렬화
답변
그래서 그
당신이 생각하는 것 세션에 사용 된 각 빈이해야 는 Serializable를 구현 을 증명 않습니다, 내가 네트워크를 통해 그것을 를 보낼 때 객체가 직렬화해야한다 알고 세션의 해당 객체가 http 전송에서 클라이언트로 전송됩니까? 그건 분명히 사실이 아닙니다. tranferred는 세션 아이디 (일반적으로 쿠키에 있음)입니다. 서블릿 컨테이너 (예 : Tomcat)는 세션 ID로 인덱싱 된 세션 객체 (Bean 또는 not)를 메모리에 유지합니다.
게다가 직렬화는 네트워크 전송에만 적용되는 것이 아니라 영구 저장 장치 (예 : 디스크)에 저장 /로드하는 데에도 적용됩니다.
많은 서블릿 컨테이너는 일반적으로 (설정에 따라) 은 응용 프로그램 서버가 다시 시작될 때까지 생존 할 수 있도록 디스크에 대한 세션 객체를 유지합니다 (). 이 시나리오에서는 세션 객체를 직렬화 할 수 있어야합니다.
어쨌든 Serializable 인터페이스를 구현하는 것은 모든 Java bean에 대해 좋은 점이며 일반적으로 쉽습니다.
잘 정의 된 Java Bean implements Serializable
(just a tag interface anyway) 또는 Externalizable
(1.4 이상) 따라서 Bean 클래스가 적합하지 않으면 올바른 형식이 아닙니다.
은 Serializable을 구현합니다. Bean에 잘 알려진 부모 클래스가 있으면 자주 벗어날 수 있습니다.
나는 일요일 개발자가 콩이 시리얼 라이저를 구현할 수있는 또 다른 합당한 이유가 있다고 생각한다! – palAlaa
@Alla, 저는 10 년 동안 Sun Java Architect였습니다. 정의에 의해 Bean은 직렬화 가능을 구현해야한다. Bean은 지속적으로 유지 보수가 가능해야하기 때문이다. 오래 전에 필자는 런타임 중에 jar 파일에서 곰을 드래그 앤 드롭 할 수있는 Java 편집기를 작성하여 그 트릭과 인트로 스펙 션을 사용했습니다. –
Java Beans 스펙에서는 bean을 직렬화 할 필요가 없다는 것을 확신합니다. (실제로 bean이 무엇인지 정의하지는 않지만 관리합니다.) IIRC에서 Servlet 사양은 세션에 저장된 객체를 직렬화 할 수 있어야합니다. –
Maaaaaaaaaaaaaaaaany thanx이 유용한 정보가 있습니다. 세션 ID가 HTTP 프로토콜을 사용하여 전송하는 유일한 것인지 몰랐습니다. – palAlaa