学习J2EE至今,项目也只做了两个,中途遇到一些问题,最多的可能要数中文显示及插入数据库的中文问题。现总结如下:
(一)定义中文转换方法:
新建JSP页面,命名为toChinese.jsp 也可以是别的;
定义方法为:
<%!
String toChinese(String str) {
String rs = null;
byte[] temp;
try {
temp = getBytes("ISO8859-1");
rs = new String(temp,"gb2312");
}
catch(java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
return rs;
}
String toChinese(Object obj) {
return toChinese(obj.toString());
}
%>
在JSP页面中,需要用到中文转换的地方就引入该页面,然后用这个方法进行转换。
如:<%@ include file="toChinese.jsp" %>
String content = toChinese(request.getParameter("tContent"));
PS:这种方法是比较保守的做法。因为无论把系统移植到任何地方,都可以用。
(二)设置HTTP询问为GB2312:
在每个需要中文转换的地方设置:request.setCharacterEncoding("gb2312");
那么,所有以POST或者GET方式传递的参数都会以GB2312方式编码。
PS:这种方法很方便,但是也造成编码的重复。重用性级差。
(三)编写Filter过滤器,让所有的页面的HTTP询问都以GB2312方式编码:
编写过滤器
package com.pharm.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
/**
* 字符编码过滤器 <br>
*
* 让 request 为简体中文 GB2312
*
* @author FuChun-阿影
* @version 1.1
*/
public class EncodingFilter implements Filter {
protected FilterConfig filterConfig;
private String targetEncoding = "gb2312";
/**
* 初始化过滤器和一般的Servlet一样,它也可以获得初始参数
*
* @throws ServletException if an error occurred.
*/
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
this.targetEncoding = config.getInitParameter("encoding");
}
/**
* 进行过滤处理,这个方法最重要,也是Filter的核心代码
*
* @throws IOException if an error occurred.
* @throws ServletException if an error occurred.
*/
public void doFilter(ServletRequest srequest,ServletResponse sresponse,FilterChain chain)
throws IOException,ServletException {
System.out.println("使用以下方法对HTTP请求进行编码: encoding="+targetEncoding);
HttpServletRequest request = (HttpServletRequest)srequest;
request.setCharacterEncoding(targetEncoding);
chain.doFilter(srequest,sresponse);
}
/**
* 设置过滤器日志
*/
public void setFilterConfig(final FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
/**
* 实现Filter的方法,销毁过滤器
*/
public void destroy() {
this.filterConfig = null;
}
}
在WEB.xml中描述:
<filter>
<filter-name>encoding</filter-name>
<filter-class>EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
PS:重用性极好。