全局的过滤器:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.mmis.publicClass.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JSP默认设置了为GB18030:
<% page language=”java” import=”java.util.*” pageEncoding=”GB18030>
数据库创建的编码为GBK:my.ini中为:default-character-set=gbk
Action中的为:<constant name="struts.locale" value="zh_CN"></constant>
<constant name="struts.i18n.encoding" value="GB18030"></constant>
Tomcat 中server.xml文件中URLEncoding为:GBK
我尝试在控制台中往数据库输入中文,没错,在JSP中取得时候显示的也没错,就是在JSP表单中输入中文然后保存的时候,进入数据库就变成乱码了。上面能牵扯到编码的地方都列出来了。
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.mmis.publicClass.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JSP默认设置了为GB18030:
<% page language=”java” import=”java.util.*” pageEncoding=”GB18030>
数据库创建的编码为GBK:my.ini中为:default-character-set=gbk
Action中的为:<constant name="struts.locale" value="zh_CN"></constant>
<constant name="struts.i18n.encoding" value="GB18030"></constant>
Tomcat 中server.xml文件中URLEncoding为:GBK
我尝试在控制台中往数据库输入中文,没错,在JSP中取得时候显示的也没错,就是在JSP表单中输入中文然后保存的时候,进入数据库就变成乱码了。上面能牵扯到编码的地方都列出来了。
是过滤器的没有生效的原因吗?刚开始用的是spring自带的那个,没用,后来自己写了个,是不是根本就没有过滤到action的请求
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> </filter-mapping> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.mmis.publicClass.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> </filter-mapping> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.mmis.publicClass.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
把编码过滤器 放到最上面
package com.zndt.znfw.util;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.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
/* 继承struts的核心过滤器 */
public class CharacterEncodingFilter extends StrutsPrepareAndExecuteFilter{
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding("UTF-8");/* 1 */
arg1.setCharacterEncoding("UTF-8");/* 2 */
super.doFilter(arg0, arg1,arg2);
}
}web.xml
<filter>
<filter-name>struts2</filter-name> <filter-class>com.zndt.znfw.util.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
tomcat
URI问题:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" URIEncoding=”UTF-8”/>取:
里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。(指的是后台代码request.setCharcterEncoding(“utf-8”))
拿:
如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。(指的是浏览器拿到页面之后按照utf-8来解码)jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">数据库端的编码方式:
也设置为UTF-8
example:
mysq url 驱动:
jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding= UTF-8。
2: web.xml文件的过虑器是否正确, 并且要放在文件内容的前面;
3: 在action接收是在转下编码, iso-8859-1;注: 各处编码要统一;因为数据在java中就出错了, 所以数据库暂时不需要检查。 只要存之前没有乱码的话, 再者数据库的编码是统一的话就不会出错了。