<jsp:include></jsp:include>和<%@ include %>的区别
2015-04-16 20:07
417 查看
JSP相关概念
JSP的翻译阶段Translation Phases和执行阶段Execution Phases
JSP页面的元素类型
指令元素
脚本元素
执行元素
结论
JSP代码实验
上述两个标签都能在jsp中引入文件,为了理解它们的区别,先了解下JSP相关的几个概念:
在翻译阶段,容器需要创建或定位JSP页面的实现对象,也就是将JSP页面翻译成对应的Servlet。
在执行阶段,容器需要实例化request和response对象,并调用JSP页面的实现对象(服务端对应的Servlet)处理客户端的请求,最后将服务端的响应传递给客户端。
The Expression Language (EL):通过它可以简化从不同数据源获取数据的操作,语法如下:
Declarations:声明服务端脚本(JAVA)使用的变量,语法如下:
Scriptlet:服务端脚本(JAVA),语法如下:
Expressions:服务端表达式(JAVA),语法如下:
之所以称之为“胶水”,可能是因为它位于HTML文本和执行元素中间,用于生成动态的内容。
具体到容器实现上,通过jsp:include包含的页面,是把该jsp页面生成的响应合并到父jsp的响应中,两个页面均会生成自己的Servlet;而include包含的页面,是把该jsp页面的代码合并到父jsp的代码中,服务端只生成一个Setvlet。
include.jsp
当通过<%@ include %>来包含页面时,编译器报错,提示重复定义变量,因此可看出<%@ include %>属于静态包含,包含页面和被包含页面会生成一个Servlet。将其替换为jsp:include后,编译器成功编译,且服务端生成两个Servlet文件,main_jsp.java文件中通过以下代码包含inlcude.jsp页面生成的内容:
因此可看出jsp:include属于动态包含,父页面包含include.jsp生成的响应。
JSP的翻译阶段Translation Phases和执行阶段Execution Phases
JSP页面的元素类型
指令元素
脚本元素
执行元素
结论
JSP代码实验
JSP相关概念
<jsp:include page="../header.jsp"></jsp:include> <%@ include file="../tld.jsp"%>
上述两个标签都能在jsp中引入文件,为了理解它们的区别,先了解下JSP相关的几个概念:
JSP的翻译阶段(Translation Phases)和执行阶段(Execution Phases):
在JSP页面的生命周期中包含两个阶段:翻译阶段和执行阶段。在翻译阶段,容器需要创建或定位JSP页面的实现对象,也就是将JSP页面翻译成对应的Servlet。
在执行阶段,容器需要实例化request和response对象,并调用JSP页面的实现对象(服务端对应的Servlet)处理客户端的请求,最后将服务端的响应传递给客户端。
JSP页面的元素类型:
JSP页面中包含3种类型的元素:指令元素(directive elements)、脚本元素(scripting elements)、执行元素(action elements)。指令元素:
指令元素提供全局的信息,对JSP页面接受的所有请求均有效,为翻译阶段提供信息,其对应的语法如下:<%@ directive...%>
脚本元素:
脚本元素是模板和执行元素的“胶水”(官方定义…表示不理解 - -)。对应一下具体内容,就不难理解了The Expression Language (EL):通过它可以简化从不同数据源获取数据的操作,语法如下:
${expr} #{expr}
Declarations:声明服务端脚本(JAVA)使用的变量,语法如下:
<%! ... %>
Scriptlet:服务端脚本(JAVA),语法如下:
<% ... %>
Expressions:服务端表达式(JAVA),语法如下:
<%= ... %>
之所以称之为“胶水”,可能是因为它位于HTML文本和执行元素中间,用于生成动态的内容。
执行元素:
为请求处理阶段(也就是执行阶段)提供信息,针对不同的request可能会生成不同的内容。其实就对应JSP的TAG,语法如下:<mytag attr1=”attribute value”...>body</mytag> <mytag attr1=”attribute value”.../> <mytag attr1=”attribute value” ...></mytag>
结论
从概念上看,jsp:include属于执行元素(action elements),为执行阶段提供信息;include属于指令元素(directive elements),为翻译阶段提供信息。具体到容器实现上,通过jsp:include包含的页面,是把该jsp页面生成的响应合并到父jsp的响应中,两个页面均会生成自己的Servlet;而include包含的页面,是把该jsp页面的代码合并到父jsp的代码中,服务端只生成一个Setvlet。
JSP代码实验
main.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>Insert title here</title> </head> <body> <%! String includeTest = "main"; %> The main page. <%@ include file="include.jsp" %> </body> </html>
include.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! String includeTest = ""; %>
当通过<%@ include %>来包含页面时,编译器报错,提示重复定义变量,因此可看出<%@ include %>属于静态包含,包含页面和被包含页面会生成一个Servlet。将其替换为jsp:include后,编译器成功编译,且服务端生成两个Servlet文件,main_jsp.java文件中通过以下代码包含inlcude.jsp页面生成的内容:
org.apache.jasper.runtime.JspRuntimeLibrary.include( request, response, "include.jsp", out, false);
因此可看出jsp:include属于动态包含,父页面包含include.jsp生成的响应。
相关文章推荐
- <%@ include file=”url”%> 和<jsp:include page=”url” flush=”true” /> 的区别
- <%@ include file=""%>与<jsp:include page=""/>区别
- <%@ include > 和 <jsp:include>的区别
- <jsp:include page="">与<&@ include file="">的区别
- <%@ include file=""%>与<jsp:include page=""/>区别
- <%@ page include=""%> 和<jsp:include flush="true" page=""></jsp:include>两者的区别
- <%@ include file=”relativeURI”%>与<jsp:include page=””>的区别
- <jsp:include>与include指令的区别
- <%@ include file=""%>与<jsp:include page=""/>区别
- <%@ include file=""%>与<jsp:include page=""/>区别
- <jsp:include>和<%@include file=""%>的区别
- <%@ include file=""%>与<jsp:include page=""/>区别
- <jsp:include page="xxx"> 和<%@include file="xxx">区别
- <jsp:include>和<%@include file=""%>区别
- <%@include file=""%>和 <jsp:include file="">之间的区别
- <%@ include file=""%> 和<jsp:include page=""/>两者的区别
- <jsp:include>和<%@include file=""%> 有什么区别
- <jsp:include page=”XXX”>与<%@ include file=”XXX”%>之间有什么区别
- <jsp:include page=""/>和<%@include file=""%>-----JSP中两种页面引入方式的区别
- <%include file="a.jsp"%>与<jsp:include file="a.jsp"/>有什么区别?