`
rainbow686
  • 浏览: 161691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp include 乱码问题的解决

    博客分类:
  • Java
阅读更多

 jsp include 乱码问题的解决
jsp include 的文件有时候会出现乱码,经过测试发现如下方法可以修改。
第一种情况可以修改被include的文件:
1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上代码:

java 代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  

2.当jsp include静态文件时(html文件)可以在被include的html文件的<head></head>标签内加上代码:

xml 代码
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  

第二种情况不能够修改被include的文件:
此时可以修改tomcat的web.xml达到目的

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7.     <jsp-config>  
  8.         <jsp-property-group>  
  9.             <description>  
  10.                 Special property group for JSP Configuration JSP   
  11.                 example.   
  12.             </description>  
  13.             <display-name>JSPConfiguration</display-name>  
  14.             <url-pattern>*.jsp</url-pattern>  
  15.             <el-ignored>true</el-ignored>  
  16.             <page-encoding>UTF-8</page-encoding>  
  17.             <scripting-invalid>false</scripting-invalid>  
  18.             <include-prelude></include-prelude>  
  19.             <include-coda></include-coda>  
  20.   
  21.             <description>  
  22.                 Special property group for JSP Configuration JSP   
  23.                 example.   
  24.             </description>  
  25.             <display-name>JSPConfiguration</display-name>  
  26.             <url-pattern>*.html</url-pattern>  
  27.             <el-ignored>true</el-ignored>  
  28.             <page-encoding>UTF-8</page-encoding>  
  29.             <scripting-invalid>false</scripting-invalid>  
  30.             <include-prelude></include-prelude>  
  31.             <include-coda></include-coda>  
  32.         </jsp-property-group>  
  33.     </jsp-config>  
  34.   
  35. </web-app>  

其中jsp-config一段是用来说明你要将包含的页面默认按照什么编码格式包含。web-app 标签的version必须是2.4的。
具体可以参见
http://www.javaworld.com.tw/jute/post/view?bid=9&id=44041&sty=1&tpg=1&age=-1

分享到:
评论
6 楼 nakupanda 2008-08-13  
我发现liquidthinker同学没有理清现在我们关注的问题,现在我们关注的是编译期组合出来的文件乱码问题,而不是客户与服务器交互时的乱码问题.
5 楼 rainbow686 2007-09-14  
有意思啊!
4 楼 dengyin2000 2007-09-14  
啊B, 你的帖子被水了!!!
3 楼 liquidthinker 2007-09-14  
在weblogic里面是不能在include page里面再定义contentType的




如果熟悉http,熟悉servlet,明白其中原理,永远都不会遇到乱码问题。


大概说说get和post两种方式:

get需要手工编码解码,手工的意义是编解码过程不是web server来做,甚至web server都不知道你用了什么字符集,但是你自己应该知道。或者程序里用代码,或者客户端浏览器。如果是程序编解码,应该知道对应于各种字符集,编解码规则是怎样的,如果不知道,jdk中提供了java.net.URLDecoder和java.net.URLEncoder两个类,它们都分别有两个带参数和不带参数的编解码方法,不带参数的,使用平台默认的字符集,带参数的,传入的参数作为字符集。其中使用平台默认的含义,不是指java文件编码的字符集,这个默认都是utf8(因此在java里面可以用中文命名类、变量等;可以将utf8兼容的任何语言的字符串保存在String中),而是与语言有关的,比如中文平台下,很可能是gbk,英文平台下可能为iso-8859-1。编解码使用的字符集理论上要一致(兼容也可以,比如gbk和gb2312,但gb2312对应于gbk的补集的内容会是乱码)。为了保持一致的编码解码字符集,需要在方法传入时显式指定一致的字符集。jdk不推荐使用无参的方法,原因就是你可能在一个平台下编译,一个平台下测试,一个平台下部署,如果这些平台的默认字符集不相同,乱码就会出现了。另一种是客户端浏览器的编解码,不同的浏览器不尽相同,比如ie选项里面的“发送utf-8 url”,在ie页面右键选择“编码”等等就是做的这样的事。

然后说说post的情况,post的http消息体是二进制的,编码可以是浏览器、程序员,解码是web server做的事,但是程序员可以干涉。servlet规范要求的默认字符集是iso-8859-1,为什么会有这样的规则,使用中文不是很麻烦吗?自己想想吧,原因可以理解为商品的标签上是rmb100,那你不会花rmb200来买它。那么如何干涉web server用指定的字符集去解码呢?举个例子,一个html page,如果有下面的指定:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

首先浏览器会以utf8将http消息体编码后发送给web server,web server接收到后其实是并不知道是哪种字符集,这个时候它会按一定规则去这些地方找字符集:http消息头的locale、http消息头的Accept-Language、http消息头的Accept-Charset、request.getCharacterEncoding()方法(有优先关系的,具体的记不住了),如果找不到的话,就默认了(iso-8859-1),如果接收的时候是用的utf8或其它不是iso-8859-1的字符集,那么乱码就出现了。前面提到的http消息头,是浏览器发送过来的,这里面又有一些规则,国际化,包括spring,就是在这里面做的文章。先不管http消息头规则,我们知道web server会去找request.getCharacterEncoding()方法,那么我们可以干涉的地方就出现了,与之对应的request.setCharacterEncoding()方法,让我们设置正确的字符集,然后再被web server利用此字符集解码,然后我们就可以得到post过去的被正确解码的数据了。dengyin2000同学所说用filter其实就是利用了这点来干涉,解决问题的。

希望这个大概的解释能有一些帮助,在网上看到其它文章,要么是没有说到问题本质,要么根本就是在乱说。
2 楼 liquidthinker 2007-09-14  
在weblogic里面是不能在include page里面再定义contentType的
如果熟悉http,熟悉servlet,明白其中原理,永远都不会遇到乱码问题。
大概说说get和post两种方式:
get需要手工编码解码,手工的意义是编解码过程不是web server来做,甚至web server都不知道你用了什么字符集,但是你自己应该知道。或者程序里用代码,或者客户端浏览器。如果是程序编解码,应该知道对应于各种字符集,编解码规则是怎样的,如果不知道,jdk中提供了java.net.URLDecoder和java.net.URLEncoder两个类,它们都分别有两个带参数和不带参数的编解码方法,不带参数的,使用平台默认的字符集,带参数的,传入的参数作为字符集。其中使用平台默认的含义,不是指java文件编码的字符集,这个默认都是utf8(因此在java里面可以用中文命名类、变量等;可以将utf8兼容的任何语言的字符串保存在String中),而是与语言有关的,比如中文平台下,很可能是gbk,英文平台下可能为iso-8859-1。编解码使用的字符集理论上要一致(兼容也可以,比如gbk和gb2312,但gb2312对应于gbk的补集的内容会是乱码)。为了保持一致的编码解码字符集,需要在方法传入时显式指定一致的字符集。jdk不推荐使用无参的方法,原因就是你可能在一个平台下编译,一个平台下测试,一个平台下部署,如果这些平台的默认字符集不相同,乱码就会出现了。另一种是客户端浏览器的编解码,不同的浏览器不尽相同,比如ie选项里面的“发送utf-8 url”,在ie页面右键选择“编码”等等就是做的这样的事。
然后说说post的情况,post的http消息体是二进制的,编码可以是浏览器、程序员,解码是web server做的事,但是程序员可以干涉。servlet规范要求的默认字符集是iso-8859-1,为什么会有这样的规则,使用中文不是很麻烦吗?自己想想吧,原因可以理解为商品的标签上是rmb100,那你不会花rmb200来买它。那么如何干涉web server用指定的字符集去解码呢?举个例子,一个html page,如果有下面的指定:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

首先浏览器会以utf8将http消息体编码后发送给web server,web server接收到后其实是并不知道是哪种字符集,这个时候它会按一定规则去这些地方找字符集:http消息头的locale、http消息头的Accept-Language、http消息头的Accept-Charset、request.getCharacterEncoding()方法(有优先关系的,具体的记不住了),如果找不到的话,就默认了(iso-8859-1),如果接收的时候是用的utf8或其它不是iso-8859-1的字符集,那么乱码就出现了。前面提到的http消息头,是浏览器发送过来的,这里面又有一些规则,国际化,包括spring,就是在这里面做的文章。先不管http消息头规则,我们知道web server会去找request.getCharacterEncoding()方法,那么我们可以干涉的地方就出现了,与之对应的request.setCharacterEncoding()方法,让我们设置正确的字符集,然后再被web server利用此字符集解码,然后我们就可以得到post过去的被正确解码的数据了。dengyin2000同学所说用filter其实就是利用了这点来干涉,解决问题的。

希望这个大概的解释能有一些帮助,在网上看到其它文章,要么是没有说到问题本质,要么根本就是在乱说。
1 楼 dengyin2000 2007-09-14  
有没有试过EncodingFilter?

相关推荐

    jsp include文件时的一个乱码解决方法.docx

    jsp include文件时的一个乱码解决方法.docx

    jsp include文件时的一个乱码解决方法

    @ include %&gt;方式来包含这个文件,主要是这样能够被包含页面会跟包含页面在编译时被编译成一个文件,里面的变量可以相互通用,而&lt;jsp&gt;方式则会分别编译,变量不能相互使用。   而在tomcat4.x版本中,只要在包含页面...

    JSP常见的三个编译指令page、include、taglib

    JSP常见的三个编译指令 1、page指令 是针对当前页面的指令 2、include指令 用于指定包含另一个页面 3、taglib指令 用于定义和访问自定义标签 ...included的使用与jsp:param乱码的解决方法jsp include引

    基于jsp:included的使用与jsp:param乱码的解决方法

    本篇文章是对jsp:included的使用与jsp:param乱码的解决方法进行了详细的分析介绍,需要的朋友参考下

    JSP+ACCESS功能全面的新闻管理系统

    管理员帐号密码都是admin,tomcat4下运行tomcat6的话把&lt;%@ include="***.jsp"%&gt;里应用的JSP文件头上加个编码,不然会乱码的。还需要改inc文件夹下的数据库连接路径,以及chang.jsp和hf.jsp的数据库连接路径。里面的...

    struts2+kindEditor4.1.7

    中文乱码不是问题,一般struts2+spring开发项目的时候,使用spring的filter就可以搞定 &lt;filter-name&gt;Set Character Encoding &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter ...

    java web技术开发大全(最全最新)

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个...

    java web开发技术大全

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    3.4.2 解决中文乱码 3.4.3 获取客户端数据 3.5 response回应对象的应用 3.5.1 HTTP头信息的操作 3.5.2 设置MIME类型 3.5 13页面重定向操作 3.6 Session会话对象的应用 3.6.1 session的生命周期 3.6.2 会话的创建与...

    CHM帮助文档打包下载了。。。

    这里集合了很多常用的帮助文档,涉及 ExtJS,Jquery,Prototype,SQLServer,PowerDesigner,PowerBuilder,HTML,CSS,XML,PHP,MySQL,C#,Blend,JSP,ActionScript,Flex 绝对可用,无乱码。。。

    java web 视频、电子书、源码(李兴华老师出版)

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得...

    李兴华Java Web开发实战经典(高清版) Part2

    6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1...

Global site tag (gtag.js) - Google Analytics