JSP包含HTML正文重写包含的HTML正文标记?
我对JSP include标记的工作原理感到困惑。发生的情况是,基本页面的body标记具有包含JSP的id属性 base.jspJSP包含HTML正文重写包含的HTML正文标记?,html,jsp,include,Html,Jsp,Include,我对JSP include标记的工作原理感到困惑。发生的情况是,基本页面的body标记具有包含JSP的id属性 base.jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
/* base jsp has no id for body */
<body>
<h1>Hello World!</h1>
<jsp:include page="include.jsp" />
</body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
/* here included jsp has body with ID specified */
<body id="includeBody">
<h1>Hello include!</h1>
</body>
</html>
JSP页面
/*基本jsp没有主体的id*/
你好,世界!
include.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
/* base jsp has no id for body */
<body>
<h1>Hello World!</h1>
<jsp:include page="include.jsp" />
</body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
/* here included jsp has body with ID specified */
<body id="includeBody">
<h1>Hello include!</h1>
</body>
</html>
JSP页面
/*此处包含的jsp具有指定ID的主体*/
你好,包括!
当我转到base.jsp页面时,firebug只找到一个body标记,这是正常的,但表明HTML body标记的id属性为“includeBody”
结果:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>JSP Page</title>
</head>
/* why this body has id ??? */
<body id="includeBody">
<h1>Hello World!</h1>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>JSP Page</title>
<h1>Hello include!</h1>
</body>
</html>
JSP页面
/*为什么这个身体有id*/
你好,世界!
JSP页面
你好,包括!
base.jsp的body没有指定id,include.jsp的body有id。看起来,如果我没有在base.jsp的body中指定id,那么将应用included jsp body id。这是虫子吗?或者我应该从included.jsp中删除body(不可能是真的)。或者我可以将id添加到base.jsp主体中,这样它就不会被包含的主体替换。这不是一个bug。这是HTML5解析器的必需行为。发生的情况是,如果解析器遇到第二个body start标记,那么它将查看该第二个body start标记的每个属性,如果body元素(由第一个body start标记创建)没有同名的属性,那么该属性将添加到body元素中 如果解析器遇到更多的body开始标记,将每个body元素中的属性累加到body元素上,并且第一个实例中的任何特定属性优先,则会发生同样的情况 例如,如果你有
<body id="realBody">
<h1>Hello include!</h1>
<body id="invalidSecondBody" class="error"></body>
<body id="invalidThirdBody" class="errorAgain" style="color:red"></body>
</body>
你好,包括!
然后,在DOM中,body元素将具有id=“realBody”和class=“error”以及style=“color:red”
这里指定了HTML5中的规则:,向下搜索标记名为“body”的开始标记,它是该块中的最后一段
。。。[I]是否可以将id添加到base.jsp主体中,这样它就不会被替换为
包含体
根据上述规则,这是会发生的,是的。但是,您首先不应该将一个完整的html文档包含在另一个文档中。累积的标记非常无效,您将受制于各种奇怪的解析器规则,如上面的规则。尝试使用“查看源代码”而不是Firebug的inspect。我想你会找到你的第二个身体标签。谢谢你提供的详细信息。现在我开始思考,我应该只使用DIV(而不使用HTML标记和BODY标记)来执行HTML文件的“jsp include”