中文轉碼Filter
在Struts中經常會碰到中文轉碼的問題,最簡單的辦法就是直接寫一個ServletFilter
代碼如下:
ChineseFilter.class
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ChineseFilter extends HttpServlet implements Filter {
?private FilterConfig filterConfig;
???? //Handle the passed-in FilterConfig
???? public void init(FilterConfig filterConfig) throws ServletException {
???????? this.filterConfig = filterConfig;
???? }
???? //Process the request/response pair
???? public void doFilter(ServletRequest request, ServletResponse response,
????????????????????????? FilterChain filterChain) {
???????? try {
???????? ?
???????? ?String encoding=filterConfig.getInitParameter("encoding");//從WEB.xml配置文件中取出參數,這樣我們可以通過配置修改編碼格式.??????????????????
???????????? request.setCharacterEncoding(encoding);//設置請求的編碼格式
???????????? filterChain.doFilter(request, response);
???????? } catch (ServletException sx) {
???????????? filterConfig.getServletContext().log(sx.getMessage());
???????? } catch (IOException iox) {
???????????? filterConfig.getServletContext().log(iox.getMessage());
???????? }
???? }
???? //Clean up resources
???? public void destroy() {
???? }
??protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
???// TODO Auto-generated method stub
???super.doGet(arg0, arg1);??
??}
??protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
???// TODO Auto-generated method stub
???super.doPost(arg0, arg1);???
??}?
}
寫完過濾器剩下的就是配置Web.xml了
?<filter>
? <filter-name>ChineseFilter</filter-name>
? <filter-class>com.blog.filter.ChineseFilter</filter-class>
<init-param>
??? <param-name>encoding</param-name>
??? <param-value>GBK</param-value> 配置編碼格式,可以配置成你想要的編碼(GBK,bg-2312)
</init-param>
? </filter>
?? <filter-mapping>
??? <filter-name>ChineseFilter</filter-name>
??? <url-pattern>/*</url-pattern>
? </filter-mapping>
好了,簡單的Filter就完成了.當然也有現成的包,比如你用Struts+Spring的話,那Spring中就有現成的轉碼過濾器,我們只要在WEB.xml中配置一下就OK了.
<filter>
<filter-name>encodingFilter</filter-name>
?<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
?<init-param>
?<param-name>encoding</param-name>
. <param-value>GBK</param-value>
?</init-param>
?</filter>
<filter-mapping>
?<filter-name>encodingFilter</filter-name>
?<url-pattern>/*</url-pattern>
?</filter-mapping>