在我的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>
这样做是否有效?
答案 0 :(得分:47)
这不是一个好的解决方案,但绝对有效。
人们通常在理论上回答这些问题,例如&#34; no,因为它不符合标准&#34; 。没错,不行。未来的浏览器可能不支持它,一些源解析器可能会混淆,HR / IT专家检查您的投资组合可能认为您比Jon Snow知道的更少,以及各种不好的事情。 理论上。但它确实发生在现实世界中,并且浏览器并不愚蠢:他们知道你的意思,他们将采用两个头标记并按预期工作。
而且这不只是偶然的机会 他们有很好的理由:
<强> 1。头标记是可选的。
浏览器甚至接受标题内容甚至在之外,因此实际上它们完全忽略了标记本身。如果他们忽略了一个,他们也可能会忽略几个。
<强> 2。访客很珍贵。
浏览器希望您享受您的时间。他们希望向您展示他们可以从他们所拥有的混乱中创建的最佳页面。 这是他们的意图,他们想告诉你互联网有效,而不是教你最喜欢的网站有多糟糕。如果他们能够找出html代码想要表达的内容(并且结构中没有致命的歧义),他们将尽力修复页面。
第3。糟糕的标记容忍是一件事。
浏览器不仅耐心而且宽容,但有时他们会做杂技动作来让你的东西工作。看看这个可怕的混乱:
var parsedSoap = XElement.Parse(soapMessage);
XNamespace payPalResponseNs ="urn:ebay:api:PayPalAPI";
XNamespace resultingResponseNs = "urn:ebay:apis:eBLBaseComponents";
parsedSoap.Descendants()
.Where(x=> x.Name == payPalResponseNs+"SetExpressCheckoutResponse")
.Select(x=> new
{
Timestamp = x.Element(resultingResponseNs +"Timestamp")?.Value,
Ack = x.Element(resultingResponseNs +"Ack")?.Value,
CorrelationID = x.Element(resultingResponseNs +"CorrelationID")?.Value,
Version = x.Element(resultingResponseNs +"Version")?.Value,
Build = x.Element(resultingResponseNs +"Build")?.Value,
Token = x.Element(payPalResponseNs +"Token")?.Value
}
);
关于浏览器容差,here's a lot more以及超级丑陋的例子 - 确保您忘记了当您回来时所见到的一切!)
所以是的,当然,原则是&#34;成为浏览器的好朋友&#34;,无论它如何巧妙地修复你的错误。但是,如果你在一个黑暗的地牢中醒来,周围有饥饿的狮子,你唯一的出路就是使用两个&lt; head&gt;标签 - 好吧,不要犹豫!它没有 并且不要因为普遍的神话而感到沮丧,因为非标准,非整洁的网站繁荣得更厉害:人们通常只是不确定并且想要保持安全。通常情况下,他们将地狱描述为验证者失败的网络作者所在的地方。
TLDR:实际上,两个头标签可以正常工作。
现在请尽可能只有一个。
答案 1 :(得分:11)
答案 2 :(得分:2)
很好的回应@Gwenc37。您可以在任何其他标签中添加任何标签,但始终最好遵守W3C标准和规范。在项目的后期,您可能会遇到HTML无法在浏览器中正确解析甚至更糟糕的情况。
为了安全起见,请遵守W3C标准。这样你就不会出错。希望这会有所帮助。
答案 3 :(得分:2)
这是一个你可以尝试的想法
在你的主脑中做这个
<!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" >
注意我已经没有结束头标记了。 然后在您的所有文件中,您必须关闭头标记,或添加额外的标题内容然后关闭头标记,例如
<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来确定你在哪个页面
答案 4 :(得分:1)
根据W3C标准,不!你不能拥有它。
在您的情况下,您使用JSP作为服务器端脚本。通过对样式表/脚本/其他html元素使用CONSTANTS可以解决该问题。
您只需根据页面要求在“main.jsp”文件中添加条件。
答案 5 :(得分:0)
根据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>