JSP中的include的两种用法

1.两种用法

<%@ include file=” ”%>

<jsp:include page=” ” flush=”true”/>

2.用法区别

(1)执行时间上区别

<%@ include file=”relativeURI”%>                   是在翻译阶段执行

<jsp:include page=”relativeURI” flush=”true” />  在请求处理阶段执行.

(2)引入内容的不同

<%@ include file=” ”%>

jsp的include指令元素读入指定页面的内容。并把这些内容和本来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。

<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所天生的应答文本.

3.如何使include页面携带入参

<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >

<jsp:param name=”fitstParamer” value=”firstValue”>

<jsp:param name=”lastParamer” value=”lastValue”>

</jsp:include>

4. 说明:翻译阶段

翻译阶段:

jsp页面不能原封不动地被传送给浏览器,全部的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来结束的。服务器需要一个jsp容器来处理jsp页面。jsp容器平常以servlet的情势来实现,这个servlet经过配置,可以处理对jsp页面的全部请求。

Jsp容器重视将jsp页面转化成servlet(称为jsp页面实现类—JSP Page implementation class),并编译这个servlet。这两步就组成了翻译阶段.

请求处理阶段:

Jsp容器除了上面提到的重视将jsp页面转化成servlet外,还重视调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文档.

5.示例

服务器用tomcat,引入页面的jsp文档叫test.jsp。被引入的页面叫date.jsp.这个jsp文档里存放的是一个有关时间的jsp代码,当前的上下文根设为test

//======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%>");

//======以下是test.jsp的源文档=============//

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

<html>

<head>

<title>include的两种用法</title>

<jsp:include page=”date.jsp” flush=”true”/>

<%--@ include file=”date.jsp” %-->

<head>

<body>

<table><tr><td></td></tr></table>

</body>

</html>

先用<%@ include file=”date.jsp” %>这种情势引入date.jsp这个文档。此时出现了错误提示:

HTTP Status 500 –

org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences of contentType

状况码为http 500服务器内部错误。再看下面的提示。在date.jsp页面中不能指定多个contentType.

原因就在这里了。是由于在翻译阶段,date.jsp文档的代码被原封不动地参加到了test.jsp页面从而合成一个文档。合成后的文档中就会雷同的:

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

这句代码。解决的办法是把date.jsp文档中的这句删掉。刷新后再请求test.jsp页面,正常。

查看tomcat下的临时文档,..\tomcat\work\Standalone\localhost\test目录下会看到test_jsp.java和test_jsp.class两个文档,

这里的java文档就是jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文档。

相对应的test_jsp.class这个文档就是编译test_jsp.java这个servlet文档产生的类文档了。打开所产生的servlet文档(test_jsp.java)。此时我们会发觉,在test.jsp文档被转化成servlet文档时,在输出的<haed>中间参加了一些不是test.jsp页面里面的代码,新参加的内容就是date.jsp里面的代码.

将<%@ include file=”date.jsp”%>换成<jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp.此时会在页面上看见.我们所引入date.jsp输出的日期中中文出现了乱码.

所以在我们作include行动元素引入页面时,实际只是引用了date.jsp这个文档被转化并被编译后产生的servlet类文档.既如此,date.jsp就是作为一个单独的文档在执行后才被test.jsp文档运行时调用.由于date.jsp文档中无指定字符编码.所以出现了乱码.解决办法是在date.jsp文档中重新把刚才去掉的

<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

再查看tomcat下的临时文档会发觉.此时多出了一个date_jsp.java文档和一个date_jsp.class文档.这两个文档得来的方法跟test_jsp.java和test_jsp.class文档得来的方法一样.再查看一下此时test_jsp.java文档的代码会发觉.此时只增加加了一句代码:

JspRuntimeLibrary.include(request, response, "date.jsp", out, true);

它并无把date.jsp文档的代码引入到test.jsp.

