这是主页面index.jsp:<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title></head>
<body>
<%@include file="WEB-INF/utility/foot.jsp"%>
</body>
</html>这是被包含的foot.jsp文件:<%@page language="java" pageEncoding="GBK" contentType="text/html; charset=GBK"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>页脚</title>
</head>
<body>
<div id="footer">
<div id="link">
<ul>
<li><a href="#">友情链接:</a></li>
<li><a href="#" title="" target="_blank"></a></li>
</ul>
</div>
<div style="clear: both;">&nbsp;</div>
<p align="center">Tbin 版权所有 <a href="admin/login.jsp">管理登录</a></p>
</div>
</body>
</html>
问题:
1、一个jsp页面中不是只能有一个pageEncoding指令,一个contentType指令吗?为什么我采用include指令包含的foot.jsp包含这两个指令时,却不会出错?
2、一个jsp只能有一个<html>、<body>、<head>标签,无论采用include指令还是采用jsp:include动作不是都只能包含在被插入的地方需要标签,而不能再包含<html>、<body>、<head>标签了。为什么我这里也同样没有报错?
3、我采用的是Eclipse开发环境。
请各位知情人士解答,谢谢

解决方案 »

  1.   

    这个跟Eclipse没关系,一个jsp可以有多个contentType的指令,也可以有多个<html>等内容,这个是没有关系的,这些都是html元素,其实跟jsp程序是没有直接关系的,最终都是送给浏览器来解释的
      

  2.   

    这个就像是多个页面的合成,合成了内容 html这些抽象上合并了
      

  3.   

    请看这篇文章
    我刚用html网页测试了一下,在body里面包含html等确实是没有错,但是上面那篇文章讲解的,以及很多有关@include和jsp:include区别的文章中讲解的,怎么跟这里实际看到的却不一样?难道Tomcat的版本问题?
      

  4.   

    jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。 
    <%@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。) 
      

  5.   

    说简单点就是 最终都会编译成html
      

  6.   

    其实我也知道jsp编译为servlet,servlet通过response输出html到浏览器进行解释执行。我就是搞不懂,那篇文章以及网络上的一些解释为什么跟我实际遇到的情况不符。是他们都错了,还是我比较特殊,还是另有原因?
      

  7.   

    就像二张纸,有自己独立的元素如各有各的html,body,form,然后你把第一张剪开,然后把第二张接到中间一样,这就是@include
      

  8.   

    怎么就没有人懂我的意思呢,我并不是要讲什么@include的实现机制,而是不懂网络上的说法
      

  9.   

    你为啥要把foot.jsp页面放到WEB-INF下面呢,我是个菜鸟
      

  10.   

    楼主去看下静态包含和动态包含另外,
    <%@page language="java" pageEncoding="GBK" contentType="text/html; charset=GBK"%>
    最好每个页面都加上,这是供JAVA编译器解析页面时设定页面编码什么的,不加有可能中文会乱码。
      

  11.   

    问题1:
    不是jsp不报错,而是你把子jsp放在了WEB-INF下,外层jsp无法访问到,也就是说,这部分内容根本没被加进来,“显得”没有报错而已。如果你把它拿出来你试试?!至于你说的想实现保护机制,不被用户非法访问,你这种方法是无法做到的。因为你的外层JSP是放在WEB-INF外面的,除非你有专门的过滤器、拦截器处理,否则这里的东西是畅通无阻的。现在的效果就是:子jsp的内容根本没被加进来。看起来是实现保护了,实际上是因为什么东西也没有。有权限的客户也无法看到问题2:
    jsp只能有一对html标签。这个结论本身就是错的。JSP是什么?嵌入了java代码的普通HTML文档,或者一个HTML文档直接改为jsp后缀。而HTML的语法检查是很松散的,不像XML那样有专门的DTD来约束。只要里面的java代码符合java语法,HTML的格式也好,语法也罢,都不会影响jsp。只不过,你用myeclipse编辑,可能会出现警告。这样的jsp也是不符合w3c的标准,无法兼容不同浏览器而已。
      

  12.   

    终于看到让我激动地回帖了。我按照你说的,将子jsp放在WEB-INF外面,但是引用它的页面同样没有报错。至于你说的,外层jsp无法访问到WEB-INF中的内容,是这样吗?在同一个工程下面,任意路径都是可以访问的吧,包括WEB-INF中的资源?只是客户端无法直接通过URL访问WEB-INF中的资源吧?
    我之所以将子页面还有错误处理页放在WEB-INF中,是因为不想让客户端直接通过URL进行非法盗链,而只能由我外层的jsp页面进行引用或者跳转过去,这是可以做到的吧?为什么说做不到呢?
    其实我只是初学者,还有很多问题很迷糊,希望高手解惑
      

  13.   

    include是将引入的页面全东西拿过来,当然会出错