目录

编码问题

5.1.6. 编码问题

5.1.6.1. 问题背景

由于应用服务器或操作系统的不同,导致系统在以下几个方面可能会出现乱码情况:

1.填报时

2.参数模板

3.olap中点击统计图

5.1.6.2. 问题现象

1.填报时,当整个页面提交的时候,所填的中文数据在传入数据库的过程中出现了编码错误,使得存入数据库中的数据已经不是在填报页面上所填写的内容;

2.作为参数模板时,当中文参数传递到程序中时已经是乱码,所以即使数据库中存在相应的数据,但是不能查找出来;

3.在olap中点击统计图的时候报错,报错信息可能如下:

10:06:37,851 ERROR [STDERR] java.lang.NullPointerException 10:06:37,852 ERROR [STDERR] at com.runqian.report4.view.olap.OlapLet._$2(Unknown Source:188)10:06:37,852 ERROR [STDERR] at com.runqian.report4.view.olap.OlapLet.Create (Unknown Source:136)10:06:37,852 ERROR [STDERR] at com.runqian.report4.view.olap.ShowOlapGraph.Service(Unknown Source:60) 10:06:37,852 ERROR [STDERR] at com.runqian.report4.view.ReportServlet.service(Unknown Source:897) 10:06:37,852 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 10:06:37,852 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 10:06:37,852 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 10:06:37,852 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

5.1.6.3. 解决方法

对于以上的几种情况,我们可以采用以下两种方式进行解决:

1.在每个JSP/SERLVET中使用request. setCharacterEncoding ()进行编码设置,括号内加入你要转变成的编码格式,一般为GBK;

2.在系统中添加过滤器,我们可以在WEB-INF/web.xml中加入以下代码:

<filter> <filter-name>charsetCodingFilter</filter-name> //过滤器名称<filter-class>CharsetCodingFilter</filter-class> //过滤器对应的类<init-param> <param-name>charset</param-name> //过滤器类中对应的参数<param-value>gbk</param-value> //对于上述参数的赋值</init-param> </filter> <filter-mapping> <filter-name>charsetCodingFilter</filter-name> //过滤器映射的名称,必须与上述过滤器名称一致<url-pattern>/*</url-pattern> //过滤的范围 </filter-mapping> 

以上代码为WEB-INF/web.xml中添加的,对于上述代码中的过滤器对应的类,应由程序员根据系统的实际情况进行编写,编写完成通过编译后,将其所生成的class文件放在的\WEB-INF\classes文件夹下。(注:类名必须和上述配置中的过滤器对应的类名一致)先举一例进行简单的说明。

import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class CharsetCodingFilter implements Filter {//类名和配置中过滤器对应的类名一致private String charset; public void destroy() { // TODO Auto-generated method stub }public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub req.setCharacterEncoding(charset); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub this.charset=config.getInitParameter("charset"); } } 
[注意] 注意

以上给出的只是一个简单的例子,具体的过滤情况请程序员根据项目的实际情况进行代码编写。