jsp中include的两个用法_<jsp:include page="ok_fails.jsp" flush="true"/>-程序员宅基地

技术标签: javaWeb  jsp  

我们都知道在jsp中include有两种情势,分别是

<%@ include file=” ”%>

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

前者是指令元素、后者是行动元素。具体它们将在哪里用?怎么用及它们有什么区别?这应该是很多人看到它都会想到的题目。下面一起来看看吧。

平常当利用程序中全部的页面的某些部分(例如题目、页脚和导航栏)都雷同的时候,我们就可以考虑用include。具体在哪些时候用<%@ include file=” ”%>,哪些时候用

<jsp:include page=” ” flush=”true”/>.这种情势。首先要知道的是它们中间的区别。只有了解了它们用法的不同才懂得该在何时去用以及怎么选择。

<%@ include file=” ”%>

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

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

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

由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)参加到引入它的jsp页面中,合成一个文档后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文档和一个java文档。下面举个例子。

服务器用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”%>

include的两种用法

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

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

//我们在这里用include的两种不怜悯势来引入date.jsp这个文档.

有关jsp中include的两种用法.敬请关注。

在test.jsp文档中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,现在让我们先用<%@ 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页面

请求test.jsp在页面显露如下

2003年12月10日 13:12:40

有关jsp中include的两种用法.敬请关注。

这时我们还不能发觉什么。还是去查看tomcat下的临时文档吧。到那里去看看date.jsp文档的内容是否已被参加到了test.jsp文档中。

<注.此处的tomcat装在E盘根目录下>

目录

    E:/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文档时,在输出的中间参加了一些不是test.jsp页面里面的代码,新参加的内容就是date.jsp里面的代码: 新参加了哪些内容或是否真的参加了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.

以上就是我们用<%@ include file=”date.jsp”%>这种情势得到的成果.

下面我们换用<jsp:include page=”dae.jsp” flush=”true”/>也就是将

<%@ include file=”date.jsp”%>换成<jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp.

2003? ê 12??10?? 13:30:13

有关jsp中include的两种用法.敬请关注。

此时会在页面上看见.我们所引入date.jsp输出的日期中中文出现了乱码.什么原因?

