JSP 디버깅
JSP나 서블릿 프로그램을 테스트/디버깅하는 것은 항상 어렵습니다. JSP 및 Servlet 프로그램은 클라이언트/서버 상호 작용이 많이 포함되는 경향이 있어 오류가 발생할 가능성이 매우 높으며 오류 환경을 재현하기가 어렵습니다.
다음은 프로그램 디버깅에 도움이 되는 몇 가지 팁과 제안 사항입니다.
System.out.println()
System.out.println()을 사용하면 코드 조각이 실행되었는지 여부를 쉽게 표시할 수 있습니다. 물론 다양한 값을 출력할 수도 있습니다. 또한:
System 객체는 핵심 Java 객체가 되었기 때문에 별도의 클래스 도입 없이 어디서든지 사용할 수 있습니다. 사용 범위에는 서블릿, JSP, RMI, EJB, Bean, 클래스 및 독립형 애플리케이션이 포함됩니다.
중단점에서 실행을 중지하는 것과 비교할 때 System.out을 사용하여 출력하는 것은 애플리케이션의 실행 프로세스에 큰 영향을 미치지 않습니다. 이 기능은 타이밍 메커니즘이 매우 중요한 애플리케이션에 매우 유용합니다.
System.out.println() 사용 구문은 다음과 같습니다.
System.out.println("Debugging message");
다음은 System.out.print() 사용에 대한 간단한 예입니다.
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head><title>System.out.println</title></head> <body> <c:forEach var="counter" begin="1" end="10" step="1" > <c:out value="${counter-5}"/></br> <% System.out.println( "counter= " + pageContext.findAttribute("counter") ); %> </c:forEach> </body> </html>
이제 위 예제를 실행하면 다음과 같은 결과가 나타납니다.
-4 -3 -2 -1 0 1 2 3 4 5
Tomcat 서버를 사용하는 경우 로그 디렉터리에 stdout.log 파일을 기록할 수 있습니다. 다음 내용이 발견되었습니다:
counter=1 counter=2 counter=3 counter=4 counter=5 counter=6 counter=7 counter=8 counter=9 counter=10
이 방법을 사용하면 변수 및 기타 정보를 시스템 로그에 출력하여 문제의 근본 원인을 분석하고 찾을 수 있습니다.
JDB 로거 사용
J2SE 로깅 프레임워크는 JVM에서 실행되는 모든 클래스에 로깅 서비스를 제공할 수 있습니다. 따라서 우리는 이 프레임워크를 사용하여 모든 정보를 기록할 수 있습니다.
JDK에서 로거 API를 사용하도록 위 코드를 다시 작성해 보겠습니다.
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page import="java.util.logging.Logger" %> <html> <head><title>Logger.info</title></head> <body> <% Logger logger=Logger.getLogger(this.getClass().getName());%> <c:forEach var="counter" begin="1" end="10" step="1" > <c:set var="myCount" value="${counter-5}" /> <c:out value="${myCount}"/></br> <% String message = "counter=" + pageContext.findAttribute("counter") + " myCount=" + pageContext.findAttribute("myCount"); logger.info( message ); %> </c:forEach> </body> </html>
실행 결과는 이전 코드와 유사하지만 stdout.log에 대한 추가 정보 출력을 얻을 수 있습니다. 파일. 여기서는 로거의 info 메소드를 사용합니다. 아래에서는 stdout.log 파일의 스냅샷을 제공합니다.
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=1 myCount=-4 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=2 myCount=-3 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=3 myCount=-2 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=4 myCount=-1 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=5 myCount=0 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=6 myCount=1 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=7 myCount=2 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=8 myCount=3 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=9 myCount=4 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=10 myCount=5
sever(), warning(), info(), config(), Fine() ,finer를 사용하여 다양한 우선순위로 메시지를 보낼 수 있습니다. (),최상의() 메소드. 가장 좋은 정보를 기록하려면 Fine() 메소드를 사용하고, 가장 심각한 정보를 기록하려면 sever() 메소드를 사용합니다.
Log4J 프레임워크를 사용하여 심각도와 중요도에 따라 분류된 다양한 파일에 메시지를 기록합니다.
디버깅 도구
NetBeans는 트리 구조로 독립된 Java 애플리케이션 및 네트워크 애플리케이션 개발을 지원하고 JSP 디버깅도 지원하는 오픈 소스 Java 종합 개발 환경입니다.
NetBeans는 다음과 같은 기본 디버깅 기능을 지원합니다.
중단점
단일 단계 추적
관찰 포인트
자세한 내용은 NetBeans 매뉴얼을 참조하세요.
JDB 디버거
를 사용하면 일반 애플리케이션을 디버깅하는 것처럼 JSP 및 서블릿에서 jdb 명령을 사용하여 디버깅할 수 있습니다.
일반적으로 우리는 HttpServer가 HTTP 요청에 대한 응답으로 JSP/Servlet을 실행하는 방법을 확인하기 위해 sun.servlet.http.HttpServer 개체를 직접 디버깅합니다. 이는 애플릿 디버깅과 매우 유사합니다. 차이점은 애플릿 프로그램이 실제로 디버깅하는 것은 sun.applet.AppletViewer라는 것입니다.
대부분의 디버거는 애플릿 디버깅 방법을 알고 있기 때문에 애플릿을 디버깅할 때 일부 세부 사항을 자동으로 무시할 수 있습니다. 디버깅 객체를 JSP로 전송하려면 다음 두 가지를 수행해야 합니다.
sun.servlet.http.Http-Server 및 관련 클래스를 찾을 수 있도록 디버거의 클래스 경로를 설정합니다.
JSP 파일 및 관련 클래스를 찾을 수 있도록 디버거의 클래스 경로를 설정하십시오.
클래스패스 설정 후 sun.servlet.http.Http-Server 디버깅을 시작합니다. JSP 파일의 원하는 위치에 중단점을 설정한 다음 브라우저를 사용하여 서버에 요청을 보내면 프로그램이 중단점에서 중지되는 것을 볼 수 있습니다.
주석 사용
프로그램의 주석은 프로그램 디버깅에 여러 가지 방법으로 도움이 될 수 있습니다. 주석은 프로그램 디버깅의 다양한 측면에서 사용될 수 있습니다.
JSP는 Java 주석을 사용합니다. 버그가 사라지면 방금 주석 처리한 코드를 자세히 살펴보면 대개 그 이유를 알 수 있습니다.
클라이언트 및 서버 헤더 모듈
때로는 JSP가 의도한 대로 작동하지 않을 때 원시 HTTP 요청 및 응답을 보는 것도 유용합니다. HTTP의 구조에 익숙하다면 요청과 응답을 직접 관찰하고 이러한 헤더 모듈에서 무슨 일이 일어나는지 확인할 수 있습니다.
중요한 디버깅 기술
여기서 JSP 디버깅을 위한 두 가지 추가 팁을 공개합니다.
형식 문제가 있는지 구별하기 위해 브라우저를 사용하여 원본 페이지 콘텐츠를 표시합니다. 이 옵션은 일반적으로 보기 메뉴 아래에 있습니다.
페이지를 강제로 다시 로드할 때 브라우저가 이전 요청 출력을 캡처하지 않는지 확인하세요. Netscape Navigator 브라우저를 사용하는 경우 Shift-Reload를 사용하고, IE 브라우저를 사용하는 경우 Shift-Refresh를 사용하십시오.