2011-10-13 3 views
0

Tomcat에서 실행할 Java Servlet을 개발 중입니다. 현재 Windows XP 시스템에서 Tomcat 7을 포함한 XAMPP 패키지로 테스트 중입니다. (걱정하지 마세요. 프로덕션 환경에서는이 패키지를 사용하지 않을 계획입니다). Comet 서버 푸시 통신을 사용할 수 있도록 연결을 유지해야하기 때문에이 작업을 수행하고 있습니다 (서버 푸시가 반드시 필요합니다).Tomcat에서 Null 포인터 예외를 어떻게 진단 할 수 있습니까?

서블릿이 실행 중이고 클라이언트와 서버가 완벽하게 통신하고 있음을 나타내는 테스트 클라이언트를 작성했습니다. 클라이언트는 서블릿에 BEGIN 이벤트를 생성하는 HTTP 헤더를 사용하여 인터넷을 통해 서버를 공격 한 다음 READ 이벤트에 응답하여 통신합니다.

그렇다면 "진짜"클라이언트를 시도해 봅니다. 우리는 완벽하게 제어 할 수없는 독점 장치입니다. 그것이하고있는 일에 대해 많은 정보를 얻는 것은 어렵고, 더 나쁜 경우에는 다른 프로그래머가 장래에 변경을 할 수 있습니다. 기껏해야 내가 할 수있는 일은 미래의 변화에 ​​대한 권고를하는 것입니다. 이 장치는 헤더와 HTTP 요청을한다

는, 서버는 BEGIN 이벤트를 처리하지만, 장치가 대화를 계속 시도 할 때 다음, 연결이 삭제됩니다 내가 얻을 내 카탈 로그 파일에 다음

2011 년 10 월 12 일 오후 5:59:00 org.apache.coyote.http11.Http11NioProcessor process SEVERE : 요청 처리 오류가 발생했습니다. java.lang.NullPointerException org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java) : 436) at org.apache.coyote.http11.Http11NioProcessor.process (Http11NioProcessor.java:317) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.proces (AbstractProtocol.java:515) at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1544) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110) java.lang.Thread.run에서 java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603) (Thread.java:722)

에서 내가는이 제한에 진단하기가 어렵 알고 정보, 그게 바로 내 질문입니다. Tomcat에서 진행되는 작업에 대한 자세한 정보는 어떻게 얻을 수 있습니까? 또한, 미래의 프로그래머들이 동일한 실수를 저 지르지 않도록 보호/정보 제공/도움을주기 위해 할 수있는 일이 있습니까? 분명히 문제는 심각하므로 해커가 실수로 실수로 서버를 내릴 위험에 처해 있습니까?

아무런 제안없이 답변을 보내 주시면 영원한 감사를드립니다. 이유는 모르겠지만, 우리 모두 캐리지 리턴을 제거하고 라인이 초기 헤더 후 통신 피드 때 문제가 도망 갔어요 -


그냥 업데이트합니다.

도움 주셔서 감사합니다. StackOverflow 규칙!

+0

관련 버그 보고서가 2 개 이상 발견되었습니다 : https://issues.apache.org/bugzilla/show_bug.cgi?id=51120 및 https://issues.apache.org/bugzilla/show_bug.cgi?id=52009 . – BalusC

+0

감사합니다. 하루 종일 내 머리를 벽에 치고 몇 시간 동안 인터넷 검색을하다가 내가 할 수없는 것을 발견했다. 왜 내가 그 페이지를 혼자서 찾지 못했는지 모르겠다. – DaveWalley

답변

0

디버깅 로그에 넣습니다. 그러면 어디에서 실패했는지 알 수 있습니다. 요청이 어떻게 다른지, 그리고 연결이 끊어진 이유는 서버가 수행하는 모든 작업을 로깅하여 찾을 수 있습니다. Log4j는 사용자가 원하는 모든 것을 로그 할 수있게 해주 며, 더 이상 필요하지 않을 때 즉시 끌 수 있기 때문에 좋습니다.

"심각"은 서버가 오류를 광채로 내고 프로그램을 계속 진행할 수 없으며 보안 문제가 얼마나 심각하지 않은지를 나타내지 않는다는 것을 의미합니다.

+0

감사합니다. Log4j를 사용해 보겠습니다. Java는 저의 주요 공연이 아니며 전에 서블릿을 사용해 본 적이 없으므로보다 나은 로깅이 많은 도움이 될 것입니다. – DaveWalley

관련 문제