在我的Web应用程序中,我得到了包含默认标头内容的Header.jsp文件。我在所有其他页面中使用jsp:include标签将其包含在每个页面的body标签内。
Header.jsp包含自己的HEAD标记,用于指定默认元标记,链接样式表,脚本和一些HTML元素。同时,我将在所有其他单个页面中使用另一组HEAD标记来定义标题,页面特定脚本和样式表。
例如:
header.jsp中
<head>
<link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script src="js/jquery.js"></script>
<link rel=stylesheet type="text/css" href="dashboard.css" >
</head>
<h2>Dashboard</h2>
main.jsp中
<!DOCTYPE html>
<html>
<head>
<title>Main page</title>
<script src="main.js"></script>
</head>
<body>
<jsp:include page="Header.jsp" flush="true" />
.....
other HTML contents specific to main page
.....
</body>
</html>
这样做是否有效?
这不是一个好的解决方案,但绝对有效。
人们通常在理论上回答这些问题,比如“不,因为它不符合标准”。没错,事实并非如此。未来的浏览器可能不支持它,一些源解析器可能会混淆,HR / IT专家检查您的投资组合可能认为您比Jon Snow知道的更少,以及各种不好的事情。理论上。但它确实发生在现实世界中,并且浏览器并不愚蠢:它们知道你的意思,它们将采用两个头标记并按预期工作。
而且这不仅仅是偶然的。 他们有很好的理由:
1.头标签是可选的。 浏览器甚至在其外部接受标题内容,因此实际上它们完全忽略了标签本身。如果他们忽略了一个,他们也可能会忽略几个。
2.游客很珍贵。 浏览器希望您享受您的时间。他们希望向您展示他们可以从他们所拥有的混乱中组成的最佳页面。这是他们的意图,他们想告诉你互联网有效,而不是教你最喜欢的网站有多糟糕。如果他们能够找出html代码想要表达的内容(并且结构中没有致命的歧义),他们将尽力修复页面。
3.糟糕的标记容差是一件事。 浏览器不只是耐心和宽容,但有时他们会做杂技动作来让你的东西工作。看看这个可怕的烂摊子:
<!-- no doctype! -->
<!-- no HTML tag! we're all gonna die! -->
<head>
<style>
body {background:#002233;}
</style>
</head>
<head><!-- let's twist again! -->
<style>
body {color:white}
</style>
<!-- we didn't even close the second one!! -->
See this text?<br>
With the background AND color properly set?<br>
<br>
Your browser's quite a badass.
关于浏览器容差,here's a lot more有超丑的例子 - 确保你忘记了你回来时看到的一切!)
所以是的,当然,原则是“成为您浏览器的好朋友”,无论它如何巧妙地修复您的错误。但是,如果你在一个黑暗的地牢中醒来,周围有饥饿的狮子,你唯一的出路是使用两个<head>标签 - 好吧,不要犹豫!它没有破坏语法,它不是严重违反HTML5规则 - 它只不过是一种方便的欺骗。并且不要因为非标准的,非整洁的网站繁荣更加普遍的普遍神话:人们通常只是不确定并且想要保持安全。通常情况下,他们将地狱描述为验证者失败的网络作者所在的地方。
TLDR:在实践中,两个头标签工作。
现在请尽可能只有一个。
很好的回应@ Gwenc37。您可以在任何其他标签中添加任何标签,但始终最好遵守W3C标准和规范。在项目的后期,您可能会遇到HTML无法在浏览器中正确解析甚至更糟糕的情况。
为了安全起见,请遵守W3C标准。这样你就不会出错。希望这可以帮助。
这是你可以尝试的想法
在你的主脑中这样做
<!DOCTYPE html>
<html>
<head>
<link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script src="js/jquery.js"></script>
<link rel=stylesheet type="text/css" href="dashboard.css" >
请注意,我已经离开了最终标签。然后在你的所有文件中,你必须关闭head标签,或添加额外的标题,然后关闭你的头标签,例如
<title>Main page</title>
<script src="main.js"></script>
</head>
<body>
<jsp:include page="Header.jsp" flush="true" />
.....
other HTML contents specific to main page
.....
</body>
</html>
至于你的页面标题,你可以运行一个小PHP来确定你在哪个页面
根据W3C标准,不!你不能拥有它。
在您的情况下,您使用JSP作为服务器端脚本。通过对样式表/脚本/其他html元素使用CONSTANTS可以解决该问题。
您只需根据页面要求在“main.jsp”文件中添加条件。
根据W3C标准,您不能拥有两个HEAD标签。
关于您的问题,您可以调用不带HEAD标记的header.jsp文件,也可以重命名为scripts.jsp或constants.jsp。
例如:
header.jsp中
<link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script src="js/jquery.js"></script>
<link rel=stylesheet type="text/css" href="dashboard.css" >
main.jsp中
<!DOCTYPE html>
<html>
<head>
<title>Main page</title>
<script src="main.js"></script>
<jsp:include page="Header.jsp" flush="true" />
</head>
<body>
.....
other HTML contents specific to main page
.....
</body>
</html>