當你是新手開始在學JSP的時候,肯定會遇到這樣的一個問題,你的頁面保存完打開或者寫到數據庫的東西,怎麼在頁面或數據庫中看到的卻是一堆的???,事實告訴你,你遇到了字符亂碼問題,沒辦法。baidu,google找啊找。太多了吧。各說風雲,你開始試, 有的可以有的不行,有的好用,有的卻不好用。至少我當初是這樣的感覺。。那個感覺是鬱悶加鬱悶!!自信心都可能受打擊呢,當然你身邊如果有高手,慢慢幫你解釋,那你真是太幸福了,不幸的是。我當初沒有啊。最後自己解決了。。。現在你要是一個最菜的,應該也可以在我的總結中把亂碼問題給K 掉。
廢話太多了。。往下看吧。
(1)顯示中文JSP頁面:<%@page ContentType="text/html;pageEncoding=gb2312" %>也可以把pageEncoding用charset=gb2312替。
這應該是在JSP頁面中最常用到的。也是網上見得最多的吧。對頁面當然有用了。不過你會不會在想。我總不能每一個頁面都改成這樣吧。。可以啊。下面的辦法。
(2)中文頁面提交返回獲取參數值時:<%request.setCharacterEncoding("gb2312");%>
用到這個的地方,好像比較多的是在Servlet中,還有比如在Struts中的FormBean的reset方法中。當然還有那些業務邏輯的程序中了。也有用。。不過還是不爽。。
(3)下面這個最實用,也是網上最統一的方法,也是一般開發項目中都會用到的吧。就是編寫一個過濾器,然後在web.xml中配置一下就OK了。相對上面的有點小複雜。不過它應該是最好的吧。至少我認爲(也許自己少見多怪說不定)
其它這個過濾器的類文件,在Tomcat的例子程序中有已經有了。你可以直接Copy它到你的工程中。更簡單吧。
不過我還是建議你自己寫出來。沒有壞處,就當是寫寫代碼了。
程序如下:
//************************************************************************//
/*
* 創建日期 2005-9-6
* TODO 字符編碼過濾器
*/
package summer.admin;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;
/**
* @author Coldrain
* TODO 字符編碼過濾器
*/
public class EncodingFilter implements Filter{
protected FilterConfig filterConfig;
private String targetEncoding = "gb2312";
/**
*初始化過濾器,和一般的Servlet一樣,它也可以獲得初始參數。
*/
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
if(config.getInitParameter("encoding") !=null){
this.targetEncoding = config.getInitParameter("encoding");
}
}
/**
*進行過濾處理,這個方法最重要,所有過濾處理的代碼都在此實現。
*/
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain)
throws IOException, ServletException {
System.out.println("使用以下方法對請求進行編碼:encoding="+targetEncoding);
HttpServletRequest request = (HttpServletRequest)srequest;
request.setCharacterEncoding(targetEncoding);
chain.doFilter(srequest,sresponse); // 把處理權發送到下一個
}
public void setFilterConfig(final FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
//銷燬過濾器
public void destroy()
{
this.filterConfig=null;
}
}
//************************************************************************//
然後在web.xml文件裏添加下列配置:
<filter>
<filter-name>encoding</filter-name>
<filter-class>summer.admin.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>
這樣的話。。你的中文問題就可以搞定了。。
(4)還有一些什麼struts的資源文件中的中文問題,下個插件就搞定了,更簡單,或者用JDK自己提供的native2ascii也可以解決,只是沒那麼好看了。方法:native2ascii messages.properties messages_zh_CN.properties
上面的差不多就是我在J2EE開發學習過程中的總結吧。。當然我想應該還有其它的方法,現在沒遇到。遇到再說吧。。試試它們吧。。