Penyahpepijatan JSP


Adalah sukar untuk menguji/menyahpepijat JSP atau program servlet. Program JSP dan Servlets cenderung melibatkan banyak interaksi klien/pelayan, yang berkemungkinan besar menyebabkan ralat, dan sukar untuk menghasilkan semula persekitaran ralat.

Yang berikut akan memberikan beberapa petua dan cadangan untuk membantu anda nyahpepijat program anda.


Menggunakan System.out.println()

System.out.println() boleh menandakan dengan mudah sama ada sekeping kod telah dilaksanakan. Sudah tentu, kita juga boleh mencetak pelbagai nilai. Juga:

  • Memandangkan objek Sistem menjadi objek Java teras, ia boleh digunakan di mana-mana tanpa memperkenalkan kelas tambahan. Skop penggunaan termasuk Servlets, JSP, RMI, EJB's, Beans, kelas dan aplikasi yang berdiri sendiri.

  • Berbanding dengan berhenti berjalan pada titik putus, menggunakan System.out untuk output tidak akan memberi kesan yang ketara pada proses berjalan aplikasi Ciri ini sangat berguna dalam aplikasi yang mekanisme pemasaannya sangat penting.

Sintaks untuk menggunakan System.out.println() diberikan seterusnya:

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

Ini adalah contoh mudah menggunakan 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>

Sekarang, jika anda menjalankan contoh di atas, ia akan menghasilkan keputusan berikut:

-4
-3
-2
-1
0
1
2
3
4
5

Jika anda menggunakan pelayan Tomcat, anda boleh log fail stdout.log dalam direktori log. kandungan berikut ditemui:

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

Menggunakan kaedah ini, pembolehubah dan maklumat lain boleh dikeluarkan kepada log sistem untuk menganalisis dan mengetahui punca masalah.


Gunakan JDB Logger

Rangka kerja pengelogan J2SE boleh menyediakan perkhidmatan pengelogan untuk mana-mana kelas yang dijalankan dalam JVM. Jadi kita boleh menggunakan rangka kerja ini untuk merekod sebarang maklumat.

Mari kita tulis semula kod di atas untuk menggunakan API logger dalam 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>

Hasil larian adalah serupa dengan yang sebelumnya, namun, ia boleh mendapatkan output maklumat tambahan kepada stdout.log masuk fail itu. Di sini kami menggunakan kaedah maklumat dalam logger. Di bawah ini kami memberikan petikan daripada fail 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

Mesej boleh dihantar dengan pelbagai keutamaan, dengan menggunakan sever(), warning(), info(), config(), fine() ,finer (), kaedah terbaik (). Kaedah finest() digunakan untuk merekodkan maklumat terbaik, dan kaedah sever() digunakan untuk merekodkan maklumat yang paling serius.

Gunakan rangka kerja Log4J untuk log mesej dalam fail yang berbeza, yang dikelaskan berdasarkan keterukan dan kepentingan.


Alat nyahpepijat

NetBeans ialah struktur pokok dan persekitaran pembangunan komprehensif Java sumber terbuka Ia menyokong pembangunan aplikasi Java bebas dan aplikasi rangkaian, dan juga menyokong penyahpepijatan JSP.

NetBeans menyokong fungsi penyahpepijatan asas berikut:

  • Titik putus

  • Penjejakan satu langkah

  • Mata Pemerhatian

Untuk maklumat terperinci, sila lihat manual NetBeans.


Menggunakan Penyahpepijat JDB

anda boleh menggunakan arahan jdb dalam JSP dan servlet untuk menyahpepijat, sama seperti menyahpepijat aplikasi biasa.

Biasanya, kami menyahpepijat objek sun.servlet.http.HttpServer secara langsung untuk melihat cara HttpServer melaksanakan JSP/Servlets sebagai tindak balas kepada permintaan HTTP. Ini sangat serupa dengan penyahpepijatan applet. Perbezaannya ialah program applet sebenarnya nyahpepijat ialah sun.applet.AppletViewer.

Kebanyakan penyahpepijat boleh mengabaikan beberapa butiran secara automatik apabila menyahpepijat applet kerana mereka tahu cara menyahpepijat applet. Jika anda ingin memindahkan objek penyahpepijatan ke JSP, anda perlu melakukan dua perkara berikut:

  • Tetapkan laluan kelas penyahpepijat supaya ia boleh mencari sun.servlet.http.Http-Server dan kelas yang berkaitan.

  • Tetapkan laluan kelas penyahpepijat supaya ia boleh mencari fail JSP anda dan kelas yang berkaitan.

Selepas menetapkan laluan kelas, mula menyahpepijat sun.servlet.http.Http-Server. Anda boleh menetapkan titik putus di mana-mana dalam fail JSP yang anda suka, kemudian gunakan penyemak imbas untuk menghantar permintaan kepada pelayan dan anda akan melihat program berhenti pada titik putus.


Gunakan ulasan

Komen dalam atur cara boleh membantu dalam banyak cara untuk nyahpepijat atur cara. Komen boleh digunakan dalam banyak aspek menyahpepijat atur cara.

JSP menggunakan anotasi Java. Jika pepijat hilang, lihat lebih dekat pada kod yang baru anda ulas dan biasanya anda boleh mengetahui sebabnya.


Modul Pengepala Pelanggan dan Pelayan

Kadangkala ia juga berguna untuk melihat permintaan dan respons HTTP mentah apabila JSP tidak berkelakuan seperti yang dimaksudkan. Jika anda sudah biasa dengan struktur HTTP, anda boleh terus memerhati permintaan dan respons dan melihat apa yang berlaku dengan modul pengepala ini.


Kemahiran penyahpepijatan penting

Di sini kami mendedahkan dua lagi petua untuk menyahpepijat JSP:

  • Gunakan penyemak imbas untuk memaparkan kandungan halaman asal untuk membezakan sama ada terdapat masalah format. Pilihan ini biasanya di bawah menu Lihat.

  • Pastikan penyemak imbas tidak menangkap output permintaan sebelumnya apabila memaksa muat semula halaman. Jika anda menggunakan pelayar Netscape Navigator, gunakan Shift-Reload jika anda menggunakan pelayar IE, gunakan Shift-Refresh.