jsp中include的两种形式

来源:互联网 发布:淘宝什么时候搞大打折 编辑:程序博客网 时间:2024/05/16 17:29

jsp中include的两种形式:      1.<%@ include file=” ”%>
                                            2.<jsp:include page=” ” flush=”true”/>

 

二者主要有两个方面的不同;
(1):执行时间上:
      <%@ include file=”relativeURI”%>   是在翻译阶段执行
      <jsp:include page=”relativeURI” flush=”true” />   在请求处理阶段执行.
(2):引入内容的不同:
      <%@ include file=”relativeURI”%>   引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.
      <jsp:include page=”relativeURI” flush=”true” />   引入执行页面或servlet所生成的应答文本.
两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.

 

 

以下是实际例子来解释以上内容:

        //======date.jsp的源文件=====//
        <%@ page language=”java” contentType="text/html;charset=gb2312"%>
        <%
        java.util.Date date=new java.util.Date();
        String date_cn ="";
        String dateStr = "";
        switch(date.getDay())
        {
                  case 0:date_cn ="日"; break;
                  case 1:date_cn ="一"; break;
                  case 2:date_cn ="二"; break;
                  case 3:date_cn ="三"; break;
                  case 4:date_cn ="四"; break;
                  case 5:date_cn ="五"; break;
                  case 6:date_cn ="六"; break;
         }
        dateStr = (1900+date.getYear()) + "年" + (date.getMonth()+1) + "月" + date.getDate() + "日(星期" +date_cn+")";
 

        %>
        document.write("<%=dateStr%>");

(1)首先<%@ include file=” ”%>

      <%@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容(也就是代码段)加入到引入它的jsp页面中。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。

        //======以下是test.jsp的源文件=============//
        <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
        <html>
        <head>
        <title>include的两种用法</title>
        <%--@ include file=”date.jsp” %-->
        //我们在这里用第一种形式来引入date.jsp这个文件.
        <head>
        <body>
        <table><tr><td>
        有关jsp中include的两种用法.敬请关注。
        </td></tr></table>
        </body>
        </html>

   

      此时出现了错误提示:HTTP Status 500 ? 在date.jsp页面中不能指定多个contentType.

      因为在翻译阶段,date.jsp文件的代码被原封不动地加入到了test.jsp页面从而合成一个文件。合成后的文件中就会有相同的代码:
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

      解决的办法是把date.jsp文件中的这句删掉。

 

      可以看到这时会产生一个临时class文件和一个java文件。此时查看tomcat下的临时文件,<注.此处的tomcat装在E盘根目录下>
E:/tomcat/work/Standalone/localhost/test.在这个目录下会看到test_jsp.javatest_jsp.class两个文件。
      jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文件,test_jsp.class这个文件就是编译test_jsp.java这个servlet文件产生的类文件。打开test_jsp.java文件我们会发现,在test.jsp 文件被转化成servlet文件时,在输出的<haed>之间加入了一些不是test.jsp页面里面的代码,新加入的内容就是 date.jsp里面的代码。

 

(2)其次<jsp:include page=”relativeURI” flush=”true” />

         //======以下是test.jsp的源文件=============//
        <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
        <html>
        <head>
        <title>include的两种用法</title>
        <jsp:include page=”date.jsp” flush=”true” />       

        //我们在这里用第二种形式来引入date.jsp这个文件.
        <head>
        <body>
        <table><tr><td>
        有关jsp中include的两种用法.敬请关注。
        </td></tr></table>
        </body>
        </html>

 

     结果:2003? ê 12??10?? 13:30:13  出现乱码!

     原因:这个include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件)。
所以在我们作include行为元素引入页面时,实际只是引用了date.jsp这个文件被转化并被编译后产生的servlet类文件.既如此, date.jsp就是作为一个单独的文件在执行后才被test.jsp文件运行时调用.由于date.jsp文件中没有指定字符编码.所以出现了乱码

 

      查看tomcat下的临时文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件.查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码:JspRuntimeLibrary.include(request, response, "date.jsp", out, true);

      它并没有把date.jsp文件的代码加入到test.jsp.只是在运行时引入了date.jsp页面执行后所产生的应答




原创粉丝点击