`
wandejun1012
  • 浏览: 2737281 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jsp:include用法

    博客分类:
  • jsp
 
阅读更多

JSP中的include的两种用法 
我们都知道在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”%> 
<html> 
<head> 
<title>include的两种用法</title> 
<jsp:include page=”date.jsp” flush=”true”/> 
<%--@ include file=”date.jsp” %--> 
//我们在这里用include的两种不同形式来引入date.jsp这个文件. 
<head> 
<body> 
<table><tr><td> 
有关jsp中include的两种用法.敬请关注。 
</td></tr></table> 
</body> 
</html> 

在test.jsp文件中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,现在让我们先用<%@ include file=”date.jsp” %>这种形式引入date.jsp这个文件。你想会出现什么问题了吗?此时出现了错误提示: 
HTTP Status 500 ?C 
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文件时,在输出的<haed>之间加入了一些不是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是如何解释的请参考相关资料或书籍.

 

 

--------------------------------------------------------------------------------------------------

1、@那种要重启tomcat。像servlet一样,依赖于容器。而且它是那引用的文件和自己合2为1的。

2、动态的,只是调用一下引入的jsp产生的结果。

分享到:
评论

相关推荐

    jsp:include与include实探

    例如,对于经常不变的公共头部和底部,可以考虑使用`&lt;jsp:include&gt;`预编译后缓存,而对于需要实时更新的信息,如用户个人信息、新闻列表等,则应使用`jsp:include`。 在分析和解决问题时,了解这些基本原理能够帮助...

    JSP:include和include指令区别

    在JavaServer Pages (JSP) 技术中,`&lt;jsp:include&gt;` 和 `&lt;%@ include %&gt;` 是两个用于页面组合的指令,它们虽然都用于将一个或多个文件的内容插入到主页面中,但它们的工作机制和使用场景有所不同。理解这两者的区别...

    用jsp:include控制动态内容的方法.docx

    nt test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;This content is statically in the main JSP file. &lt;jsp:include page="included.html"/&gt;&lt;/body&gt;&lt;/html&gt;]]&gt;)正如你所见,清单2使用了传统的`&lt;%@include file="..."%&gt;`伪指令来包含...

    Java Web 实验四 掌握<jsp:include>动作的使用

    本实验的目标是让学生掌握`&lt;jsp:include&gt;`动作的使用方法,并通过实际操作来理解其工作原理。 首先,我们来看实验的背景:这是一个网上购物系统,涉及到的商品类型有mp3和mp4。在这个系统中,用户可以在商品选购...

    jsp的include的两种用法

    JSP 中的 Include 的两种用法 JSP 中的 Include 有两种用法,分别是 `&lt;%@ include file=” ”%&gt;` 和 `&lt;jsp:include page=” ” flush=”true”/&gt;`。这两种用法都可以用于引入其他 JSP 文件,但是它们之间存在着一些...

    springMVC使用jsp:include嵌入页面的两种方法(推荐)

    本文将详细介绍两种使用`jsp:include`标签在Spring MVC中嵌入页面的方法。 1. 静态嵌入子页面 静态嵌入是通过`&lt;%@ include file="..." %&gt;`语法实现的。这种方法在JSP页面被转换成Servlet源代码时就已经处理,所以...

    使用jsp:include控制动态内容的方法

    本文实例讲述了使用jsp:include控制动态内容的方法。分享给大家供大家参考,具体如下: 清单 1. JSP include 伪指令 &lt;![CDATA[ &lt;&#37;@ page language=java contentType=text/html %&gt; &lt;html&gt; &lt;head&...

    Java Web应用开发 14 课堂案例-使用include动作.docx

    下面将详细阐述`jsp:include`动作的使用方法以及它与`include`指令的差异。 ### `jsp:include`动作的基本语法和用法 `jsp:include`动作的基本语法格式如下: ```jsp &lt;jsp:include page="relativePath" flush=...

    jsp_include_demo.rar_DEMO

    `jsp_include_demo`示例可能展示了如何在JSP页面中使用`&lt;jsp:include&gt;`标签来包含一个或多个公共组件,如页眉、页脚或者导航栏。这些组件可以独立维护,任何改动都会自动反映在使用它们的页面上,提高了代码的组织...

    JSP中include指令和include行为的区别

     jsp:include page=” ” flush=”true”/&gt; 前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。 通常当应用程序中所有的...

    jsp的Include方式

    本文将深入探讨JSP的`Include` 方式的概念、类型以及使用方法。 1. **静态Include(&lt;jsp:include&gt;)** 静态Include使用`&lt;jsp:include&gt;` 标签来完成,语法如下: ```jsp &lt;jsp:include page="relativePath" flush=...

    JSP动作元素.pptx

    &lt;jsp:include&gt;动作元素的常用方法包括: &lt;jsp:include page="scripts/login.jsp" /&gt; &lt;jsp:include page="copyright.html" /&gt; &lt;jsp:include page="/index.html" /&gt; &lt;jsp:include page="scripts/login.jsp"&gt; &lt;jsp:...

    include 两种用法的区别

    ### JSP Include 两种用法的区别 在JSP(JavaServer Pages)开发中,`include`指令被广泛用于将一个JSP页面的内容嵌入到另一个JSP页面中。这种技术可以提高代码的重用性、简化维护过程并有助于实现更灵活的设计。在...

    jsp include文件时的一个乱码解决方法.docx

    * 解决方法:在被包含文件中再次声明 `contentType` * 使用 `jsp:include` 方式可以避免乱码的问题 * JSP 编译指令:page、include、taglib * JSP 中的 include 有几种形式:静态导入和动态导入 * JSP 指令元素:...

    jsp实现页面跳转的方法

    如果在相同的业务逻辑下,我们使用`jsp:forward`代替`jsp:include`,那么在`calling1.jsp`中,一旦租金满足条件,就会通过`jsp:forward`动作直接跳转到`destination1.jsp`。此时,`calling1.jsp`的后续代码将不会被...

    基于jsp:included的使用与jsp:param乱码的解决方法

    本文中涉及到的核心知识点包括了JSP标签库中的&lt;jsp:include&gt;标签的使用以及解决通过&lt;jsp:param&gt;标签传递参数时出现的乱码问题。 首先,让我们来了解&lt;jsp:include&gt;标签的使用。在JSP页面中,&lt;jsp:include&gt;标签被用来...

    jsp学习大全精华.doc

    而`jsp:include`用于动态包含页面,适用于重复使用部分页面内容的场景。两者都可以通过`jsp:param`传递参数,使得页面间的数据交换更加灵活。在实际开发中,理解并正确使用这些元素对于构建动态、交互性强的Web应用...

    jsp include 乱码问题的解决

    本文将详细解析JSP `include` 乱码问题的成因以及解决方法。 首先,我们要理解乱码产生的根本原因。乱码通常是由于字符编码不一致导致的。在JSP中,页面的编码、包含的文件的编码以及服务器的默认编码如果设置不...

    JSPparam动作标记的使用[归类].pdf

    在`come.jsp`中,我们可以使用`request.getParameter()`方法获取传递过来的`number`参数值: ```java String str = request.getParameter("number"); double n = Double.parseDouble(str); ``` 这样,`come.jsp`就能...

Global site tag (gtag.js) - Google Analytics