Home 静态包含和动态包含
Post
Cancel

静态包含和动态包含

区别

  • 书写上不同
    静态包含:<%@include file="1.jsp"%>
    动态包含:<jsp:include page="1.jsp"></jsp:include>
    <%@include file="1.jsp"%>是指令元素;<jsp:include page="1.jsp"/>是行为元素。

  • 最终编译成Java文件的数目不同
    静态包含在转换成为Java文件的时候将包含文件的内容”复制”到主体文件,然后作为一个整体编译。最终编译为一个Java文件。
    动态包含是各个JSP文件分别转换,分别编译。最终编程成多个Java文件。

  • 执行时间不同
    静态包含发生在:JSP–>Java文件阶段。
    动态包含发生在:执行class文件阶段,动态加入。

  • 静态包含在两个文件中不能有相同的变量,动态包含允许
    由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。
    而动态包含相当于调用不同的JSP,变量所在的空间不同,自然不会出现覆盖等现象。

  • 无论是动态包含还是静态包含,其request对象都是相同的,也就是同一个request对象
    静态包含最终编译成一个Java文件,有一个request对象很好理解。
    而动态包含最终编译成多个JSP文件,为何会使用一个request对象呢?其实这些JSP组合的过程是一个请求转发的过程,自然也使用同一个request对象了。

注意

  1. 两个JSP页面的<%@page contentType="text/html;charset=gbk"%>应该保持一致
  2. 不能通过fileurl向被包含的JSP页面传递参数,因为静态包含是发生在JSP页面转换为servlet的转换期间,此时的参数是服务器端设置的死的参数,完全没有经过客户端,这种参数是没有意义的,如<%@include file="fileurl?user=admin"%>,而且此时会报错。
  3. 包含的JSP页面与被包含的JSP页面共用一个request内置对象。比如说在客户端访问包含页面时地址栏后面直接加上参数后传递,这种形式的传参是客户端送来的,两个页面都能够访问此参数。我们可以通过这两个页面合成的servlet中可以看到有传递的参数成为servlet的成员变量。
  4. 包含的JSP页面与被包含的JSP页面最好没有重复的HTML标签。否则会发生覆盖现象。
  5. 动态包含传参方式:
1
2
3
<jsp:include page="a.jsp">
    <jsp:param name="age" value="123">
</ jsp:include>
This post is licensed under CC BY 4.0 by the author.