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. uniGUI之uniEdit(23)

    主要新加属性: a]EmptyText在没有文本里显示的背景文本. b]作为其他控件的编辑输入控件. c]ClearButton清空按钮 d]左边显示文本 e]回车触发事件CharEOL:=#13 f ...

  2. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle数据备份与恢复

    run{ allocate channel ch_1 device type disk format = 'd:\oraclebf\%u_%c.bak'; backup tablespace syst ...

  3. eclipse 快速隐藏所有方法的代码块

    java开发中往往一个class文件中会有很多方法,一个方法的实现代码有时候特别长 我个人就喜欢把无关的方法代码全部隐藏起来,只打开当前需要编辑的代码就行了(不喜欢看导航视图,容易头晕) Ctrl+s ...

  4. Java基础 -2.3

    浮点数类型 所有的数据类型进行自动转型的时候都是由小类型到大类型进行自动转换处理.默认的类型为double,但是也可以定义位数相对较少的float变量 ,此时从赋值的时候就必须采用强制类型转换 pub ...

  5. 在Centos上安装Postgre SQL

    检查PostgreSQL 是否已经安装 rpm -qa | grep postgres 检查PostgreSQL 是否已经安装 rpm -qal | grep postgres 检查PostgreSQ ...

  6. 【PAT甲级】1016 Phone Bills (25 分)(结构体排序)

    题意: 输入24个正整数代表从0到23每个小时通话一分钟花费的美分.输入一个正整数N(<=1000),然后输入N组字符串,每个字符串包含客户的名字和通话的时刻以及打出或者挂断的状态. 按照字典序 ...

  7. java.lang.ClassCastException: android.app.Application cannot be cast to

    出这个异常的原因是在项目中添加了新lication类(public class Application extends lication)之后,没有在AndroidManifest.xml中添加该类的 ...

  8. 页面渲染时js阻塞的解决方法

    一般地,一个包含外部样式表文件和外部脚本文件的HTML载入和渲染过程是这样的: 浏览器下载HTML文件并开始解析DOM. 遇到样式表文件link[rel=stylesheet]时,将其加入资源文件下载 ...

  9. CSS - 去除图片img底侧空白缝隙

    1. 图片底部有空隙 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. Controller生命周期

    1. 实例化 alloc/init, initWithNibName 2.awakeFromNib 从nib创建Controller对象 3.get/set outlets 4. viewDidLoa ...