SetCharacterEncodingFilter很麻烦空值异常问题,大家帮忙看看

我的tomcat服务器运行后,日志信息里记录着程序一直在抛出这个异常: 2007-03-09 00:54:11 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception java.lang.NullPointerException at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:372) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:28) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:595)

根据堆栈看,好象是说我的 字符集过滤类的 doFilter 方法的空值异常 但是这个类我实在是找不的参数传递的都是 容器对象,涉及到tomcat更底层支持类,我找不出解决错误的方法,请大家帮帮忙。小弟不胜感激!

根据堆栈看,好象是说我的 字符集过滤类的 doFilter 方法的空值异常 但是这个类我不清楚,因为参数传递的都是 容器对象,涉及到tomcat更底层支持类,我找不出解决错误的方法,请大家帮帮忙。小弟不胜感激!

SetCharacterEncodingFilter.java

package filters;

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 SetCharacterEncodingFilter implements Filter{ protected String encoding = null ; protected FilterConfig filterConfig = null ; protected boolean ignore = true ;

public void destroy(){ this.encoding = null ; this.filterConfig = null ; }

public void doFilter( ServletRequest request , ServletResponse response , FilterChain chain) throws IOException , ServletException{ if (ignore || (request.getCharacterEncoding() == null)){ String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request , response); }

public void init(FilterConfig filterConfig) throws ServletException{ this.filterConfig = filterConfig ; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true ; else if (value.equalsIgnoreCase("true")) this.ignore = true ; else if (value.equalsIgnoreCase("yes")) this.ignore = true ; else this.ignore = false ; }

protected String selectEncoding( ServletRequest request){ return this.encoding; }

}

java类的第28行: chain.doFilter(request , response); 感觉应该是说chain 这个对象是空的。但不知道怎么解决。请大家给点意见。 [该贴被deancheng于2007年03月09日 10:52修改过]

不是setCha问题,它只是一个filter,因此会在错误中出现,关键错误是: processForwardConfig 这可能是struts的配置或代码中有关forward是出错,在这个节点周围检查错误。

谢谢banq 老师的指点,我把 forward 又重新核对了一下,没有发现什么异常,对于 forward 的结果页面,我都核查了,没有发现错误。现在把 struts-config.xml贴出来,您有时间的话帮忙看看,谢谢。 接下面 [该贴被deancheng于2007年03月12日 17:17修改过] [该贴被deancheng于2007年03月12日 17:18修改过]