Java Web 回顾总结(六) - jsp - 指令 - Include 指令

include指令

语法:

<%@ include %>
< jsp:include > 

@include指令 – 在翻译阶段执行

  @include可以包含任意的文件,但只把文件的内容包含进来。

include指令引入通常也称之为 静态引入
如果使用 include指令引入了其它 JSP页面,那么 JSP引擎将把这两个 JSP 合并翻译成一个 servlet

使用:

<%@ include file="relativeURL"%>其中的file属性用于指定被引入文件的路径。

路径以/开头,表示代表当前web应用。

注意问题:
1. 被引入的文件必须遵循JSP语法。
2. 被引入的文件可以使用任意的扩展名,即使其扩展名是html

JSP引擎也会按照处理jsp页面的方式(标签元素)处理它里面的内容
JSP规范建议使用.jspfJSP fragments(片段))作为静态引入文件的扩展名。

3. 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding导包除外)。

示例:

  新建head.jspf页面和foot.jspf页面,分别作为jsp页面的头部和尾部,存放于WebRoot下的jspfragments文件夹中,代码如下:

head.jspf代码:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <h1 style="color:red;">网页头部</h1>

foot.jspf代码:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <h1 style="color:blue;">网页尾部</h1>

  在WebRoot文件夹下创建一个index.jsp页面,在index.jsp页面中使用@include指令引入head.jspf页面和foot.jspf页面

代码如下:

     <%-- 使用include标签引入引入其它JSP页面 --%>
     <%@ include file="/jspfragments/head.jspf" %>
     <h1>网页主体内容</h1>
     <%@ include file="/jspfragments/foot.jspf" %>

  查看转意后 .java 文件,可以看出 head.jspffoot.jspf页面的内容都使用out.write输出到浏览器显示了。

  使用@include可以包含任意的内容,文件的后缀无所谓
  这种把别的文件内容包含到自身页面的@include语句就叫作静态包含,作用只是把别的页面内容包含进来
  

jsp:include 标签 – 在请求处理阶段执行.(在后面标签章节中仍会讲到)

<jsp:include page=”relativeURI” flush=”true” />叫作动态include(动态包含),是jsp动作的一种

优点:

jsp:include 的优点在于:总是会检查所含文件中的变化。
@include 先包含后编译 不同的是 jsp:include 采用 先编译,后包含

原理:

jsp:include 包含的是所包含 URI 的 响应,而不是 URI 本身。
这意味着:对所指出的 URI 进行 解释,因而包含的是 生成的响应。如果页面是 HTML,那么将得到一点也没有变化的 HTML。但是,如果是 Perl 脚本、Java servlet 或者 CGI 程序,那么得到的将是从该程序解释而得的结果。
虽然页面通常就是 HTML,但实际程序恰好是达到目的的手段。
而且,由于每次请求页面的时候都会进行解释,因此从来不会象使用 include 伪指令时那样高速缓存结果。
虽然这只是很小的变动,但它却导致了您所见到的行为中的全部差异。

总结

混合使用

include 的使用

如果站点包含一些(如果有变化,也很少)几乎没有变化的页眉页脚导航文件,那么基本的 include 伪指令是这些组件的最佳选项。
由于 include 伪指令采用了高速缓存,因此只需放入包含文件一次,其内容就会被高速缓存,其结果会是极大地提高了站点的性能。

jsp:included的使用

然而,对于现在许多 Web 应用程序或站点而言,地毯式的高速缓存并不能解决问题。虽然页眉和页脚可能是静态的,但是不可能整个站点都是静态的。

例如,从数据库提取导航链接,外部调用其他api,并且许多基于 JSP 技术的站点还从其它站点或应用程序上的动态 JSP 页面提取内容
如果正在处理动态内容,那么需要采用 jsp:include 来处理该内容。

最好的解决方案是经常把这两种方法混合搭配使用,将每种构造用到最恰当的地方。

二者区别

<%@ include file=""%>指令在编写代码的时候一般放在最顶部,主要作用 是 方便 重用代码 的使用

<jsp:include page="" flush="" />标签导入一个文件的时,这个文件是经过编译后倒入,本质上是 包含 这个要导入文件经过编译后的内容所以可以含有与当前jsp程序中重复的内容,(在包含过来之前就会被解析掉)

猜你喜欢

转载自blog.csdn.net/lendq/article/details/79903467