在JSP中,主要有3种功能可以将外部内容包含到JSP文档中jsp:include动作。

jsp:include动作允许我们在请求期间将其他页面的输出包含进来。它的主要优点是:在被包含的页面发生更改时,无需对主页面做出修改。它的主要缺点是:它所包含的是次级页面的输出,而非次级页面的实际代码(include指令),所以,在被包含的页面中不能使用仟何有可能总体上影响主页面的JSP构造。一般说来,它的优点要远远胜过它的缺点,这几乎注定它会比其他包含机制应用得更为普遍。

include指令。include指令可以在主页面转换成servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如字段的定义和内容类型的设定。它的主要缺点是难以维护:只要被包含的页面发生更改,就得更新主页面。

jsp:plugin动作。尽管本书主要论述服务器端的Java,但同时也会照顾到客户端java(嵌入web中的applet),因为客户端java在实际应用中也能发挥一定的作用,尤其在公司内部的内联网上。jsp:plugin元素可以将使用java插件(Java Plug-in)的applet插入到ASP页面中。它的主要优点是:能够避免在HTML中编写冗长繁琐且易于出错的OBJECT和EMBER标签。它的主要缺点是;它适用于applet,而applet的应用不太常见。

jsp: include: 语法:<%jsp:include page="/path"%> jsp:include是xml语法中的元素名称。

jsp: include动作在主页面被请求时,将次级页面的输出包含进来。尽管被包含页面的输出中不能含有JSP,但这些页面可以是其他资源(这些资源有可能使用servlet或JSP创建输
出)所产生的结果。也就是说,服务器按照正常的方式对指向被包含资源的URL进行解释,因而,这个UrL可以是servlet或JsP页面。服务器以通常的方式运行被包含的页面,将
产生的输出放入主页面中。这种行为和RequestDispatcber类的include方法完全相同,在servlet希望完成这种类型的文件包含时,就是使用这个方法。

如果要防止包含页面被客户单独访问,可以将它们放在WEB-INF目录或其子目录中.

要注意到:被包含的页面不是完整的Web页面口包含进来的文件可以是HTML文件、纯文本文件、JSP页面、或servlet,如果文件为jSP页面和servlet,则包含进来的只是页面
的输出,不是实际的代码)。但是,任何情况下,客户看到的都是合成后的结果。因此,如果主页面和包含进来的内容中都含有诸如DOCTYPE,BODY等标签,那么,在客户看到的结果中这些标签将会出现两次,这会使得最终的HTML不合法。在用到sexvlet和JSP时,请务必查看生成的HTML源代码,并将URL提交给html验证器,这是一个好习惯。在使用jsp:include时,这个建议甚至更为重要,因为初学者经常错误地将主页面和包含页面都设计成完整的HTML文档。(jsp也是一样的)。

如:

<body>
here is our current news:
<ol>
<li><jsp:include page="/WEB-INF/Item1.html"/>
<li><jsp:include page="/WEB-INF/Item2.html"/>
<li><jsp:include page="/WEB-INF/Item3.html"/>
<li><jsp:include page="/WEB-INF/Item4.jsp"/>
</ol>
</body>

include 指令:

语法:<%@ include file%>

include指令在主JSP文档转换成servlet时(一般在首次被访问时),将文件包含到文档中;

include指令石作是一种预处理,服务器将被包含文件的内容逐字节插入到主页面当中。 然后将产生的页面作为单个jsp处理。因此,Jsp:include和 include 指令根本不同之处在于它们被调的时间:jsp:include在请求期间被激活,而include指令在转换期问被激活。

如:

<body>
Imformation about our products<br>
blabal bla bla;<br>
=====================================<br>
<%@ include file="/WEB-INF/section.jsp" %>
</body>

jsp:forward:

<body>
<% String destination;
if(Math.random()>0.5){
destination="/WEB-INF/section.jsp";
}
else{
destination="/WEB-INF/Item1.html";
}
%>
<jsp:forward page="<%=destination %>"/>
</body>

