2012-03-18 2 views
0

나는 스레드 세이프 서블릿을 작성하는 가장 쉬운 방법 중 하나는 모든 변수를 로컬에서 선언하는 것이라는 것을 알고있다.서블릿에서 doGet과 doPost 메소드간에 지역 변수를 전달하는 방법은 무엇입니까?

내 프로그램이 doPost를 호출하면 db라는 데이터베이스 인스턴스를 생성합니다. 나는 그 인스턴스를 doGet 메쏘드에 전달하려고하지만, db를 전역 적으로 선언 할 필요는 없다. 내가 할 수있는 방법이 있니?

+0

doPost()에서 doGet()을 호출하는 이유는 무엇입니까? – Wolfgang

+0

doPost()에서 호출하지 않습니다. 데이터베이스를 한 번 인스턴스화하고 해당 인스턴스를 프로그램에서 사용하려고합니다. – moon4e

+0

당신은 "전역 적"이라고 선언하고 싶지 않다고 말합니다. (Java에서는 그런 것이 없지만 C 용어입니다.) 그러나 당신은 어떤 종류의 싱글 톤을 원합니다 - 그것은 나에게 모순처럼 들립니다. – Wolfgang

답변

1

doGet 또는 doPost 메서드에서 데이터베이스에 새로 연결될 수있는 DataSource 개체를 참조하는 클래스 변수를 사용하는 것이 좋습니다. 이것은 밟아도 안전한 방식입니다. 브라우저 또는 HTTP 클라이언트가 GET을 실행

그러나 코드의 더 나은 유지 보수를 들어, 당신은 아마 알다시피에 대한 JPA

1

,의 doGet()과의 doPost()가 다른 상황에서라고 읽어야합니다 (또는 POST HTTP 요청).

응용 프로그램이 두 요청간에 공통된 기능을 갖고있는 것처럼 들립니다. 내 권장 사항은 공유 기능을 doGet()과 doPost() 모두 호출 할 수있는 서블릿 내의 다른 메소드 (또는 메소드)로 추상화하는 것입니다.

모두 기능이 공유되는 경우 servlet 컨테이너가 doGet() 또는 doPost() 대신 모든 요청 유형을 호출하는 service() 메소드를 구현할 수 있습니다.

관련 문제