我们在使用jsp 的时候,经常用到 <jsp:include> <%@include%>
有关二者的区别很简单,<%@include%> 是静态包含到文件中。相当于复制粘贴过去
<jsp:include> 是动态包含,是将<jsp:include> 的运行结果,加入到response 中。
我这这里详细说下:<jsp:include>, 动态传入参数的情形
<jsp:include page="abc.jsp">
<jsp:param name="aTitle" value="wangbadang"/>
</jsp:include>
我发下编译成java 文件后,就变成了如下的样子;
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "abc.jsp" + (("abc.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("aTitle", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("wangbadang", request.getCharacterEncoding()), out, false);
所以说相当于在原来的 request 中加入了个 parameter (aTitle=wangbadang)
而在外层的jsp 的request 中是看不到 aTitle 的这个parameter 的。
代码如下:
index.jsp
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%>
<%@ page contentType="text/html;charset=GBK" import="java.util.*"%>
<html>
<head>
<title>tag file</title>
</head>
<body>
<jsp:include page="abc.jsp">
<jsp:param name="aTitle" value="wangbadang"/>
</jsp:include>
<br>
==================================
<%
out.println("--++++++++++++++---");
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String name=(String)enu.nextElement();
out.println(request.getParameter(name));
}
out.println("--------");
%>
</body>
</html>
abc.jsp
<%@ page language="java" pageEncoding="UTF-8" import="java.util.*"%>
agc
${param.aTitle}----
<%
out.println("--++++++++++++++---");
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String name=(String)enu.nextElement();
out.println(request.getParameter(name));
}
out.println("--------");
%>
访问index.jsp 得到如下输出:
agc wangbadang---- --++++++++++++++--- wangbadang -------- (被包含的文件 abc.jsp输出的。。)
================================== --++++++++++++++--- --------(index.jsp 本身外层输出的,没有获取的aTitle 的参数Parameter )