我在生产系统上运行 Weblogic 8.1 SP6 服务器 (JDK 1.4.2)。在服务器关闭之前,我们有时会在生产服务器上遇到以下异常。我完全不知道如何解决这个问题。
java.lang.NullPointerException
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:205)
at com.sampleapp.arch.struts.InitializingRequestProcessor.getProcessorForModule(InitializingRequestProcessor.java:135)
at com.sampleapp.arch.struts.InitializingRequestProcessor.initializeFormBean(InitializingRequestProcessor.java:29)
at com.sampleapp.arch.struts.ResettingDynaValidatorForm.reset(ResettingDynaValidatorForm.java:46)
at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:484)
at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:457)
at org.apache.strutsel.taglib.html.ELFormTag.doStartTag(ELFormTag.java:267)
at jsp_servlet._util.__settingsdisplay_f._jspService(__settingsdisplay_f.java:355)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
InitializingRequestProcessor 的代码片段如下,在返回语句中抛出 NullPointerException。
请询问您是否需要任何其他信息。提前致谢。
private static RequestProcessor getProcessorForModule(ActionServlet servlet, ModuleConfig config) {
String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix();
return (RequestProcessor) servlet.getServletContext().getAttribute(key);
}
更新
根据 Alex 的响应,事实证明 ResettingDynaValidatorForm(DynaValidatorForm 的自定义实现)正在从返回 NULL 值的 struts 的 ActionForm 类中获取 super ActionServlet。
为什么服务器只在运行几天后才开始为 ActionServlet 返回 NULL 值?
最佳答案
这看起来很像 Struts 中的错误。此 NPE 是典型的 ServletConfig
不存在,这意味着有问题的 servlet 没有覆盖 init(ServletConfig config)
方法得当。根据链接的 javadoc,实现者必须在其中显式调用 super.init(config)
。如果你不这样做,你就会得到这种 NPE。
尝试升级 Struts。
关于java - javax.servlet.GenericServlet.getServletContext 的 NullPointerException(GenericServlet.java :205),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176845/