學習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:重用性極好。