JSP - Gỡ lỗi

Trong chương này, chúng ta sẽ thảo luận về Gỡ lỗi một JSP. Việc kiểm tra / gỡ lỗi JSP và các servlet luôn khó khăn. JSP và Servlet có xu hướng liên quan đến một lượng lớn tương tác giữa máy khách / máy chủ, khiến cho các lỗi có thể xảy ra nhưng khó tái tạo.

Sau đây là một số gợi ý và gợi ý có thể giúp bạn gỡ lỗi.

Sử dụng System.out.println ()

System.out.println()dễ sử dụng như một điểm đánh dấu để kiểm tra xem một đoạn mã nhất định có đang được thực thi hay không. Chúng tôi cũng có thể in ra các giá trị biến. Hãy xem xét các điểm bổ sung sau:

  • Vì đối tượng Hệ thống là một phần của các đối tượng Java cốt lõi, nó có thể được sử dụng ở mọi nơi mà không cần cài đặt thêm bất kỳ lớp bổ sung nào. Điêu nay bao gômServlets, JSP, RMI, EJB's, ordinary Beansclassesstandalone applications.

  • So với việc dừng lại ở các điểm ngắt, viết thư cho System.out không can thiệp nhiều vào quy trình thực thi bình thường của ứng dụng, điều này làm cho nó rất có giá trị khi iming là quan trọng.

Sau đây là cú pháp để sử dụng System.out.println() -

System.out.println("Debugging message");

Ví dụ sau đây cho thấy cách sử dụng 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>

Truy cập JSP trên, trình duyệt sẽ hiển thị 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ẽ thấy những dòng này được nối vào cuối stdout.log trong thư mục nhật ký.

counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
counter = 10

Bằng cách này, bạn có thể đưa các biến và thông tin khác vào nhật ký hệ thống có thể được phân tích để tìm ra nguyên nhân gốc rễ của vấn đề hoặc vì nhiều lý do khác.

Sử dụng Trình ghi nhật ký JDB

Các J2SEkhung ghi nhật ký được thiết kế để cung cấp dịch vụ ghi nhật ký cho bất kỳ lớp nào đang chạy trong JVM. Chúng tôi có thể sử dụng khuôn khổ này để ghi lại bất kỳ thông tin nào.

Hãy để chúng tôi viết lại ví dụ trên bằng API trình ghi nhật ký JDK -

<%@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>

Đoạn mã trên sẽ tạo ra kết quả tương tự trên trình duyệt và trong stdout.log, nhưng bạn sẽ có thêm thông tin trong stdout.log. Chúng tôi sẽ sử dụnginfophương pháp của trình ghi nhật ký vì và ghi lại thông báo chỉ cho mục đích thông tin. Sau đây là ảnh chụp nhanh của tệp stdout.log -

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

Tin nhắn có thể được gửi ở nhiều cấp độ khác nhau bằng cách sử dụng các chức năng tiện lợi severe(), warning(), info(), config(), fine(), finer(),finest(). Ở đây phương thức finest () có thể được sử dụng để ghi lại thông tin tốt nhất và phương thức nghiêm túc () có thể được sử dụng để ghi lại thông tin nghiêm trọng.

Bạn có thể sử dụng Log4J Framework để ghi nhật ký thông báo trong các tệp khác nhau dựa trên mức độ nghiêm trọng và tầm quan trọng của chúng.

Công cụ gỡ lỗi

NetBeans là Môi trường phát triển tích hợp Java mã nguồn mở miễn phí hỗ trợ phát triển các ứng dụng Java và ứng dụng Web độc lập hỗ trợ các thông số kỹ thuật của JSP và servlet, đồng thời bao gồm trình gỡ lỗi JSP.

NetBeans hỗ trợ các chức năng gỡ lỗi cơ bản sau:

  • Breakpoints
  • Bước qua mã
  • Watchpoints

Bạn có thể tham khảo NetBeans documentation để hiểu các chức năng gỡ lỗi ở trên.

Sử dụng JDB Debugger

Bạn có thể gỡ lỗi JSP và các servlet với cùng một jdb các lệnh bạn sử dụng để gỡ lỗi một applet hoặc một ứng dụng.

Để gỡ lỗi JSP hoặc servlet, bạn có thể gỡ lỗi sun.servlet.http.HttpServer, sau đó quan sát khi HttpServer thực thi JSP / servlet để phản hồi các yêu cầu HTTP mà chúng tôi thực hiện từ trình duyệt. Điều này rất giống với cách gỡ lỗi các applet. Sự khác biệt là với các applet, chương trình thực tế đang được gỡ lỗi làsun.applet.AppletViewer.

Hầu hết các trình gỡ lỗi đều ẩn chi tiết này bằng cách tự động biết cách gỡ lỗi các applet. Cho đến khi họ làm tương tự cho JSP, bạn phải trợ giúp trình gỡ lỗi của mình bằng cách xem xét những điều sau:

  • Đặt classpath của trình gỡ lỗi của bạn. Điều này giúp bạn tìm thấysun.servlet.http.Http-Server và các lớp liên quan.

  • Đặt classpath của trình gỡ lỗi của bạn. Điều này giúp bạn tìm thấy JSP và các lớp hỗ trợ, thường làROOT\WEB-INF\classes.

Khi bạn đã đặt classpath thích hợp, hãy bắt đầu gỡ lỗi sun.servlet.http.HttpServer. Bạn có thể đặt các điểm ngắt trong bất kỳ JSP nào mà bạn muốn gỡ lỗi, sau đó sử dụng trình duyệt web để đưa ra yêu cầu tới HttpServer cho JSP đã cho(http://localhost:8080/JSPToDebug). Việc thực thi ở đây dừng lại ở các điểm ngắt.

Sử dụng Nhận xét

Nhận xét trong mã của bạn có thể giúp quá trình gỡ lỗi theo nhiều cách khác nhau. Nhận xét có thể được sử dụng theo nhiều cách khác trong quá trình gỡ lỗi.

JSP sử dụng các nhận xét Java và single line (// ...)multiple line (/* ... */)nhận xét có thể được sử dụng để tạm thời xóa các phần trong mã Java của bạn. Nếu lỗi biến mất, hãy xem kỹ đoạn mã bạn vừa nhận xét và tìm ra vấn đề.

Tiêu đề Máy khách và Máy chủ

Đôi khi JSP không hoạt động như mong đợi, sẽ hữu ích khi xem xét yêu cầu và phản hồi HTTP thô. Nếu bạn đã quen với cấu trúc của HTTP, bạn có thể đọc yêu cầu và phản hồi và xem chính xác điều gì đang xảy ra với những tiêu đề đó.

Mẹo gỡ lỗi quan trọng

Dưới đây là danh sách một số mẹo gỡ lỗi khác về gỡ lỗi JSP -

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

  • Đảm bảo rằng trình duyệt không lưu vào bộ nhớ đệm đầu ra của yêu cầu trước đó bằng cách buộc tải lại toàn bộ trang. VớiNetscape Navigator, sử dụng Shift-Reload; vớiInternet Explorer sử dụng Shift-Refresh.