문제

배경:우리는 2002~2003년에 Java 기반의 이전 CMS로 작성된 시스템을 보유하고 있습니다.우리는 tomcat, 스트라이프 및 sitemesh를 사용하여 새로운 기능을 계속해서 발전시키고 싶습니다.우리는 이전 CMS에서 가져온 탐색, 레이아웃, "포드", js, CSS 등을 몇 가지 새로운 앱에 적용하여 일관된 모양과 느낌을 갖습니다.

이제 진행 중인 모든 코드 중복을 제거하기 위한 일종의 솔루션이 필요합니다.현재 앱은 동일한 VM에서 실행되고 있지만 상황은 바뀔 수 있습니다.우리는 모든 tomcat 인스턴스가 일부 공통 요소에 액세스할 수 있는 방법이 필요합니다(그리고 해당 요소는 서버 측 작업을 수행할 수도 있고 필요하지 않을 수도 있습니다).

지금까지 우리가 생각해낸 최고는 c:import를 사용하여 필요한 것을 가져오고 바로 연결하는 상당히 표준적인 사이트메시 데코레이터를 만드는 것입니다.이 솔루션에는 문제가 발생하고 실패 지점이 발생할 수 있는 일부 네트워크 오버헤드가 있습니다.<%@ include file="/something.jsp" %>도 살펴봤지만 이는 단지 상황에 따른 것인 것 같습니다.c:import를 사용하여 localhost를 가리킬 수 있는데, 이것이 지금까지 최고의 솔루션인 것 같습니다.

이를 더 간단하게 만들 수 있는 다른 템플릿/장식 프레임워크(타일?)가 있습니까?우리는 무엇을 놓치고 있나요?

도움이 되었습니까?

해결책

여기서 무엇을 하려는지 잘 모르겠습니다.내 해석은 이렇습니다.여러 앱에서 재사용하려는 리소스가 많이 있습니다.이러한 파일을 모든 앱에 복제하고 싶지는 않을 것입니다. 그렇게 하면 앱 전체에서 일관성을 유지하기가 어렵기 때문입니다.

이것이 귀하의 질문이라면 공통 리소스를 jar 파일에 보관하는 것이 좋습니다.이는 다음과 같은 몇 가지 이점을 제공합니다.

  1. 귀하의 리소스는 로컬에 있으므로 네트워크 오버헤드가 없습니다.
  2. 리소스 업데이트를 제어할 수 있습니다.

nr 2의 예:일반적인 페이지 레이아웃은 page-layouts-1.x.jar에 보관됩니다.이를 사용하는 앱에 영향을 주지 않는 페이지 레이아웃의 마이너 릴리스를 계속 만들고 있습니다. 즉, 드롭인 교체입니다.어느 날, 앱을 완전히 다시 디자인하고 page-layouts-2.0.jar을 출시하기로 결정했습니다.이를 사용하는 앱을 일부 다시 작성해야 합니다.이제 앱이 페이지 레이아웃을 서버의 공유 클래스 로더에 유지하는 대신 번들로 묶는다면 2.0 레이아웃으로 마이그레이션하는 것이 전부 아니면 전무가 아닙니다.한 번에 하나의 앱을 마이그레이션하여 2.0 레이아웃을 사용하고 다른 앱은 계속 1.x 레이아웃을 사용할 수 있습니다.

우리는 JSF와 Facelets를 사용하여 이를 매우 성공적으로 수행하고 있습니다.

당신은 한 번보고 싶을 수도 있습니다 웹렛.SiteMesh나 Tiles가 클래스 경로에서 리소스를 제공하기 위한 직접적인 지원을 받았는지 여부는 알 수 없지만 이를 수행하도록 조정할 수 있다고 가정합니다.

도움이 되길 바랍니다

다른 팁

우리는 몇 년 동안 SiteMesh를 사용해 왔으며 그것에 대해 혼합 된 감정을 가지고 있습니다.

ApplyDecorator를 사용하기 위해 표준 JSP 태그 파일 (.tag 또는 .tagx)을 작성하는 것이 좋습니다. ApplyDecorator 태그는 태그 파일의 출현으로 효과적으로 쓸모없는 것으로 생각하지만 너무 많은 SiteMesh 사용자는 눈치 채지 못했습니다.

우리의 거의 모든 Sitemesh 사용은 이런 종류였습니다. JSP 페이지가 명시 적으로 레이아웃이라고 할 수있는 몇 가지 공통 페이지 템플릿이 있습니다. "표준 레이아웃을 사용하십시오. 여기에 탐색 메뉴가 있으며 여기에 페이지의 본문이 있습니다." 태그 파일은이 기능의 정확한 복제본이지만 표준화, 모든 J2EE 웹 도구에서 지원하며 다른 종속성이 아닌 컨테이너에 내장됩니다.

JSP 페이지 자체가 Siteemesh를 전혀 참조하지 않는 페이지를 진정으로 꾸미기 위해서는 높은 수준에서 의미가 있다고 생각하지만 여전히 전체 페이지가 다시 구문 분석되는 것을 좋아하지 않습니다.

이 두 번째 문제는 Sitemesh의 잘못이 아닙니다. Servlet API가 함께 작업 해야하는 경우 다른 무엇을 할 수 있는지 모르겠습니다. 그러나 스트림 기반 서블릿 API에 대한 DOM 기반 대안이 가치가 있는지 궁금합니다. 다시 말해, 서블릿이 스트림에 출력을 쓰지 않고 트리에 노드를 추가하면 어떻게해야합니까? 이것은 잘 형성된 출력을 시행하고 SiteMesh와 같은 구조적 변환을 수행하거나 출력을 XHTML, HTML 또는 JSON과 같은 다른 형식으로 인코딩하는 것이 더 저렴하게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top