一尘不染

Jsp页面层次结构

jsp

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

但是,这样做有些复杂。内容位于,等<div>内部<div>。我如何使用包括在内,以便基本上可以将站点的每个可重复方面(标题,导航)保存在其自己的文件中,而对于每个实际页面,都没有在jsp中设计?

也就是说,在某个页面中,我只想拥有

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

阅读 536

收藏
2020-06-10

共1个答案

一尘不染

您可能应该看看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标签将在给定的URL处获取页面。使用此建议的原因是,当您拥有更复杂的显示时,最好使用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
2020-06-10