日期:2014-05-19  浏览次数:20792 次

神奇的@include
这是主页面index.jsp:
HTML code

<%@ 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文件:
HTML code

<%@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开发环境。
请各位知情人士解答,谢谢

------解决方案--------------------
这个跟Eclipse没关系,一个jsp可以有多个contentType的指令,也可以有多个<html>等内容,这个是没有关系的,这些都是html元素,其实跟jsp程序是没有直接关系的,最终都是送给浏览器来解释的
------解决方案--------------------
这个就像是多个页面的合成,合成了内容 html这些抽象上合并了
------解决方案--------------------
jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。 
<%@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。)
------解决方案--------------------
说简单点就是 最终都会编译成html
------解决方案--------------------
就像二张纸,有自己独立的元素如各有各的html,body,form,然后你把第一张剪开,然后把第二张接到中间一样,这就是@include
------解决方案--------------------
楼主去看下静态包含和动态包含。。。

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

------解决方案--------------------
问题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的标准,无法兼容不同浏览器而已。

------解决方案--------------------