나는 스레드 세이프 서블릿을 작성하는 가장 쉬운 방법 중 하나는 모든 변수를 로컬에서 선언하는 것이라는 것을 알고있다.서블릿에서 doGet과 doPost 메소드간에 지역 변수를 전달하는 방법은 무엇입니까?
내 프로그램이 doPost를 호출하면 db라는 데이터베이스 인스턴스를 생성합니다. 나는 그 인스턴스를 doGet 메쏘드에 전달하려고하지만, db를 전역 적으로 선언 할 필요는 없다. 내가 할 수있는 방법이 있니?
나는 스레드 세이프 서블릿을 작성하는 가장 쉬운 방법 중 하나는 모든 변수를 로컬에서 선언하는 것이라는 것을 알고있다.서블릿에서 doGet과 doPost 메소드간에 지역 변수를 전달하는 방법은 무엇입니까?
내 프로그램이 doPost를 호출하면 db라는 데이터베이스 인스턴스를 생성합니다. 나는 그 인스턴스를 doGet 메쏘드에 전달하려고하지만, db를 전역 적으로 선언 할 필요는 없다. 내가 할 수있는 방법이 있니?
doGet 또는 doPost 메서드에서 데이터베이스에 새로 연결될 수있는 DataSource 개체를 참조하는 클래스 변수를 사용하는 것이 좋습니다. 이것은 밟아도 안전한 방식입니다. 브라우저 또는 HTTP 클라이언트가 GET을 실행
그러나 코드의 더 나은 유지 보수를 들어, 당신은 아마 알다시피에 대한 JPA
,의 doGet()과의 doPost()가 다른 상황에서라고 읽어야합니다 (또는 POST HTTP 요청).
응용 프로그램이 두 요청간에 공통된 기능을 갖고있는 것처럼 들립니다. 내 권장 사항은 공유 기능을 doGet()과 doPost() 모두 호출 할 수있는 서블릿 내의 다른 메소드 (또는 메소드)로 추상화하는 것입니다.
모두 기능이 공유되는 경우 servlet 컨테이너가 doGet() 또는 doPost() 대신 모든 요청 유형을 호출하는 service() 메소드를 구현할 수 있습니다.
doPost()에서 doGet()을 호출하는 이유는 무엇입니까? – Wolfgang
doPost()에서 호출하지 않습니다. 데이터베이스를 한 번 인스턴스화하고 해당 인스턴스를 프로그램에서 사용하려고합니다. – moon4e
당신은 "전역 적"이라고 선언하고 싶지 않다고 말합니다. (Java에서는 그런 것이 없지만 C 용어입니다.) 그러나 당신은 어떤 종류의 싱글 톤을 원합니다 - 그것은 나에게 모순처럼 들립니다. – Wolfgang