在test.jsp 文件中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,此刻让我们先用这种形式惹人date.jsp这个文件。你想会呈现侍趵硎题了吗?此时呈现了错误提醒: 2 G7 ^( z, x! F/ X& }
7 q% z1 e, I+ D. x4 { B
HTTP Status 500 ?org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences of contentType
: t! W- x8 t/ {' d7 I' h3 p 以下还有一堆错误,但我们只要看这里就知道问题的地址了。状况码为http 500处事器内部错误。再看下面的提醒。在date.jsp页面中不能指定多个contentType. $ o/ `" V* Y+ S7 [1 K- @% p5 `% x
原因就在这里了。是因为在翻译阶段,date.jsp文件的代码被原封不动地插手到了test.jsp页面年夜而合成一个文件。合成后的文件中就会不异的: - y: Z' w) `* e, S9 B. ]
< %@ page language=”java” contentType=”text/html;charset=gb2312”%>
6 d& \" o$ }% L2 M 这句代码。解决的法子是把date.jsp文件中的这句删失踪。刷新后再请求test.jsp页面 ) N" \1 V- O0 k* W$ f
请求test.jsp在页面显示如下
1 O: ~( T/ b i" B# ~, E 2003年12月10日 13:12:40 9 T x0 w4 \, p' { u- A
有关jsp中include的两种用法.敬请关注。 4 d0 C+ f+ ~- j2 k! j" o5 z3 \
这时我们还不能发现什么。仍是去查看tomcat下的姑且文件吧。到那儿恼去看看date.jsp文件的内容是否已被插手到了test.jsp文件中。 < 注.此处的tomcat装在E盘根目录下>目录 / r8 ?! V- \) z0 U# J2 ]
, p7 c8 q, w8 @2 f; h0 r& O
E:tomcatworkStandalonelocalhosttest.
9 v* S6 H+ f6 U/ b( w# @ 在这个目录下会看到
/ X$ R+ j9 g4 A4 A test_jsp.java和test_jsp.class两个文件。 * d4 r8 {. p! g# c9 @. u% \
这里的java文件就是jsp容器将jsp转化成了servlet而获得的test_jsp.java这个文件。
" \& \. i) C/ i, g p7 @( @ 相对应的test_jsp.class这个文件就是编译test_jsp.java这个servlet文件发生的类文件了。打开所发生的servlet文件(test_jsp.java)。此时我们会发现,在test.jsp 文件被转化成servlet文件时,在输出的< haed >之间插手了一些不是test.jsp页面琅缦沔的代码,新插手的内容就是 date.jsp琅缦沔的代码: 新插手了哪些内容或是否真的插手了新的内容请自己测试去看一下就会一目了然了.在这里不赠予陈.
; X- `! B ~. ^" r1 E 以上就是我们用< %@ include file=”date.jsp”%>这种形式获得的结不美观. 5 T% w/ F# N' S, u- x
下面我们换用< jsp:include page=”dae.jsp” flush=”true”/>也就是将 " U$ e$ b0 C# b0 F+ |6 A, y
< %@ include file=”date.jsp”%>换成< jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp. 1 u) k8 j* e& z$ C# E8 t
2003? ê 12??10?? 13:30:13 $ N, F. {' x8 c" m- y9 x6 n u
有关jsp中include的两种用法.敬请关注。 - ~2 x% I( v- k4 }' y
此时会在页面上看见.我们所惹人date.jsp输出的日期中中文呈现了乱码.什么原因?是因为include行为元素是在请求措置阶段执行的(此处要对请求措置阶段进行声名一下.Jsp容器除了膳缦沔提到的负责将jsp页面转化成servlet外,还负责挪用jsp页面实现类以措置每个请求并发生应答.这个阶段我们就称为请求措置阶段.请求措置阶段仅执行类文件)。 6 ^4 W, {- R; h: r d# W
所以在我们作include行为元素惹人页面时,现实只是引用了date.jsp这个文件被转化并被编译后发生的servlet类文件.既如斯, date.jsp就是作为一个零丁的文件在执行后才被test.jsp文件运行时挪用.因为date.jsp文件中没有指定字符编码.所以呈现了乱码.解决法子是在date.jsp文件中年夜头把适才去失踪的
9 j1 g2 A& ^1 K& u( B8 d
/ w* c/ G" ?3 n9 o5 q& s7 ~ 这行语句插手后刷新年夜头运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的姑且文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件.这两个文件得来的体例跟test_jsp.java和 test_jsp.class文件得来的体例一样.再查看一下此时test_jsp.java文件的代码会发现.此时只新增添了一句代码: . F" S8 M. Z0 T$ V+ ~/ t; W, F
JspRuntimeLibrary.include(request, response, "date.jsp", out, true); |