jsp中include的两种用法的更多相关文章

  1. JSP中的include的两种用法

    1.两种用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用法区别 (1)执行时间上区别 < ...

  2. java中super的两种用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  3. Jquery中toggleClass的两种用法

    css样式: <style type="text/css"> .bgc{ background-color:#F00; color: #FFF} </style& ...

  4. Javascript 中 call 的两种用法

    用法一(常见用法): 表现形式为:一个对象.方法.call(另一个对象),意义是用另一个对象代替当前对象,执行当前对象的方法.先看示例: function Class1(){ this.name = ...

  5. jsp中一个标签两种方式绑定两个click事件导致未执行的问题

    近日,在开发过程中,写了一个标签 <li id="a1" onclick="doSomething()">...</li> 在js页面中 ...

  6. js高级编程中命名空间的两种用法

    第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...

  7. <%@ include file=""%>与<jsp:include page=""/>两种方式的作用

    一.前言 身为一名coder有太多太多的知识点要去学,太多太多的东西要去记.往往一些小细节也就难免疏忽,但悲催的是多数困恼你的bug就是因为这些微不足道的知识点.我们又不是机器人,怎么可能什么都记得了 ...

  8. 2019/7/18 --1.<%@ include file=""%>与<jsp:include page=""/>两种方式的作用

    一.前言 身为一名coder有太多太多的知识点要去学,太多太多的东西要去记.往往一些小细节也就难免疏忽,但悲催的是多数困恼你的bug就是因为这些微不足道的知识点.我们又不是机器人,怎么可能什么都记得了 ...

  9. jsp:jsp包含文件的两种方式

    第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...

随机推荐

  1. 工具 - PyCharm相关

    Ctrl + Q查看Documentation Ctrl + Alt + L 格式化代码 """""" + enter就可以自动生成DocS ...

  2. git pull 之后怎么找回别覆盖掉的内容

    [半夜吓出冷汗,git这个原理还真得好好学学] 不小心把本地写的东西pull了下,然后,全部覆盖掉了,以为就这样没了. 后面想到有“时光穿梭机”,“历史回滚”,在各大群友的帮助下,终于找回了. git ...

  3. char、pchar、string互相转换

    1.string转换成pchar 可以使用pchar进行强制类型转换,也可以使用StrPCopy函数 var s:string; p,p1:PChar; begin s:='Hello Delphi' ...

  4. 文件图标SVG

    ​<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...

  5. nginx 性能优化的概述及在CPU资源方面的处理

    nginx的性能优化的概述 软件层面的提升硬件的使用率 增大CPU的利用率 增大内存的利用率 增大磁盘IO利用率 增大网络带宽利用率 提升硬件规格 网卡:万兆网卡.例如10G.25G.40G等 磁盘: ...

  6. MyuCMS_V2.1漏洞分析

    前言 在CNVD看到一个MyuCMS的一个任意文件删除漏洞.然后去搜了下这个CMS,发现官网公告显示在V2.2.3版本修复了CNVD提供的多处漏洞. 怀着好奇的心里,去CNVD搜了下这个CMS,结果发 ...

  7. SSIS 無法將保護的 XML 節點 "DTS:Password" 解密,錯誤為 0x8009000B "機碼用在特定狀態時無效

    发现之前部署的SSIS,执行失败,查看日志 來源: 描述: 無法將保護的 XML 節點 -- ::-- ::-- :: DataReader 來源 [] 描述: System.Exception: S ...

  8. iOS性能优化-内存优化

    https://blog.csdn.net/a184251289/article/details/82589128 2018年09月10日 14:25:31 xingshao1990 阅读数:328 ...

  9. 让UITextField全选

    [textField selectAll:self];

  10. C# Stream篇(—) -- Stream基类

    写在前头: Stream系列文章共收录7篇,本着备忘和归纳的目的本着备忘和归纳的目的,全部收录于本分类中. 下面是有原文连接,望各位看官还是到原作者处学习,毕竟CV过来的文字难免有走样之处. 原始连接 ...