在编写添加用户功能时,添加到mysql数据库中的汉字都会变成问号,查了一下是编码的问题,后来看视频中讲了解决方案,使用filter的方式,filter的工作方式如下图所示。
如图中所示,Filter就是一个过滤的功能,每个页面和后台进行交互都要经过它,这样页面在访问后台的时候就可以通过filter过滤,然后以相应的编码同数据库交互。不过它不对http的get方法过滤,只过滤post方法。
具体实现CharsetFilter.java
.. code:: 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 org.apache.catalina.connector.Request;
public class CharsetEncodingFilter implements Filter {
private String encoding;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
System.out.println("charsetEncodingFilter....begin");
//设置字符集
arg0.setCharacterEncoding(encoding);
//继续执行
arg2.doFilter(arg0, arg1);
System.out.println("filter .....end");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.encoding = arg0.getInitParameter("encoding");
}
}
建立web.xml文件:
::
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
这样你的当你把表单提交到数据库之后就不会出现乱码了,并且关于编码的格式使用filter也可以很好的解决,这个解决方案有点像“注入”。不过filter中用到的设计模式是职责连模式,有空还需要好好学一下。
- from the5fire.com
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