2011-07-05 8 views
2

복잡한 웹 사이트 디자인 (웹에서 디자인 + CSS를 다운로드 함)이 있고 include을 독창적으로 사용하여 디자인과 콘텐츠를 분리 할 수 ​​있습니다.JSP 페이지 계층 구조

그러나 여기에는 약간의 복잡성이 있습니다. 콘텐츠는 <div> 안에 있으며 <div> 등입니다. 포함을 어떻게 사용합니까? 기본적으로 사이트의 각 반복 가능한 부분 (헤더, 탐색)을 자체 파일에 포함 할 수 있으며 실제 페이지마다, jsp에는 디자인이 없습니다.

즉, 특정 페이지에, 난 단지 당신이 대부분의 작업을 수행하기 때문에

//possible includes 
<h1>Hello World!</h1> 
//possible includes 
+0

(http://www.opensymphony.com/sitemesh/), 당신이 원하는 정확히 꽤 많은 작업을 수행한다. 그러나 sitemesh의 뒤에 그룹에는 약간 붕괴, 또는 무언가가 보였다. – aroth

+0

JSP의 후속 Facelets를 사용할 기회가 있습니까? [이 답변]의 두 번째 부분에서 원하는 예제를 볼 수 있습니다 (http://stackoverflow.com/questions/4792862/how-to-include-another-xhtml-in-xhtml-using-jsf-2 -0-facelets/4793959 # 4793959). JSF를 MVC 프레임 워크로 채택하기 만하면됩니다. – BalusC

+0

@BalusC 이것은 대학 프로젝트를위한 것입니다 ... 아니요. –

답변

2

당신은 아마 Apache Tiles 보라 갖고 싶어.

당신이 두 개의 파일을 만들 수 있습니다 자신의 롤하려면 페이지의 시작과 끝 header.jsp를하고는 footer.jsp 말 :

header.jsp를

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     //main content 

하고, footer.jsp

 </div> 
    </body> 
    </html> 

콘텐츠 페이지에 두 가지를 모두 포함하십시오.

또는 단일 layout.jsp 페이지를 만들 수 있습니다 :

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     <c:out value="${content}"/> 
     </div> 
    </body> 
    </html> 

는 모든 요청은 콘텐츠 변수가 다음 레이아웃 페이지를로드 채 웁니다. 이 방법을 사용하면 모든 곳에서 포함을 반복하지 않아도됩니다.

예 :

 String content = "<h1>Hello World!</h1>"; 
     request.setAttribute("content", content); 
     //forward to layout.jsp 

이 방법, 내용이 표시됩니다 layout.jsp 페이지 : 는 서블릿에서는 변수이 같은 값을 제공 할 수 있습니다. 물론 가변적 인 placeholder를 여러 개 만들 수 있습니다.

세 번째 옵션 : 동적 콘텐츠를 포함하려면 jsp : include 태그를 사용하십시오. 예를 에 대한 layout.jsp 페이지는 다음과 같이 표시됩니다

<html> 
     <head> 
     </head> 
     <body> 
     <div> 
      //header content 
     </div> 
     <div> 
      <jsp:include page="${page}"/> 
     </div> 
     </body> 
    </html> 

(가) 태그가 지정된 URL에서 페이지를 가져옵니다 있습니다. 이 제안을 사용하는 이유는 더 복잡한 디스플레이가있는 경우 JSP 페이지를 사용하여 디스플레이를 구성하는 것이 더 나을 것이기 때문입니다. 그런 다음 서블릿은 비즈니스 로직에만 관심을 갖습니다. 각 디스플레이에 대해 별도의 jsp 페이지를 작성할 수 있습니다. 서블릿은 다음과 같이됩니다 : 나는 [이 SiteMesh] 추천 거라고

//business logic 
    //save the data to be displayed in the request 
    String page = "nextpagetodisplay.jsp"; 
    request.setAttribute("page", page); 
    //forward to layout.jsp 
+0

이'layout.jsp' 사용법의 예를 보여줄 수 있습니까? –

+0

@Amir Rachum 답변에 조금 더 추가했습니다. 희망이 도움이됩니다. –

+0

그래서 모든 페이지가 서블릿에서 유래 되었습니까? –