当前位置: 代码迷 >> Java Web开发 >> JSP..page指令的作用域问题
  详细解决方案

JSP..page指令的作用域问题

热度:406   发布时间:2007-05-23 11:13:26.0
JSP..page指令的作用域问题

教程上<%@page%>指令对于整个JSP页面.包括静态包含文件都是有效的.

但实际使用中似乎不是那么回事.


文件A内容如下
<head>
<title>大干30天</title>
</head>
<body>

文件B内容如下
<%@ include file="文件A"%>
哇哈哈哈
</body>
</html>

除非两个文件中都加入.<%@ page contentType="text/html; charset=gb2312"%>指令.不然就会有一个文件出现乱码.
不是说该指令对于静态包含文件也有效的吗?

麻烦高手解答一下.

搜索更多相关主题的帖子: JSP  指令  page  

----------------解决方案--------------------------------------------------------
不清楚!
----------------解决方案--------------------------------------------------------
<%@ include file="文件"%>
这个是静态的,相当于把JSP编译成CLASS前把引入页面插入页面里.
你把<%@ page contentType="text/html; charset=gb2312"%>放在文件B的最前面,这样访问B文件时候显示出来是不会有乱码的!

不知道你是文这个么?

----------------解决方案--------------------------------------------------------
lz问的是,在b文件中不加这句。但是包含他的文件中加上,为什么不行?
----------------解决方案--------------------------------------------------------
以下是引用风月_无边在2007-5-23 17:29:18的发言:
lz问的是,在b文件中不加这句。但是包含他的文件中加上,为什么不行?
为什么不行?行,当然行了,没问题的!可是如果包行两个<%@ page contentType="text/html; charset=gb2312"%>是不行的.这个在页面中只能有一个!


----------------解决方案--------------------------------------------------------
以下是引用angeloc在2007-5-23 17:21:00的发言:
<%@ include file="文件"%>
这个是静态的,相当于把JSP编译成CLASS前把引入页面插入页面里.
你把<%@ page contentType="text/html; charset=gb2312"%>放在文件B的最前面,这样访问B文件时候显示出来是不会有乱码的!

不知道你是文这个么?







比如,如果A文件中包含该指令(放到第一行).B文件中不包含该项指令..那么标题就是中文..但页面中的就是乱码.
如果B文件中包含该指令(放到第一行).A文件中不包含该项指令..那么标题就是乱码..页面内容就是正常的..

只有当两个文件都包含该项指令的时候..页面才是正常的.

但我的书上明明讲page指令作用域是整个页面的啊.难道我书上写错了?

[此贴子已经被作者于2007-5-24 14:40:33编辑过]


----------------解决方案--------------------------------------------------------
以下是引用keeplinker在2007-5-24 14:37:28的发言:







比如,如果A文件中包含该指令(放到第一行).B文件中不包含该项指令..那么标题就是中文..但页面中的就是乱码.
如果B文件中包含该指令(放到第一行).A文件中不包含该项指令..那么标题就是乱码..页面内容就是正常的..

只有当两个文件都包含该项指令的时候..页面才是正常的.

但我的书上明明讲page指令作用域是整个页面的啊.难道我书上写错了?


不知道你为什么会产生那个原因!
应该是任何一个页面里包含<%@ page contentType="text/html; charset=gb2312"%>时候都不会有乱码的,是对整个页面的范围!我这没出现过你的问题.
----------------解决方案--------------------------------------------------------
哦。我还以为是我的书写错了!
----------------解决方案--------------------------------------------------------
那可能可配置的关系吧。我用的是中文版的Tomcat..装SDK的时候找了最新版的。但装出来的目录却是jre1.6.0_01也不知道是不是我下错了!
----------------解决方案--------------------------------------------------------

确实出现了楼住的问题
jsp1.jsp:
<%@page contentType="text/html;charset=gb2312"%>
<%@include file="jsp2.jsp"%> 这里的include顺序我调过了,无论在内容之上还是之下都是乱码
我是JSP1

jsp2.jsp:
<%@page contentType="text/html;charset=gb2312"%> 这是不加就乱码
<h1>我是JSP2</h1>

tomcat编译原码参考:

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class jsp1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

private static java.util.Vector _jspx_dependants;

static {
_jspx_dependants = new java.util.Vector(1);
_jspx_dependants.add("/jsp2.jsp");
}

public java.util.List getDependants() {
return _jspx_dependants;
}

public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;


try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=gb2312");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

out.write('\r');
out.write('\n');
out.write("<h1>ÎÒÊÇJSP2</h1>");
out.write("\r\n");
out.write("我是JSP1");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}


继续OBing。。。


----------------解决方案--------------------------------------------------------
  相关解决方案