Jsp页面层次结构

时间:2011-07-05 23:29:11

标签: jsp

我有一个复杂的网站设计(从网上下载设计+ css),我想巧妙地使用include,以便我可以将设计与内容分开。

然而,这有一些复杂性。内容位于<div>内的<div>内,等等。 我如何使用包括基本上,我可以在自己的文件中拥有网站的每个可重复的方面(标题,导航),对于每个实际的页面,在jsp中没有任何设计?

即,在某个页面中,我只想拥有

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

1 个答案:

答案 0 :(得分: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>

然后所有请求都将填充内容变量,然后加载布局页面。这样您就不必在整个地方重复包含。

实施例: 在servlet中,您可以为变量赋予如下值:

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

这样,在layout.jsp页面上将显示内容。你当然可以创建几个这样的变量占位符。

第三种选择: 使用jsp:include标记包含动态内容。例如 layout.jsp页面如下所示:

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

include标记将获取给定网址的页面。使用此建议的原因是当您有更复杂的显示时,最好使用JSP页面来构建显示。然后,servlet只关注业务逻辑。您可以为每个显示创建单独的jsp页面。 servlet将如下所示:

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