如果使用jsp:forward,则主页面不能含有任何输出,这就提出一个问题:那么使用JSP又有什么好处呢?答案是:没有任何好处!实际上,使用JSP对于处理这类情况反而不利,因为现实的情形会更复杂,而复杂的代码在servlet中要比在JSP页面中更容易开发和测试。我们推荐完全避免使用jsp :forward.如果您希望执行类似于本示例的任务,请使用servlet,由servlet调用RequestBispatcher的forward方法.

JSP页面中包含文件的更多相关文章

  1. 分别应用include指令和include动作标识在一个jsp页面中包含一个文件。

    分别应用include指令和include动作标识在一个jsp页面中包含一个文件. hello.jsp <%@ page language="java" import=&qu ...

  2. 在一个JSP页面中包含另一个JSP页面的三种方式

    转载自://http://blog.163.com/neu_lxb/blog/static/179417010201121343132918/ (1)include指令          includ ...

  3. jsp页面中引入文件路径问题的解决方案(使用request获取项目路径)【原创】

    在项目页面中,总会引入一些js和css,相对路径or绝对路径的选择就显得至关重要了!下面是项目中遇到的问题和解决方案,做一下记录! 环境: myEclipse创建工程,使用jsp+css+js,项目目 ...

  4. JSP页面中的指令标识

    JSP页面中的指令标识 制作人:全心全意 指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中.也就是说,指令标识对于客户端浏览器是不可见的 ...

  5. 在一个jsp页面中引用另一个jsp文件的路径的问题

    为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...

  6. js文件需要jsp页面中的div时,此js文件必须在div之后才能获得值,否则获取不到

    js文件需要jsp页面中的div时,此js文件必须在div之后才能获得值,否则获取不到 2.图2的内容为directionkey.js的内容

  7. jsp页面中jstl标签详解

    JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL ...

  8. 【转】jsp页面中jstl标签详解

    原文地址: JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实 ...

  9. JSP页面静态包含和动态包含的区别与联系

    ---恢复内容开始--- JSP页面静态包含和动态包含的区别与联系: 1.<%@ include file=" " %> 是指令元素,<jsp:include p ...

随机推荐

  1. urllib2.URLError: <urlopen error [Errno 104] Connection reset by peer>

    http://www.dianping.com/shop/8010173 File "综合商场1.py", line 152, in <module>    httpC ...

  2. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    changing a readonly file (linu single user mode)

  3. React常用的命令解析

    1.在目录终端下输入命令: browserify index.js -o bundle.js 该命令将require的所有文件统一打包在一个bundle.js文件中. 2.解释React文件 $ js ...

  4. C++重载运算符的规则

    (1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载. 例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示3 ...

  5. iOS 8.0正式公布啦

    从昨晚開始,苹果新版移动操作系统iOS 8.0開始提供免费下载服务.新版操作系统提供有数百个新功能,当中包含相机功能中添加了延时摄影模式,能够使用其它厂商开发的输入法.购买的App应用程序能够与最多6 ...

  6. 什么是xss盲打

    什么是xss盲打? 盲打仅仅是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的语句与语句的存在方式, ...

  7. 如何在eclipse中修改jsp默认编码

    在使用eclipse编程的时候,很多默认的编码都是iso-8859-1我们经常使用的,在eclipse中怎么修改jsp页面的默认编码呢. 第一步:打开eclipse,找到windows-->pr ...

  8. C++数据类型简析

    C++语言的基本数据类型有如下四种: 整型,说明符为int: 字符型,说明符为char: 浮点型(又称实型),说明符为float(单精度),double(双精度): 空值型,说明符为void,用于函数 ...

  9. c# session总结

    C# 中对 Session 的“(string)”.“.ToString()”与“Convert.ToString”用法笔记 在实际操作当中,我们经常会遇到将 Session 的值转为 String ...

  10. JSONObject put accumulate element 方法区别-------java中

    1.public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的va ...