今天在做DynaActionForm練習的時候,在表單提交時,遇到了提交中文出現亂碼的問題。雖然以前解決過類似的問題,但總是沒有記錄相關的筆記。後來在網的找了一大堆的文章看了以後,大部都是亂說一通,感覺行得通,但太麻煩了,於是找到自己以前做過的小項目中,看了一下以前設計的Filter,讓站點內所有的編碼都爲utf-8的形式輸出!於是也在自己DynaActionForm的練習中配置了一下Filter,之後,整個Project裏面的東西,都沒有出現亂碼的問題了。下面說一下具體的做法:
建立一個實現Filter接口的類。這個類需要三個方法,分別是:doFilter、init和destroy。doFilter方法包含主要的過濾代碼,init方法建立設置操作,而destroy方法進行清除。
比如我建立的是FilterChar.java
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 以 UTF-8 輸入輸出
*
* @author ZhongHuiQiang
*
*/
public class FilterChar implements Filter {
private String config;
public void destroy() {
this.config = null;
}
/**
* name="FilterChar" <br>
* init-param name="config" value="utf-8"<br>
* mapping url-pattern="/*"<br>
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req;
req = (HttpServletRequest) request;
HttpServletResponse res;
res = (HttpServletResponse) response;
req.setCharacterEncoding(config);
res.setCharacterEncoding(config);
chain.doFilter(req, res);
}
/**
* 獲得web.xml中初始化的參數
*/
public void init(FilterConfig config) throws ServletException {
this.config = config.getInitParameter("chars");
}
}
OK,FilterChar類寫完後,就要配置web.xml了!
在web.xml裏面,最主要是下面這段代碼
<filter-name>FilterChar</filter-name>
<filter-class>
com.gtxy.dynaActionForm.web.filter.FilterChar
</filter-class>
<init-param>
<param-name>chars</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterChar</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>