解决JSP中使用request乱码问题_第1页
解决JSP中使用request乱码问题_第2页
解决JSP中使用request乱码问题_第3页
解决JSP中使用request乱码问题_第4页
解决JSP中使用request乱码问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、核心提示:经常在讨论区看到冇人问我的jsp显示中文冇乱码怎么办,我用request得到的用户输入的中 文怎么是乱码经常在讨论区看到有人问我的jsp显示中文有乱码怎么办,我用request得到的用户输入的中文怎么是乱码,我把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作utf-8看待。(一)request中的双字节文字好下面我们就来实现在整个应用程序中使用utf-8编码工作,之所以选择utf-8不仅仅之于上述原因,我们知道java的就是基于在utf-8之上的,所以我们选择utf-8应该没错"

2、;我们首先把我们的.java, ,jsp文件都用utf-8编码来保存,如果以前的没有用utf-8 保存也无所谓,但是建议以后写的都用utf-8来保存。并在.jsp 里面写:<%page contenttype二"text/html; charset二utf-8"%>而不是page contenttype二"text/html; charset二utf-8>然后在web. xml添加下面一段:<webapp> <filter><filter-name>set character encoding/filter-n

3、ame<filter-class>com. redv. projects, eduadmin. ml. filters- setcharacterencodingfilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>set

4、character encoding/filter-name<url-pattern>/*</url-pattern></fi1ter-mapping></web-app>其a com. redv. projects, eduadmin. uti 1 filters setcharacterencodingfiltcr 的代 码如下:package com. redv projects, eduadmin. ut订.filters;import java. io. ioexception;import javax< servlet. fil

5、ter;import javax< servlet. filterchain;import javax< servlet. filterconfig;import javax. servlet. servletexception;import javax. servlet. servletrequest;import javax. servlet. servletresponse;import javax. servlet. unavailableexception;import javax. servlet, http. httpservletrequest;import jav

6、ax. servlet, http. httpservletresponse;public class setcharacterencodingf订terimplements filter protected string encoding = null;protected filterconfig filterconfig = null;protected boolean ignore = true;public void destroy() this< encoding = null;this. filterconfig = null;public void dofi1ter(ser

7、vletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception / conditionally select and set the character encoding to be usedif (ignore | (request. getcharacterencoding()二二 null) string encoding 二 selectencoding(request);if (encoding != null) request. setcha

8、racterencoding(encoding) ; /就是这句话在工作的啦,哈哈,它:0 verrides the name of the character encoding used in the body of this request. t his method must be called prior to reading request parameters or reading input using getreader()./ pass control on to the next filter chain. dofiiter(request, response);publi

9、c void init (filterconfig filterconfig) throws servletexception this. filterconfig = filterconfig;this, encoding = filterconfig. getlnitparaineter ("encoding");string value = filterconfig. getlnitparameter(z/ignorez/);if (value = null) this, ignore = true;else if (value< equalsignorecas

10、e(/ztruez/) this, ignore = true;else if (value- equalsignorecase(yes)this, ignore = true;else this, ignore = false;protected string selectencoding(servletrequest request) return (this, encoding);这样,我们的request请求就是以utt-8编码的,在jsp程序中就可以使用:request. getpaznietercniykey")來直接得到utf-8编码的字符串了,而不需要像这样:new

11、string (request. getparameter (z,mykeyz/). getbytes (“iso-8859-1"), "gbk")來解决那些乱码了。(二)数据库处理的双字节文字另外一个,就是写入数据库的问题,我们知道我们在使用mysql的时候对以改用这样的 url 来处理汉字编码问题:jdbc:mysql:/localhost :3306/upas?useunicode=true&charact erencoding=gb2312,那么对于那些我们无法像mysql这样解决的怎么办呢?难道我们每次都这样写吗: import javasql*

12、;class. forname(/zorg. gjt. mm. mysql. driver77);connection con = null;preparedstatement pstmt = null;resultset rs = null;try con = drivermanager. getconnection (z/jdbc: mysql: /localhost: 3306/test"rootpstmt = con. preparestatement(''select f3, f4 from tbll where fl = ? and f2 = ?“);ps

13、tmt. setstring(l, new string(fl. getbytes("gbk"), iso-8859-k);pstmt. setstring(2, new string(f2. getbytes("gbk"), iso-8859-k);rs = pstmt. executequery ();string f3, fzl;while(rs< next () f3 = new string(rs. getstring(l). getbytes (z,iso-8859-rz), "gbk");f4 = new stri

14、ng(rs. getstring(2). getbytes (z,iso-8859-rz), "gbk");finally /close resouces其实我们完全可以这样写:import java. sql.import com. redv. sql. encoding. *;class. forname(z,org. gjt. mm. mysql. driver");connection con = null;preparedstatement pstmt = null;resultset rs = null;try con 二 drivermanager.

15、 getconnection(/zjdbc:mysql:/localhost:3306/test/z, "root,);/接管数据库连接实例boolean coding 二 true;encodingconnection codingconnection = new encodingconnection(con, coding," is0-8859-l, gbk);获得接管后的数据库连接实例,以后直接使用con已经是经过encodingconnection 重新包装过的实例con = codingconnection. getconnection();pstmt = con

16、. preparestatement(''select f3, f4 from tbll where fl = ? and f2 =pstmt. setstring(l, fl);pstmt. setstring(2, f2);rs 二 pstmt. executequery ();string f3, f4;while(rs. next () f3 二 rs. getstring(l);f4 = rs. getstring(2);finally /close resouces 看看,怎么样,我们只需要在获取数据库连接的地方稍微修改一下,甚至我们对以把它 当作参数保存在properties里面,改变coding的布尔值来设定是否使用自动编码转换。 常常我们对以使用一个database类来封装获取数据库连接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论