web.xML的配置代码如下:<filter> <filter-name>CharSetEncoding</filter-name> <filter-class> com.researchDeclare.charsetfilter.CharSetClass </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GB2312</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharSetEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>在加载xml的时候出现的错误2009-12-31 10:15:09 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting filter CharSetEncoding java.lang.NullPointerException at com.researchDeclare.charsetfilter.CharSetClass.init(CharSetClass.java:54) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 2009-12-31 10:15:09 org.apache.catalina.core.StandardContext start 严重: Error filterStart 2009-12-31 10:15:09 org.apache.catalina.core.StandardContext start 严重: Context [/ResearchDeclare] startup failed due to previous errors
java.lang.NullPointerException at com.researchDeclare.charsetfilter.CharSetClass.init(CharSetClass.java:54) com.researchDeclare.charsetfilter.CharSetClass类的54行init方法报空指针异常。
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class CharSetClass implements Filter
{
protected String encoding = null;
protected FilterConfig filterConfig = null; public CharSetClass()
{
super();
} public void destroy()
{
// TODO Auto-generated method stub
this.encoding = null;
this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
// TODO Auto-generated method stub
if (request.getCharacterEncoding() == null)
{
String encoding = selectEncoding(request);
if (encoding != null)
{
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
} private String selectEncoding(ServletRequest request)
{
// TODO Auto-generated method stub
return this.encoding;
} public void init(FilterConfig arg0) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
}
数据库设置成utf-8,页面使用utf-8/post,后台使用iso转gb或iso转gb(浏览器差异)。
mysql控制台写sql包含中文需要预先写上set charset gbk;
<filter-name>CharSetEncoding</filter-name>
<filter-class>
com.researchDeclare.charsetfilter.CharSetClass
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharSetEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>在加载xml的时候出现的错误2009-12-31 10:15:09 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter CharSetEncoding
java.lang.NullPointerException
at com.researchDeclare.charsetfilter.CharSetClass.init(CharSetClass.java:54)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-12-31 10:15:09 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2009-12-31 10:15:09 org.apache.catalina.core.StandardContext start
严重: Context [/ResearchDeclare] startup failed due to previous errors
at com.researchDeclare.charsetfilter.CharSetClass.init(CharSetClass.java:54)
com.researchDeclare.charsetfilter.CharSetClass类的54行init方法报空指针异常。
public void init(FilterConfig arg0) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
这里应该是this.filterConfig = arg0吧。
public void init(FilterConfig arg0) throws ServletException{
this.filterConfig = arg0;
this.encoding = filterConfig.getInitParameter("encoding");
}
private String selectEncoding(ServletRequest request)
{
// TODO Auto-generated method stub
return this.encoding;
}这个方法太不科学吧
显然是受网上影响咯。
虽然说过滤器是王道但你的数据没问题的话,就不要过滤器了。。
过滤器是最后一招嘿嘿
http://29882942.blog.163.com/blog/static/306370112008112185230535/
public class 网络蜗牛{// "gb2312"到"Unicode"的转码
public String toUnicode(String str){
char[]arChar=str.toCharArray();
int iValue=0;
String uStr="";
for(int i=0;i<arChar.length;i++){
iValue=(int)str.charAt(i);
if(iValue<=256){
// uStr+="�"+Integer.toHexString(iValue)+";";
uStr+="\\u00"+Integer.toHexString(iValue);
}else{
// uStr+="&#x"+Integer.toHexString(iValue)+";";
uStr+="\\u"+Integer.toHexString(iValue);
}
}
return uStr;
}
// "gb2312"到"ISO-8859-1"的转码
public String iso2gb(String str) {
try {
str = new String(str.getBytes("ISO-8859-1"), "gb2312");
} catch (Exception e) {
System.out.println("Encoding Error!");
}
return str;
}
//"ISO-8859-1"到"gb2312"的转码
public String gb2iso(String str) {
try {
str = new String(str.getBytes("gb2312"), "ISO-8859-1");
} catch (Exception e) {
System.out.println("Encoding Error!");
}
return str;
}
public String getChinese(String InputString) throws Exception
{
byte b[]=InputString.getBytes("ISO-8859-1");
String OutputString=new String(b);
return OutputString;
}
public static void main(String args[]){
System.out.println(new Native().toUnicode("人"));
}}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
String encoding = selectEncoding(request);
if (encoding != null)
{
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
filterChain.doFilter(request, response);
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
String encoding = selectEncoding(request);
if (encoding != null)
{
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
filterChain.doFilter(request, response);
}else{
throw new RuntimeException("encoding为空");
}
}
在mysql的命令行中更新数据中,有汉字的字段也不能直接更新,需要将编码改成 gb2312,要执行charset gb2312的命令后才可以。
那么在java代码中怎样向mysql中插入或者是更新含有汉字的字段。请解答
可靠点的方法:重新建表,url的值设置如些
jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=gb2312
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
要改成: public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}