jsp的<%@include和<jsp:include>的问题

在JSP中这两个一个是静态包含,一个是动态包含,但是在<%@include里面它不允许被包含的页面有和主页面一样的头,也就是说要是在主页面里声明了<%@page charset = "GB2312"%>之后,在被包含的页面里就不可以再声明了,但是要是在eclipse里面的话,一个新的jsp文件,不搞个声明的话就有些不能保存,她默认的是那个ISO的编码标准,所以必须声明,而且有些在主页面里声明了的参数在被包含的原则上说是不要再次声明了,但是eclipse里面就是报错,因为在创建一个新的页面的时候他也不知道你被那个页面include,不知道这个问题怎么解决,请求解答,在线等答案。

举个例子,你现在的index.jsp,要包含一个文件abc.jsp.

- 首先,<%@include file="abc.jsp" %> 这个是include directive
如果,你选用这个include,那么意味着,abc.jsp里的所有Java,HTML代码原封不动的都被复制粘贴到当前的文件。和你手动复制粘贴效果是一样。这个的作用就是省了复制粘贴的功夫了。当访问index.jsp的时候,这个request(请求),是一次性完成。

- 其次,
<jsp:include page="abc.jsp" flush="true">
<jsp:param name="name" value="abc" />
</jsp:include>
这个是include action, 或叫include tag。当你使用这个的时候,意味着你访问abc.jsp,然后把abc.jsp输出的HTML(注意,和在IE里看到的HTML是一样)全部放到你include的位置。当访问index.jsp的时候,这个request(请求),是用户先请求index.jsp,然后服务器再自动请求abc.jsp,合成最终的index.jsp,然后response(回应)给客户端。

- 二者比较:
1. 二者一个是直接包含原代码,一个是包含请求出的HTML。
2. 用<jsp:include>的话,如果abc.jsp里有response.redirect("")或者response.addCookie("")等等关于response的操作,都回被忽视。也就是说用户不回被送到另一个页面。
但此时用<%@include>的话,abc.jsp里所有动response的操作都会正常运行。
3. 用<jsp:include>因为它是向abc.jsp发送一个请求,所以请求可包含<jsp:param>,就是parameter(参数)。
若用<%@include>,就不可以加参数。
4. 速度上,<%@include>会快一些,因为他只是处理一个请求。而<jsp:include>是处理两个请求,所以慢一点。
5. <jsp:include page="http://www.google.com/search?q=abc" />这样都可以,相当于把有HTML包含。
但在<%@include file="abc.jsp" />中,只可以包含你自己网站里的原始代码,也就是说abc.jsp必须存在,若不存在,会出现Compilation Error(编译错误)。
6. 使用上<%@include>比较常用,一般用于检测用户是否登陆,或者网站的LOGO,网站的一些静态不变的信息。
<jsp:include>一般用于发送一个请求,并接受所回应的HTML。可以加入Parameter(参数)。

具体请看Sun 的Documentation
<jsp:include>
http://java.sun.com/products/jsp/tags/11/syntaxref1112.html
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-19
<%@ page language="java" pageEncoding="gb2312"%>在被引用的页面上这么写 然后没有html中的<body>
在引用页面就可以调用啦~
第2个回答  2008-08-19
发表点个人的看法:
1. <%@include包含的页面一般都是没有显示的页面,也就是body基本是空白的,包含的页面都是java代码,这个包含是在页面的最开始执行目标页面的java代码,比如验证用户是否登陆的代码,如果没登就跳转到登陆页面。所以目标页面是什么都包含的。
2. <jsp:include>包含的页面一般就是静态的html代码,为了方便在多个页面调用,一般都是个table。所以不需要写什么参数,配置,其实也就是把页面的显示的代码抠除去了一段,显示的时候再引用回来,方便多个页面引用。
第3个回答  2008-08-19
你应该是用eclipse自动生成的页面代码,在被引用页里存在如下代码。去掉他们就好了
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">

还有<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 这样的标签是可以加在被引用页中的。并不影响输出效果。

不管是<%@include %> 还是<jsp:include />, 被引用的页面如果如果不做单独页面使用的话,完全可以去掉
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
…………
</head>
<body>
还有
</body>
</html>
只输出想要的就好。拼装到引用页的时候会组成完整的页面。
第4个回答  2008-08-19
每页都写<%@page charset = "GB2312"%>吧
相似回答