解决通过Servlet插入数据库的中文数据乱码

1.乱码原因

乱码的原因:
当使用表单进行Post方式提交后接收到的乱码问题。
这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式ISO8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以ISO8859-1方式进行提交,接受的jsp却以UTF-8的方式接受。导致乱码。


2.解决方法

2-1 接受参数时进行编码转换
String s = new String(request.getParameter(“something”).getBytes(“ISO-8859-1”),”UTF-8”);这样的话,每一个参数都必须这样进行转码,因为要执行对每一个参数的转码,比较麻烦,可以舍弃。

2-2 在请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding(“UTF-8”),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String s=request.getParameter(“something”);即可得到汉字参数。但是如果存在多页的话,我们需要在每一页执行
这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype=”multipart/form-data”是无效的。

2-3为了避免每页都要写request.setCharacterEncoding(“UTF-8”),建议使用过滤器对所有jsp进行编码处理。比较推荐使用过滤器,降低了代码的冗余。


3.过滤器的使用:


3-1:简介:过滤器是在服务器上运行的,且位于请求响应中间起过滤功能的程序,其工作原理就是在与过滤器相关联的Servlet或JSP前执行,一个过滤器可以与一个或者多个Servlet,JSP绑定。
工作原理:
解决通过Servlet插入数据库的中文数据乱码_第1张图片
代码分析:
filter代码:

//实现编码转换的过滤器
package filter;

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;

public class EncodingFilter implements Filter
{  
    protected String encoding = null;  
    protected FilterConfig config;  
    public void init(FilterConfig filterConfig) throws ServletException 
    {   
        this.config = filterConfig;   // 得到在 web.xml 中配置的编码   
        this.encoding = filterConfig.getInitParameter("Encoding");  }  
    public void doFilter(   ServletRequest request,   ServletResponse response,   FilterChain chain)   throws IOException, ServletException {   if (request.getCharacterEncoding() == null) {       // 得到指定的编码   
        String encode = getEncoding();   
        if (encode != null) {         //设置 request 的编码     
            request.setCharacterEncoding(encode);     
            response.setCharacterEncoding(encode);    
            }  
        }   
    chain.doFilter(request, response);  
    } 
    protected String getEncoding() 
    {   
        return encoding; 
    }  
    public void destroy() 
    { 

    } 
}

web.xml配置文件

  
    EncodingFilter
    EncodingFilter
    filter.EncodingFilter
            
 Encoding        
 utf-8       
 
  
  
    EncodingFilter
    /*
  

将这一段代码加入Servlet即可
参考链接:
https://blog.csdn.net/wsscy2004/article/details/7463861

可以关注一下自建Blog:http://47.107.118.184

你可能感兴趣的:(Java,Web前端,Servlet,JSP,JavaWeb从入门到放弃)