- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
原因就在这里了。是因为在翻译阶段,date.jsp 文件的代码被原封不动 地加入到了 test.jsp 页面从而合成一个文件。合成后的文件中就会相同的: <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 这句代码。解决的办法是把 date.jsp 文件中的这句删掉。刷新后再请求 test.jsp 页面
服务器用 tomcat,引入页面的 jsp 文件叫 test.jsp。被引入的页面叫 date.jsp.这个 jsp 文件里存放的是一个有关时间的 jsp 代码,当前的上下文根设 为 test //======date.jsp 的源文件=====//
Html 代码
1. <%@ page language=”java” contentType="text/html;charset=gb 2312"%>
个 date_jsp.java 文件和一个 date_jsp.class 文件.这两个文件得来的方式跟 test_jsp.java 和 test_jsp.class 文件得来的方式一样.再查看一下此时 test_jsp.java 文件的代码会发现.此时只新增加了一句代码: JspRuntimeLibrary.include(request, response, "date.jsp", out, tru e);
通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏) 都相同的时候,我们就可以考虑用 include。具体在哪些时候用<%@ include
file=” ”%>,哪些时候用<jsp:include page=” ” flush=”true”/>.这种 形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在 何时去用以及如何选择。 <%@ include file=” ”%>,jsp 的 include 指令元素读入指定页面的内容。并 把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是 jsp 被 转化成 servlet 的阶段进行的。
<%@ include file="b.jsp">此指令表示:静态地包含页面,不管其内容如何, 不过是静态页面还是动态页面都首先将页面的内容先加进来。 区别 2:
<jsp:include page="b.jsp" />可以分开写成:<jsp:include page="b.jsp" ><jsp:param name="参数名" value="参数值"/></jsp:include>这样就可 以传递参数。
经验:
1.由于“1”是先执行后包含,假如 a.jsp 页面定义了 String strr,b.jsp 也定 义了 String strr ,因此 b.jsp 用方法一包含 a.jsp 不会出现重复定义错误, 而用方法二就会出现 strr is already defined in _jspService…… 2.方法一在写包含与被包含文件时候比较随意,不用考虑太多重复定义等因素, 方法二相对方法一能节省很多代码,方法一更利于实现功能模块化分,而方法二 更灵活,能更灵活的调用,两种方法结合当然最好了!
Jsp 容器负责将 jsp 页面转化成 servle(t 称为 jsp 页面实现类?JSP Page implementation class),并编译这个 servlet。这两步就构成了翻译阶段.
由此我们就会知道:jsp 页面是把 include 指令元素所指定的页面的实 际内容(也就是代码段)加入到引入它的 jsp 页面中,合成一个文件后被 jsp 容 器将它转化成 servlet。可以看到这时会产生一个临时 class 文件和一个 java 文件。下面举个例子。
显示如下: 2003? ê 12??10?? 13:30:13 有关 jsp 中 include 的两种用法.敬请关注。
此时会在页面上看见.我们所引入 date.jsp 输出的日期中中文出现了乱 码.什么原因?是因为 include 行为元素是在请求处理阶段执行的(此处要对请求 处理阶段进行说明一下.Jsp 容器除了上面提到的负责将 jsp 页面转化成 servlet 外,还负责调用 jsp 页面实现类以处理每个请求并产生应答.这个阶段我们就称 为请求处理阶段.请求处理阶段仅执行类文件)。
JSP 中包含外部文件的方式
文章分类:Web 前端
1.<jsp:include page="b.jsp" flush="true"/>
2.<%@ include file="b.jsp" %>
ห้องสมุดไป่ตู้不同点: 区别 1:
<jsp:include page="b.jsp" />(先执行,后包含)此标签表示法:能动态区 别加进来的是动态页面还是静态页面,对于静态页面则直接将资源包含(仅取其 文本)。
16.dateStr = (1900+date.getYear()) + "年 " + (date.getMonth()+1) + "月" + date.getDate() + "日 (星期" + date_cn + ")";
17.%> 18.document.write("<%=dateStr%>");
件. 8. <head> 9. <body> 10.<table><tr><td> 11.有关 jsp 中 include 的两种用法.敬请关注。 12.</td></tr></table> 13.</body> 14.</html>
在 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.
//======以下是 test.jsp 的源文件=============//
Java 代码
1. <%@ page language=”java” contentType=”text/html;charset=g b2312”%>
2. <html> 3. <head> 4. <title>include 的两种用法</title> 5. <jsp:include page=”date.jsp” flush=”true”/> 6. <%--@ include file=”date.jsp” %--> 7. //我们在这里用 include 的两种不同形式来引入 date.jsp 这个文
由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以 对 page 属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一 个页面.还可以添加一些将被引入的页面读取的请求参数. <jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” > <jsp:param name=”fitstParamer” value=”firstValue”> <jsp:param name=”lastParamer” value=”lastValue”> </jsp:include>
它并没有把 date.jsp 文件的代码加入到 test.jsp.
只是在运行时引入了 date.jsp 页面执行后所产生的应答.这意味着我们可 以指定任何能够产生应答的 Web 资源,(例如一个 servlet 或一个 jsp 页面),只要 这些资源所产生的类型和 jsp 页面产生的内容类型相同.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 两个文件。
所以在我们作 include 行为元素引入页面时,实际只是引用了 date.jsp 这 个文件被转化并被编译后产生的 servlet 类文件.既如此, date.jsp 就是作为 一个单独的文件在执行后才被 test.jsp 文件运行时调用.由于 date.jsp 文件中 没有指定字符编码.所以出现了乱码.解决办法是在 date.jsp 文件中重新把刚才 去掉的 <%@ page language=”java” contentType=”text/html;charset=gb2312 ”%> 这行语句加入后刷新重新运行.此时页面显示正确,并跟用 include 指令正常运 行时一样.再查看 tomcat 下的临时文件会发现.此时多出了一
详细说明:
我们都知道在 jsp 中 include 有两种形式,分别是 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/>
前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它 们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。
这里的 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.
这里对翻译阶段进行一下说明:我们知道,jsp 页面不能原封不动地被传 送给浏览器,所有的 jsp 元素都必须首先由服务器进行处理。这是通过将 jsp 页面转达化成 servlet,然后执行这个 servlet 来完成的。服务器需要一个 jsp 容器来处理 jsp 页面。jsp 容器通常以 servlet 的形式来实现,这个 servlet 经 过配置,可以处理对 jsp 页面的所有请求。
2. <% 3. java.util.Date date=new java.util.Date(); 4. String date_cn =""; 5. String dateStr = ""; 6. switch(date.getDay()) 7. { 8. case 0:date_cn ="日"; break; 9. case 1:date_cn ="一"; break; 10.case 2:date_cn ="二"; break; 11.case 3:date_cn ="三"; break; 12.case 4:date_cn ="四"; break; 13.case 5:date_cn ="五"; break; 14.case 6:date_cn ="六"; break; 15.}