<jsp:include>和<%@include%>本质上应该都是为了编码的方便,避免重复「造车轮」而产生的一种减轻码农编码量的提升生产力的手段。同时也能让文件看起来更有条理,更容易整理和修改。对应有代码洁癖的人应该很有用。
使用场景:
同一段JSP代码可能会被多个地方用到用到的情况下,比如一个包括js的一个图片上传的代码段,需要在人事管理的头像上传的地方用到,也可能在财务报表模块的发票拍照上传功能模块处用到,还有可能在其他任何需要上传图片的地方用到,很显然,这个时候你用<jsp:include>或者<%@include%>方式会方便很多。
虽然用在同一场景,但是<jsp:include>和<%@include%>两者的区别还是蛮大的。
先说<%@include file%>
<%@include file%>的模式是「静态」引用,就是这个引用方式会把你所引用的代码段在编译时一起编译到class,a.jsp包含使用<%@include file%>了b.jsp,那么只会生成一个a.class。简单来说就是合二为一的静态方式。a.jsp里定义的变量什么的,b.jsp里是完全可以用的。所以a.jsp里定义了变量foo,b.jsp是不能再重新定义这样一个变量,否则会报错。所以,这种方式传参问题就不存在了,直接共用变量。
所以这种模式不支持变量的方式,举例:
<%@include file="b.jsp"%>
这个是OK的没有任何问题的。
你如果这样
<% String sFile = "b.jsp"; %>
<%@include file="<%=sFile%>"%>
会报错。
再说说<jsp:include>
他是在运行阶段,动态包含b.jsp,a.jsp和b.jsp是独立的存在,只是a包含了b而已,这个方式下,支持变量方式include,比如
<jsp:include page="<%=msg%>"></jsp:include>
msg就是一个定义好的变量。根据不同的需要,值会变化的。
传参方式:
<jsp:include page="<%=msg%>">
<jsp:param name="参数名称" value="值,支持变量" />
</jsp:include>
有事先码一会,待会有空再补充。