Servlet解决请求和响应中文乱码问题

1.前端请求数据中转流程
请求
HTML---------------->Tomcat---------------->Servlet
UTF-8                  ISO-8859-1                  UTF-8  
    
响应
HTML<----------------Tomcat<----------------Servlet
UTF-8                  ISO-8859-1                  UTF-8  
 
2.请求导致乱码原因
Get请求
请求乱码是由于HTML设置了浏览器在传递参数时,采用的是UTF-8编码格式,但是在Tomcat中解码采用的是ISO-8859-1解码方式,因此会导致乱码。
Post请求
因为post请求是以二进制流的形式发送到服务器,服务器收到后默认的是通过ISO-8859-1进行编码,post请求
解决乱码,只需要在获取请求参数之前调用设置字符集方法即可。
 
 
3.解决请求乱码方式
get请求请求乱码解决方式
tomacat GET POST 请求处理方式是不同的,GET 请求的编码问题,要改 tomcat server.xml 配置文件,如下:
<Connector connectionTimeout="20000" port="8080"
protocol="HTTP/1.1" redirectPort="8443"/>
改为:
<Connector connectionTimeout="20000" port="8080"
protocol="HTTP/1.1" redirectPort="8443"
useBodyEncodingForURI="true"/>
如果遇到 ajax 请求仍然乱码,请把:
useBodyEncodingForURI="true"改为 URIEncoding="UTF-8"
post请求解决乱码解决方式
<!--解决post请求乱码问题-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--设置过滤器属性-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--开启过滤器-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
2.响应乱码解决办法
编写一个过滤器,指定tomcat以何种编码方式编码,告诉浏览器以何种解码方式解码
public class CharacterFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletResponse.setContentType ( "text/html;charset=utf-8" );
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42210904/article/details/109703423