Nó là rất khó để test/debug một Servlet. Các Servlet bao gồm một lượng lớn các tương tác Client/Server, vì thế việc tạo ra các Error là hoàn toàn có thể.
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");
Tất cả message được tạo bởi cú pháp trên sẽ được log trong log file trên Web Server.
Để log tất cả thông báo debug, warning, và error bạn nên sử dụng một phương thức logging chuẩn. Chúng tôi sử dụng log4J để log tất cả các message.
Servlet API cũng cung cấp một cách đơn giản để output thông tin bởi sử dụng phương thức log() như sau:
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ContextLog extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException {
String par = request.getParameter("par1");
//Call the two ServletContext.log methods
ServletContext context = getServletContext( );
if (par == null || par.equals(""))
//log version with Throwable parameter
context.log("No message received:",
new IllegalStateException("Missing parameter"));
else
context.log("Here is the visitor's message: " + par);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
String title = "Context Log";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<h2 align=\"center\">Messages sent</h2>\n" +
"</body></html>");
} //doGet
}
ServletContext sẽ log các text message tới log file của Servlet container. Với Tomcat, những log này được tìm thấy trong <Tomcat-installation-directory>/logs
.
Các log file này cung cấp dấu hiệu về một bug mới hoặc các tần suất của các vấn đề. Với những lý do đó, nó là tốt để sử dụng hàm log() trong mệnh đề catch của exception.
Bạn có thể debug các 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 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:
Thường thì, bạn không muốn server_root/servlets trong classpath bởi vì nó vô hiệu hóa việc reload của Servlet. Tuy nhiên, sự bao gồm này là hữu ích để debug. Nó cho phép debugger của bạn thiết lập các Breakpoint trong một Servlet trước khi Custom Servlet loader trong HttpServer tải Servlet đó.
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ỳ Servlet 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 Servlet đã cho (http://localhost:8080/servlet/ServletToDebug). Bạn nên quan sát việc dừng sự thực thi tại các Breakpoint.
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.
Servlet 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 đề.
Đôi khi, khi một Servlet 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.
Sau đây là một số lời khuyên cho việc debug các Servlet:
Unpublished comment
Viết câu trả lời