上次用jQuery实现的网站统一风格导航(或标题栏),必须在页面中加入一个<div>容器(用来盛放导航栏页面),再加上jQuery代码,代码比较啰嗦。css
这回用jsp的include页面指令(directive)来实现。html
首先也要有导航栏页面:java
<!-- 首先要设计一个导航页:--> <link rel="stylesheet" href="css/site.css"> <div id="top" class="menu"> <ul> <li><a href="./main.html" title="Home Page">Main</a></li> <li><a href="./link1.html" title="Link1">Link 1</a></li> </ul> </div>
此次把css样式引用代码也放到导航栏页面中。jsp
注意导航栏页面不该该包含<html><body><head>部分。由于当导航栏页面被包含在正常页面中时,整个页面会出现“两套”<html><body><head>,这是错误的。可是去除多余的标签后,导航栏页面就不能做为单独的页面使用了(只能嵌入宿主页面,做为页面的一部分使用)。网站
样式代码:spa
/* ul li以横排显示 */ /* 全部class为menu的div中的ul样式 */ div.menu ul { list-style:none; /* 去掉ul前面的符号 */ margin: 0px; /* 与外界元素的距离为0 */ padding: 0px; /* 与内部元素的距离为0 */ width: auto; /* 宽度根据元素内容调整 */ } /* 全部class为menu的div中的ul中的li样式 */ div.menu ul li { float:left; /* 向左漂移,将竖排变为横排 */ } /* 全部class为menu的div中的ul中的a样式(包括还没有点击的和点击过的样式) */ div.menu ul li a, div.menu ul li a:visited { background-color: #465c71; /* 背景色 */ border: 1px #4e667d solid; /* 边框 */ color: #dde4ec; /* 文字颜色 */ display: block; /* 此元素将显示为块级元素,此元素先后会带有换行符 */ line-height: 1.35em; /* 行高 */ padding: 4px 20px; /* 内部填充的距离 */ text-decoration: none; /* 不显示超连接下划线 */ white-space: nowrap; /* 对于文本内的空白处,不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。 */ } /* 全部class为menu的div中的ul中的a样式(鼠标移动到元素中的样式) */ div.menu ul li a:hover { background-color: #bfcbd6; /* 背景色 */ color: #465c71; /* 文字颜色 */ text-decoration: none; /* 不显示超连接下划线 */ } /* 全部class为menu的div中的ul中的a样式(鼠标点击元素时的样式) */ div.menu ul li a:active { background-color: #465c71; /* 背景色 */ color: #cfdbe6; /* 文字颜色 */ text-decoration: none; /* 不显示超连接下划线 */ }
引用页面:设计
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Index.jsp</title> </head> <body> <header> <%@ include file="navbar.html" %> </header> </body> </html>
用jsp的include页面指令,引用页面起做用的代码只有1行,很是简洁。code
另外使用jsp标准动做include也能够实现一样的效果,即把<%@ include file="navbar.html" %>换成<jsp: include page="navbar.html" />。可是include页面指令是在页面转换成servlet代码时插入的内容。而jsp标准动做则是在运行时获取的response响应(把响应结果填充到结果页面中),能够实现包含动态内容。缺点是会带来一些额外的开销,因此若是只是包含统一的静态内容,仍是建议使用include页面指令。htm
JSTL的<c:import>标签也能够实现<jsp:include>一样的效果,并且它还能够导入本容器外的内容。servlet
参考《Head first Servlet & JSP 2nd》(2008) P403