jsp读取数据库中文乱码问题
这个问题是从项目中设计数据库和操作数据库的人不同而造成的。所用的数据库
是sybase,设计时把数据类型设计为nvarchar了,如果是中文,读取出来就会得
到乱码。我试了好多方法还是不行,最后无奈,只好将数据类型改为varchar了。
所以在此总结一下中文乱码问题。
一、JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码
类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的
基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:
request.setCharacterEncoding("GBK")或request.setCharacterEncoding
("gb2312")。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置
response.setContentType("text/html;charset=GBK")或
response.setContentType("text/html;charset=gb2312")解决。
二、Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的
乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动
自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以
在驱动的url参数中指定,如如mm的mysql驱动:
jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
三、Java与文件/流之间的乱码
Java读写文件最常用的类是FileInputStream/FileOutputStream和
FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节
流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和
FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系
统的编码方式,如果文件内容与系统编码方式不一致,可能会出现码。 在这
种情况下,建议使用FileReader和FileWriter的父类:
InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数
中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和
OutputStreamWriter(OutputStream out, Charset cs)。
字符,字节和编码之间的关系
1. 编码问题的由来,相关概念的理解
1.1 字符与编码的发展
从计算机对多国语言的支持角度看,大致可以分为三个阶段:
系统内码
相关文档:
Servlet 整体加载过程如下
1、Web服务器接受request。
2、请求发给Servlet引擎,如果已经加载servlet,class 则直接执行,否则从硬盘中查找class 加载进来。
3、执行Service方法处理请求,并返回给web服务器。
4、web服务器返回给客户端。
Servlet的继承关系为
Servlet &n ......
方法一:在servlet的init()方法中缓存数据
当应用服务器初始化servlet实例之后,为客户端请求提供服务之前,它会调用这个servlet的init()方法。在一个servlet
的生命周期中,init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作,就可大大地提高系
统性能。
......
我们的开发方式是由demo人员完成系统的静态页面,并通过css进行美化。
为最大可能利用美工完成的静态页面,我们需要尽量减少对原html的冲击,因此我首先想到的Freemarker。
但是Freemarker最终让我空喜一场,最终自定义了一个可以递归嵌套的jsp tag来达到这个目的。
下面是解决这个问题的过程:
用css模版sdmen ......
1,DateTime类型数字
以下是引用片段:
当前时间System.DateTime的=新System.DateTime的();
1.1小时分钟当前日期秒,当前时间= System.DateTime.Now;
1.2检查本年度廉政年= currentTime.Year;
1.3当前月份廉政个月= currentTime.Month;
1,4采取当天廉政天= currentTime.Day;&n ......