快速理解<jsp:include>和<%@include%>的区别(从计算机角度理解,不是我个人随便猜解)

我有点质疑,所以就写了这个总结,以帮助需要的人:

使用<%@include%>指令元素只是将页面的内容静态的包含进来,如果被包含的文件中有JSP代码,则会执行该代码,而不管该文件是否为动态文件。

<jsp:include>动作元素动态的包含文件,如果被包含的文件时静态的,则直接将内容包含进来,不会进行处理;而如果被包含的文件时动态的,则先执行,再将结果包含进来并进行处理显示。

区别如下:
使用<%@include%>指令元素是将所有的被包含文件包含进来之后,然后再进行编译等处理,可以简单的称其为“先包含再处理”。
而使用<jsp:include>动作元素是将所有的代码处理完成之后,再将处理完成的代码的结果包含进来,可以简单的称其为“先处理再包含”。


Include_D.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!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>/JavaWeb30day/WebContent/ch04/Include_D.jsp</title>
</head>
<body>

<%="<br><b>" + new Date() + "<b><br>"%>
</body>
</html>


Include_J.txt

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%><br>
<b style='color:red'>这是include静态文本<b/><br>
<%="<b style='color:red'>" + new Date() + "</b>"%>


Include_Test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
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>/JavaWeb30day/WebContent/ch04/Include_Test.jsp</title>
</head>
<body>
(1).include包含静态文本,先包含再处理
<br>
<%@ include file="Include_J.txt"%>
<br>
<br> (2).include包含动态文本,先包含再处理
<br>
<%@ include file="Include_D.jsp"%>
</body>
</html>


Include_Test.jsp结果浏览器显示代码:

<!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>Insert title here</title>
</head>
<body>
(1).include包含静态文本,先包含再处理
<br>
<br>
<b style='color:red'>����include��̬�ı�<b/><br>
<b style='color:red'>Sat Nov 25 10:17:35 CST 2017</b>
<br>
<br> 

(2).include包含动态文本,先包含再处理
<br>

<!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>Insert title here</title>
</head>
<body>

<br><b>Sat Nov 25 10:17:35 CST 2017<b><br>
</body>
</html>
</body>
</html>


Include_Test.jsp结果浏览器显示图:



/JavaWeb30day/WebContent/ch04/JSP_Include_D.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!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>/JavaWeb30day/WebContent/ch04/JSP_Include_D.jsp</title>
</head>
<body>

<%="<br><b>" + new Date() + "<b><br>"%>
</body>
</html>


/JavaWeb30day/WebContent/ch04/JSP_Include_J.txt

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%><br>
<b style='color:red'>这是jsp_include静态文本<b/><br>
<%="<b style='color:red'>" + new Date() + "</b>"%>


/JavaWeb30day/WebContent/ch04/JSP_Include_Test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
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>/JavaWeb30day/WebContent/ch04/JSP_Include_Test.jsp</title>
</head>
<body>
<%="<br/>(1).包含静态文件,先将文本包含(部分代码能转换就转换,不能转换就默认输出)<br/>"%>
<jsp:include page="JSP_Include_J.txt"></jsp:include>
<%="<br/>(2).包含动态文件,先包含再处理<br/>"%>
<jsp:include page="JSP_Include_D.jsp"></jsp:include>
</body>
</html>


JSP_Include_Test.jsp结果浏览器显示代码:

<!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>/JavaWeb30day/WebContent/ch04/JSP_Include_Test.jsp</title>
</head>
<body>
<br/>(1).包含静态文件,先将文本包含(部分代码能转换就转换,不能转换就默认输出)<br/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%><br>
<b style='color:red'>这是jsp_include静态文本<b/><br>
<%="<b style='color:red'>" + new Date() + "</b>"%>
<br/>(2).包含动态文件,先包含再处理<br/>

<!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>/JavaWeb30day/WebContent/ch04/JSP_Include_D.jsp</title>
</head>
<body>

<br><b>Sat Nov 25 10:36:34 CST 2017<b><br>
</body>
</html>
</body>
</html>


JSP_Include_Test.jsp结果浏览器显示图:



个人总结:include(https://en.wiktionary.org/wiki/include)

从全局来看(计算机不分文件后缀的,系统是分文件后缀的);而jsp引擎本就是一个系统处理机构。
所以,所有文件内容通过它时,先看是否有无jsp指令;
如有jsp指令,那么jsp引擎就包含进来解析给浏览器;

然而,jsp指令集中,有一条专门处理静态文件的指令,并不解析给浏览器,这就是<jsp:include>指令。

包含静态文件,不解析(原来文件内容,直接在浏览器显示,源文件有HTML语句则解析给浏览器)
<jsp:include page="JSP_Include_J.txt"></jsp:include>


包含动态文件,解析(原来文件内容,有jsp指令先解析,源文件有HTML语句则解析给浏览器)
<jsp:include page="JSP_Include_D.jsp"></jsp:include>

包含静态文件,解析(原来文件内容,有jsp指令先解析,源文件有HTML语句则解析给浏览器)
<%@ include file="Include_J.txt"%>

包含动态文件,解析(原来文件内容,有jsp指令先解析,源文件有HTML语句则解析给浏览器)
<%@ include file="Include_D.jsp"%>


最后总结:

为了便于理解与记忆,可见在jsp中include文件(不分代码书写形式)时,

其本意就是包含文件而已;

其功能均是先包含文件,再分(解析,不解析)文件。