JSP Include 文件方式

来源:互联网 发布:淘宝买可爱小东西的店 编辑:程序博客网 时间:2024/04/29 17:44

两种方式

JSP include 文件有两种方式:

1.  使用include 标签,像

   <%@ include file="include.jsp" %>

2. 使用jsp:include 标签,像

    <jsp:include page="include.jsp" flush="true">
         <jsp:param name="age" value="32" />  
    </jsp:include> 


使用的差异在于:

方式1 比较适合引入一些静态的,比较少改动的内容;比如网页的header 和 footer 的部分。

方式2 比较适合于引入改动较多的页面。


实例

两个jsp: main.jsp 和 include.jsp
include.jsp 的内容都是一样:
<!-- include.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><%@ page language="java" import="java.util.*" %>  ===begin include jsp===      <p>Include JSP: </p> <p>CurDate <%=new Date()%></p> <%  String str = request.getParameter("age");%>age:<%=str%>  <br>===end include jsp=== 



main.jsp 导入方式不同:
方式1:
<!-- main.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><html>    <body>      <div>      ===begin main jsp===       <p> Main JSP request:  </p>        ===end main jsp===     </div>    <%@ include file="include.jsp" %>      </body>  </html>

方式二:
<!-- main.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><html>    <body>      <div>      ===begin main jsp===       <p> Main JSP request:  </p>        ===end main jsp===     </div>    <jsp:include page="include.jsp" flush="true">     <jsp:param name="age" value="32" />      </jsp:include>        </body>  </html>

差别的实质


JSP运行的实质是最终都会被web server 转成servlet 来执行。
tomcat 转化的.java 文件位于work/Catalina/local 的相关目录下。
比较一下两者的差别:
方式1产生后的Java的include部分:
      out.write("===begin include jsp===      \r\n");      out.write("<p>Include JSP: </p> \r\n");  String str = request.getParameter("age");      out.write("\r\n");      out.write("age:\r\n");      out.print(str);      out.write("  <br>\r\n");      out.write("\r\n");      out.write("===end include jsp=== ");

而方式2如下:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "include.jsp" + (("include.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("age", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("32", request.getCharacterEncoding()), out, true);

可以看出方式1是直接输出,而方式二就是需要进行解释。


补充


开发的时候可能会给include的jsp 起一个比较容易区分的后缀名, 比如  .incjsp;
使用方式2 导入的话,使用Chrome 和Firefox 浏览器会有问题。会把include.incjsp 的源码文件输出,而不是产生后的html