servlet 的乱码问题
来源:互联网 发布:中文域名在线转码程序 编辑:程序博客网 时间:2024/05/18 04:23
web开发中经常会遇到 乱码的问题,这是再正常不过的了。 首先我们要清楚为什么会乱码?
根本原因是 字符集的不统一。 目前常用的字符集有 gb2312 , gb18030 iso-8859-1 bgk utf-8 。
你的应用服务器 默认的字符集,浏览器默认的字符集,数据库的字符集,任何一个环节的不统一,都会造成乱码。现在我们知道了原因,也就有了解决的方案。
统一我们的字符。
什么?你要这世界上只保留一种字符集?
同学,互联网是开放包容的,就让我们多干些苦力,来解决这些兼容问题。
字符集有大有小,推荐使用 utf-8 的字符集,也可以做些字符转换。
来看看我们具体在写代码的时候,如何解决 乱码问题。
1.在 html 页首
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2.可以看到我设置两个 编码。 charset : 表示响应的时候。 pageEncoding:请求的时候。(动作我们整体来分为两个时间段: 请求和响应)
在servlet 里,每一次请求和响应 的时候,都要设置字符
response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
3.数据库的字符集也要保证统一
大致的思路就是这样。 第二步 又有很多种变种。
上面的第二种方法,只是一个思路,如果在实际开发的时候,在每次请求和响应都去手动设置开发效率太低。
我们有两种方法:
1.配置servlet容器
使用的应用服务器是apache tomcat 也是servlet的容器 在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" URIEncoding="UTF-8" />
这种办法的缺点是,修改的是应用服务器,如果项目移植到其他的服务器,兼容性问题(你可以修改 servel.xml 但是如果服务器下不止一个应用呢?)
2.过滤器 filter
首先要明白过滤器: 会对 请求预处理 在响应后 动作。 我们让过滤器帮我们干完上面的苦力活。
来看看 spring 字符编码过滤器 是如何处理的。
在web.xml 配置
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
实现类 的实现方法:
@Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) { request.setCharacterEncoding(this.encoding); if (this.forceEncoding) { response.setCharacterEncoding(this.encoding); } } filterChain.doFilter(request, response); }
可以看到上面代码。使用过滤器 帮我们把重复的活干完了。
附一链接 博主有画图 理解 乱码产生的原因。
http://blog.csdn.net/xiazdong/article/details/7217022
- servlet 的乱码问题
- servlet的中文乱码问题
- Servlet乱码问题的解决
- Servlet的中文乱码问题
- 关于servlet的乱码问题
- servlet解决乱码的问题
- servlet的中文乱码问题
- jsp-servlet的乱码问题
- 解决Servlet的乱码问题
- 处理乱码的问题 servlet
- Servlet乱码问题的详解
- 关于servlet乱码的问题
- 解决Servlet的乱码问题
- jsp的servlet乱码问题
- Servlet中乱码的问题
- JSP/Servlet中文乱码问题的解决
- servlet中中文乱码问题的解决
- servlet 跳转页面乱码的问题
- Material Design (四) TabLayout的使用
- Docker基本介绍
- __toString方法
- JAVAWEB开发模式之JSP的几种开发模式、处理Cookie中文乱码
- Angular 拦截器(403、401)
- servlet 的乱码问题
- 玩转数据挖掘的第一阶段——入门篇
- python 代码自动加载的问题
- ES6和ES5特性对比
- 博客笔记总结1
- Material Design (五) CollapsingToolbarLayout的使用
- cmd批处理常用符号详解
- WebSocket连接wss链接
- Java基础(四) 数组的创建和使用