2012-03-27 3 views
1

내 응용 프로그램에는 다음과 같은 아키텍처가 있습니다.Spring Service Bean as Servlet

클라이언트 (GWT) < --calls -> 서블릿 < --calls -> 서비스 < --calls -> 다오

나는 변화를 쉽게이 구조를 만들고 싶어. 예 : Dao 레이어에서 객체의 삽입 된 ID를 반환하려면 클라이언트에서 필요하기 때문에 서비스와 서블릿 레이어도 업데이트해야합니다. 그래서이 작은 변화를 위해 3 개의 레이어 (3 개의 클래스와 3 개의 인터페이스)를 모두 업데이트해야 6 개 장소를 변경할 수 있습니다. 왜 내가 DAO 레이어가 필요한지 알 겠어. 나는 서비스 레이어가 필요한 이유도 얻는다. 서비스 레이어를 서블릿으로 사용할 수없는 이유는 무엇입니까? 현재 모든 서블릿이 요청을 서비스 계층으로 전달하고 있습니다.

자바 서블릿에 대한 위키 백과의 기사는 말한다 :

서블릿은 가장 자주
이 같은 결과로 동적 콘텐츠를 제공하는 HTML 양식에서 제출 된
1 프로세스 나 데이터를 저장하는 데 사용되는

데이터베이스 쿼리
3 난에 만들

1, 2 단지 데이터베이스 호출되는 비 저장 HTTP 프로토콜에 존재하지 않는 상태 정보를 관리 내 DAO 계층과 서비스 계층은 이미 추가 비즈니스 로직을 가능하게합니다. 3 현재 세션으로 작업하지 않습니다. 지금까지 로그인이 없었고 아키텍처 만 가지고 놀았지만 서비스 계층에서도이 문제를 처리 할 수 ​​있다고 생각합니다.

나는이 구조 변화에 대한 COS 및 장점을 알고 싶어

장점 :

  • 한 층 이하의 변경이 발생하는 경우 업데이트 할 수 있습니다.

단점

  • 서비스 레이어 complexer을 가져옵니다.

답장을위한 Thx.

답변

2

서블릿 계층은 세션에 대한 액세스를 허용하기 때문에 필요합니다.

또한 서비스 레이어가 다른 애플리케이션에서 서비스 및 DAO 레이어를 다시 사용할 수 있기를 원하기 때문에 서비스 레이어가 HTTP에 대해 알 필요가 없도록해야합니다 (예 : 다시 사용하는 데스크톱 애플리케이션을 작성하는 경우 그 레이어들)과 서블릿 API를 포함 할 필요가 없을 것입니다.

필요하다면 서비스 및 DAO 레이어에서 메소드를 복제하지 않기 위해 간단한 경우에 대해 서블릿에서 직접 DAO 레이어를 호출 할 수 있습니다.

서블릿 API에는 웹 응용 프로그램에 보안을 구현하기에 적합한 필터가 있습니다.

웹 응용 프로그램에 이미 Spring 프레임 워크를 사용하고 있다면 Spring Security을 사용할 수 있습니다.

+0

서블릿 계층이기 때문에 서비스 계층에서 스프링 보안을 사용할 수도 있습니까? 아니면 제가 잘못 했나요? – SCBoy

+1

스프링 보안의 기본 진입 점은 서블릿 스펙의 필터를 구현하므로 서블릿 계층에 빌드됩니다. 그것은 서블릿 레이어 자체가 아닙니다. –

+0

서비스 레이어의 메소드에 스프링 보안 (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#ns-method-security) 주석을 달 수도 있습니다. AOP를 사용하거나 정규 코드를 사용하고 서비스 계층의 사용자 객체를 전달하여이 모든 작업을 수행 할 수 있습니다. –

관련 문제