是由于include行动元素是在请求处理阶段执行的.(此处要对请求处理阶段进行说明一下.

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

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

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

这行语句参加后刷新重新运行.此时页面显露准确,并跟用include指令正常运行时一样.再查看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.

只是在运行时引入了date.jsp页面执行后所产生的应答.这表示着我们可以指定任何能够产生应答的Web资源,(例如一个servlet或一个jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型雷同.JSP容器将通过一个内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理本来的请求,所以这些资源可以拜访请求作用域内的全部对象.以及全部本来的请求参数.

由于在主页面被请求时,这些页面还无被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的状况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.

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

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

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

</jsp:include>

如果修改了被引入的jsp页面,那么可以连忙使用该页面的最新版本,这是由于看待被引入的页面的方法与看待由浏览器直接调用的jsp页面的方法完整雷同.即容器检测页面的变化,并主动进入翻译阶段,以得到页面的最新版本.

(留意,include行动元素同jsp其它元素一样,无行动体时要以”/”结束.就像下面这样.

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

以下是对include 两种用法的区别

重要有两个方面的不同;

一:执行时间上:

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

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

二:引入内容的不同:

<%@ include file=”relativeURI”%>

引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

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

另外在两种用法中file和page属性都被说明为一个相对的URI.如果它以斜杠开头,那么它就

是一个环境相干的路径.将根据赋给利用程序的URI的前缀进行说明,如果它不是以斜杠开头,那么就是页面相干的路径就根据引入这个文档的页面所在的路径进行说明.更多有关URL是怎么说明的请参考相干材料或书籍.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cs_20091320/article/details/89007270

智能推荐

Git 的.gitignore 配置说明-程序员宅基地

文章浏览阅读120次。.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得。..._.gitignore文件配置!pom.xml什么意思

记一次后台集成Jpush 极光推送代码_<dependency><groupid>cn.jpush.api</groupid><artifa-程序员宅基地

文章浏览阅读1.1k次。本项目为meaven项目。第一步:pom文件添加依赖` <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.3.12</ve..._cn.jpush.apijpush-client

计算机多级存储模型_计算机系统的多级缓存-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏8次。 在研究CPU相关内容的时候,可以潜在地把存储当做一个简单的顺序存储器(类似一个大数组),CPU可以在常数时间里访问存储器的数据。但是实际上存储系统并不是这么简单的模型。存储器结构 实际的存储器模型可以形象的表示为金字塔结构(图片来自深入理解计算机系统,很好的书,值得一读)。每个上一层存储......_计算机系统的多级缓存

Java关键字学习_java文字学习-程序员宅基地

文章浏览阅读297次。Java关键字学习关键字的定义就是在java语言编程的时候,在关键的地方使用的单词,体现关键的地方的含义,这些单词都是特有的,事先定义好的。关键字的定义和特点定义:被java赋予了特殊含义,用做专门用途的单词。特点:关键字中所有字母都为小写用于定义数据类型的关键字名词名词解释class引用数据类型----类interface引用数据类型----..._java文字学习

三星手机安装linux系统下载,ubuntu手机系统安装教程【详细步骤】-程序员宅基地

文章浏览阅读1.7k次。导语: 看到这个题目大家可能不太清楚吧,现在随着科技技术的进步和大范围的普及,普通大众也渐渐掌握了各种新技术。对于手机换系统,大家应该都听说过,网上经常能够看到某某大神把 苹果 手机的 ios 系统刷成了安卓系统,把 小米 系统改成了苹果系统等等。而我们今天所要说的 ubuntu 手机系统安装也是这个原理,就是在我们手机上安装该系统。下面小编就来为大家介绍一下 ubuntu手机系统的安装教程 吧。...

Spring核心机制:依赖注入-程序员宅基地

文章浏览阅读2.2k次。Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的。因此,我们说这些对象间存在依赖关系。加入A组件调用了B组件的方法,我们就可以称A组件依赖于B组件。我们通过使用依赖注入,Java EE应用中的各种组件不需要以硬编码方式耦合在一起,甚至无需使用工厂模式。当某个Java 实例需要其他Java 实例时,系统自动提供所需要的

随便推点

EasyUI的DataGrid中url参数返回数据格式_datagrid url参数-程序员宅基地

文章浏览阅读1w次。数据网格(datagrid)是一个使用频繁的组件,在开发列表功能的时候都会用到,它有两种绑定数据的属性url和data。url是一个url链接,通过发送请求,返回需要的数据,这里强调的是一个数据格式,并不是返回什么样的数据都能显示。{total:'',rows:[{},{}]}total是总数表示总共有多少行数据,rows是那一页要显示的数据内容。data的数据格式如下,这个实际开发过程中很少用。d_datagrid url参数

我们在学习Spark的时候,到底在学习什么?_王知无 spark-程序员宅基地

文章浏览阅读422次。我必须要说,Spark这个框架出现之前,我对很多大数据领域的框架源码甚至都是嗤之以鼻的。很多小伙伴在群里或者私信留言问我关于Spark的学习路径问题。Spark发展至今,应该说已经非常成熟..._王知无 spark

OpenResty概念详细介绍,快速掌握Helloword_openrestr原理图-程序员宅基地

文章浏览阅读2.3k次。OpenResty概念讲解OpenResty介绍OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开..._openrestr原理图

golang与linux服务器运维_golang 交换机运维-程序员宅基地

文章浏览阅读284次。读取dev.txt,cli.txt的内容,通过多并发进行连接linux服务器完成操控命令的执行,多用于运维或者开发管理多台服务器,基本相同的操作,通过这个代码就是可以完成操作linux以及多命令的执行事项。cli.txt文件内容:--linux命令行,都是存放在这里。备注:运行上述代码的方法,在所在程序的目录下命令行下运行。dev.txt--服务器信息。#init mod的初始方式。sshv2.go文件。_golang 交换机运维

【JAVA 工具】jstack简单使用,定位死循环、线程阻塞、死锁等问题_javacore 死循环-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏24次。转载地址:http://www.cnblogs.com/chenpi/p/5377445.html当我们运行java程序时,发现程序不动,但又不知道是哪里出问题时,可以使用JDK自带的jstack工具去定位;废话不说,直接上例子吧,在window平台上的;死循环写个死循环的程序如下:package concurrency;public class Test _javacore 死循环

前端开发环境搭建-程序员宅基地

文章浏览阅读5.1k次,点赞5次,收藏51次。NodeJs篇一、下载安装nodeJS1、下载地址官方网址 NodeJs2、下载完成后,双击“node-v11.5.0-x64.msi”,开始安装Node.js,一路next,注意:安装目录看自己需求,本人安装在D:\nodejs目录下3、测试键盘按下【win+R】键,输入cmd 回车输入命令node -v 和 npm -v注意:新版的nodejs自带npm,可以理解npm就是对nodejs进行包管理,用于卸载和安装nodejs需要的东西4、在安装目录文件夹下创建node_cac_前端开发环境搭建

推荐文章

热门文章

相关标签