如何在Tomcat中诊断Null指针异常

时间:2011-10-13 02:30:12

标签: tomcat comet

我正在开发一个在Tomcat中运行的Java Servlet。我目前正在Windows XP机器上使用XAMPP软件包(包括Tomcat 7)进行测试(不用担心,我不打算在生产中使用它)。我这样做是因为我需要保持连接打开,所以我可以使用Comet服务器推送通信(服务器推送这是必须的要求)。

servlet正在运行,我编写了一个测试客户端,显示客户端和服务器正在完美通信。客户端使用HTTP标头从Internet上访问服务器,该标头在servlet中生成BEGIN事件,然后响应READ事件进行通信。

然后,我尝试了一个“真正的”客户端,对我们来说这是一个我无法完全控制的专有设备。很难获得有关它正在做什么的更多信息,更糟糕的是,其他程序员可能会在未来对其进行更改。充其量,我能做的就是对未来的变化提出建议。

设备使用标头发出HTTP请求,服务器处理BEGIN事件,但是当设备尝试继续对话时,连接被删除,我在catalina日志文件中得到以下内容:

2011年10月12日下午5:59:00 org.apache.coyote.http11.Http11NioProcessor进程 严重:处理请求时出错 显示java.lang.NullPointerException     在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)     在org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:317)     at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:515)     在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1544)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)     在java.lang.Thread.run(Thread.java:722)

我知道用这些有限的信息很难诊断,这正是我的问题。如何获得有关Tomcat发生了什么的更多信息?此外,我能做些什么来保护/通知/帮助设备的未来程序员犯同样的错误(无论发生什么)?显然,问题是严重的,所以我是否有机会因故意犯错误而黑客攻击我的服务器?

任何有任何建议的快速回复都将获得我永恒的感激。


只是为了更新 - 我不知道为什么,但是当我们在初始标题之后从通信中删除所有回车和换行符时问题就消失了。

感谢您的帮助。 StackOverflow规则!

1 个答案:

答案 0 :(得分:0)

输入调试日志。然后你会知道失败的地方。知道请求如何不同以及导致连接断开的原因很重要,可以通过记录服务器正在执行的操作找到。 Log4j很棒,因为它可以让你记录任何你想要的东西,然后当你不再需要它时立即关闭它。

“严重”意味着您的服务器不能仅仅掩盖错误并继续执行程序,它并不表示安全问题有多严重,可能不存在。