日期:2014-05-16  浏览次数:20379 次

jsp:include和@include学习

一直以来做项目都是用@include,很少去用到JSP:include,最近一段时间重新学习了一些JSP相关的知识,包括过滤器等等,认识到了自己的许多不足,在这里记录下。

1、JSP:include,它有一个属性为page,这里的page可以是相对路径,也可以是绝对路径(是相对于当前项目的路径,也即是它会自动帮你在当前项目中去找)。比如我现在的项目是JSPTest,我在page里面写了/page/index.jsp,这里JAVA应用服务器就会到JSPTest项目下去查找page/index.jsp,这是相对于本项目的。

JavaEye上一位朋友说了:(在这里可以看到http://www.iteye.com/problems/34149,感谢那位朋友,也让自己明白了)

??只要搞清楚“/”代表的是什么就行了:?
??(1).在form,js,css,sendRedirect里边,代表的是http://127.0.0.1/;?
??(2).在web.xml中的url-pattern,forword代表的是?? http://127.0.0.1/myweb。myweb是项目名

?? ? ? 研究了一下TOMCAT编译生成的代码(这里我用的是TOMCAT,主要是快嘛),发现当我们用JSP:include标签的时候,它会生成代码

org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response, path , out, true);

这里它会作为一个参数传入方法中,这决定了我们并不能在page里面进行相应的代码编写,比如:

<jsp:include page="<%request.getContextPath%>/page/index.jsp"/>

这样的代码是会报错的,我们可以换一种方法:

 <%  String pagePath = request.getContextpath+"/page/index.jsp";%>
<jsp:include page="<%=pagePath%>"/>

这样就可以正确编译并运行。

2、另外一个包含的标签是<%@include%>这个它需要通过file属性来指定包含的文件,由于它是页面标签(通过%来指定的),这样就决定了我们不可以在里面另外通过〈%%〉来指定另外的变量,只可以直接指定页面名。这里也可以通过相对路径和绝对路径来指定。它和上面的jsp:include一样,当用绝对路径进行指定时,它都是相对于当前项目的。这两个标签最大的区别是它们加入页面的方式。当用@include时,所包含的页面会被直接加入到本页面进行编译,而用jsp:include时并不是这样,而只是单单包含已经编译完的页面代码,这个就可以较快地识别已经改变的内容,而用@include由于是包含了全部内容,所以有时的改变并不能立即反映出来。

?

?? ? ? ?J2EE果然博大精深,还是要好好学习的。

1 楼 zhongyangjian 2011-09-19  
我也是今天才明白,页面太大,报错,拆分,用了才明白。不过还是太大了。唉,要挨骂了