1. Trang chủ
  2. » Thể loại khác

Debug trong Servlet | 27 bài hướng dẫn Servlet miễn phí hay nhất debug trong servlet

4 98 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 179,79 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Sử dụn

Trang 1

Debug trong Servlet

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ể

Sau đây là một số gợi ý có thể giúp bạn trong việc debug cá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:

• Vì đối tượng System là một phần của các đối tượng Core Java, nó có thể được sử

dụng bất cứ đâu mà không cần cài đặt bất kỳ lớp bổ sung nào Nó bao gồm Servlet,

JSP, RMI, EJB's, ordinary Beans, các class, và các standalone application

• So sánh với việc dừng tại các Breakpoint, việc write tới System.out không gây trở

ngại nhiều tới luồng thực thi thông thường của ứng dụng, mà làm cho nó đáng quý

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 các message

Để 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

Trang 2

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>"); }

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

Sử dụng JDB Debugger

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:

• Thiết lập Classpath của debugger của bạn để mà nó có thể tìm

sun.servlet.http.Http-Server và các class liên kết

• Thiết lập Classpath của debugger để mà nó cũng có thể tìm các Servlet của bạn và

hỗ trợ các class, đặc trưng là server_root/servlets and server_root/classes

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 đó

Trang 3

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

Sử dụng Comment

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 đề

Các trường Header trên Client và Server

Đô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

Lời khuyên tốt cho Debug Servlet

Sau đây là một số lời khuyên cho việc debug các Servlet:

• Nhận thấy rằng server_root/classes không reload và điều tương tự có thể với server_root/servlets

• Yêu cầu các trình duyệt hiển thị nội dung thô của trang nó đang hiển thị Điều này giúp nhận diện các vấn đề về định dạng Nó thường là một option ở dưới View menu

• Đảm bảo rằng trình duyệt không cache kết quả của yêu cầu trước đó bằng việc bắt buộc Full Reload trang Với Netscape Navigator, sử dụng Shift-Reload; với Internet Explorer, sử dụng Shift-Refresh

Xác minh phương thức init() của Servlet nhận một tham số là ServletConfig và gọi phương thức super.init(config) theo đúng cách

Ngày đăng: 02/12/2017, 22:24

TỪ KHÓA LIÊN QUAN