Debug trong JSP
Công việc test/debug một JSP vfa Servlet luôn luôn là khó khăn và phức tạp. JSP và Servlet bao gồm một lượng tương tác Server-Client lớn, do đó, việc tạo ra lỗi là không thể không tránh khỏi. Dưới đây là một số gợi ý có thể sẽ giúp ích cho bạn trong việc debug chương trình JSP hoặc Servlet. ...
Công việc test/debug một JSP vfa Servlet luôn luôn là khó khăn và phức tạp. JSP và Servlet bao gồm một lượng tương tác Server-Client lớn, do đó, việc tạo ra lỗi là không thể không tránh khỏi.
Dưới đây là một số gợi ý có thể sẽ giúp ích cho bạn trong việc debug chương trình JSP hoặc Servlet.
Phương thức System.out.printIn()
Phương thức System.out.printIn() là dễ để sử dụng như là một Marker để kiểm tra có hay không một phần nào đó của code đang được thực thi hoặc không. Chúng ta cũng có thể in các giá trị của biến. Ngoài ra:
Sau đây là cú pháp của System.out.printIn():
System.out.println("Debugging message");
Dưới đây là ví dụ đơn giản sử dụng phương thức System.out.printIn():
<%@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="-5"/></br> <% System.out.println( "counter= " + pageContext.findAttribute("counter") ); %> </c:forEach> </body> </html>
Bây giờ nếu bạn truy cập JSP trên, nó sẽ cho kết quả sau:
-4 -3 -2 -1 0 1 2 3 4 5
Nếu bạn đang sử dụng Tomcat, bạn cũng sẽ tìm thấy các dòng này được phụ thêm tới phần cuối của stdout.log trong thư mục logs.
counter=1 counter=2 counter=3 counter=4 counter=5 counter=6 counter=7 counter=8 counter=9 counter=10
Với cách này, bạn có thể in các biến và thông tin khác vào trong system log, mà có thể được phân tích để tìm nguyên nhân chính của vấn đề hoặc cho các nguyên do khác.
Sử dụng JDB Logger
J2SE Logging Framework được thiết kế để cung cấp các dịch vụ log cho bất kỳ class nào đang chạy trong JVM. Vì thế, chúng ta có thể sử dụng Framework này để log bất kỳ thông tin nào.
Chúng ta viết lại ví dụ trên, sử dụng JDK logger 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="-5" /> <c:out value=""/></br> <% String message = "counter=" + pageContext.findAttribute("counter") + " myCount=" + pageContext.findAttribute("myCount"); logger.info( message ); %> </c:forEach> </body> </html>
Code này sẽ cho kết quả giống như trên tại trình duyệt và trong stdout.log, nhưng bạn sẽ có thông tin bổ sung trong stdout.log. Tại đây, chúng ta đang sử dụng phương thức info của Logger, bởi vì chúng ta đang log các thông báo chỉ cho mục đích thông tin. Dưới đây là snapshot (ảnh chụp màn hình) của stdout.log file:
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=1 myCount=-4 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=2 myCount=-3 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=3 myCount=-2 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=4 myCount=-1 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=5 myCount=0 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=6 myCount=1 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=7 myCount=2 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=8 myCount=3 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=9 myCount=4 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=10 myCount=5
Các message có thể được gửi tại các level khác nhau bởi sử dụng các hàm như: severe(), warning(), info(), config(), fine(), finer(), và finest(). Tại đây, phương thức finest() có thể được sử dụng để log thông tin finest và phương thức severe() để log thông tin severe.
Bạn có thể sử dụng Log4J Framework để log các thông báo trong các file khác nhau dựa trên các mức độ và tính quan trọng.
Công cụ Debug trong JSP
NetBeans là một môi trường lập trình miễn phí và mã nguồn mở được tích hợp với Java. Môi trường, mà hỗ trợ phát triển các Java application và Web application độc lập, hỗ trợ JSP và Servlet và cũng bao gồm các JSP Debugger.
NetBeans hỗ trợ các tính năng debug cơ bản sau:
Bạn có thể tham khảo NetBeans Documentation để hiểu chi tiết các tính năng debug trên.
Sử dụng JDB Debugger
Bạn có thể debug các chương trình JSP và Servlet với các lệnh jdb tương tự như khi bạn sử dụng để debug một applet hoặc một application.
Để debug một JSP hoặc Servlet, chúng ta có thể debug sun.servlet.http.HttpServer, sau đó quan sát khi HttpServer thực thi các Servlet này trong phản hồi tới các HTTP Request chúng ta tạo từ một trình duyệt. Nó tương tự như cách các applet được debug. Điểm khác nhau là với applet, chương trình thực sự được debug là sun.applet.AppletViewer.
Hầu hết debugger ẩn chi tiết này bởi việc tự động biết cách để debug các applet. Tới khi chúng thực hiện điều tương tự với các Servlet, bạn phải giúp debugger của mình bởi thực hiện các điều sau:
Khi bạn đã thiết lập classpath thích hợp, bắt đầu việc debug sun.servlet.http.HttpServer. Bạn có thể thiết lập các Breakpoint trong bất kỳ JSP nào bạn quan tâm, sau đó sử dụng một trình duyệt web để tạo một yêu cầu tới HttpServer cho JSP đã cho (http://localhost:8080/JSPToDebug). Bạn nên quan sát việc dừng sự thực thi tại các Breakpoint.
Sử dụng Comment trong JSP
Các Comment trong code của bạn có thể giúp tiến trình debug theo nhiều cách. Các comment có thể được sử dụng theo nhiều cách trong tiến trình debug.
JSP sử dụng Java comment và các comment đơn dòng (// …) và đa dòng (/* … */) có thể được sử dụng để tạm thời gỡ bỏ các phần của Java code. Nếu bug biến mất, quan sát cẩn thận code mà bạn đã comment và tìm ra vấn đề.
Các trường Header trên Client và Server
Đôi khi, khi một JSP không vận hành như mong đợi, nó là hữu ích khi nhìn vào HTTP Request và HTTP Response thô. Nếu bạn chưa làm quen với cấu trúc của HTTP, bạn có thể đọc Request và Response và xem chính xác những gì đang diễn ra với các Header này.
Lời khuyên tốt cho Debug trong JSP
Sau đây là một số lời khuyên cho việc debug chương trình JSP: