English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ت调试 JSP

اختبار/تصحيح برنامج JSP أو servlet دائمًا ما يكون صعبًا. يبدو أن برامج JSP وServlets تتجنب بشكل كبير التفاعل بين العميل والخادم، مما قد يؤدي إلى أخطاء وتكون من الصعب إعادة إنتاج البيئة التي تحدث فيها الأخطاء.

سيتم تقديم بعض النصائح والتقنيات التي ستساعدك في تصحيح البرامج.

استخدام System.out.println()

System.out.println() يمكن استخدامه بسهولة لوضع علامة على ما إذا كان قطعة من الكود تم تنفيذها. بالطبع، يمكننا أيضًا طباعة أنواع مختلفة من القيم. بالإضافة إلى ذلك:

  • منذ أن أصبح System جزءًا من نواة Java، يمكن استخدامه في أي مكان دون الحاجة إلى إدخال أي فئات إضافية. نطاق الاستخدام يشمل Servlets،JSP،RMI،EJB's،Beans،فئات وبرامج مستقلة.

  • مقارنة بوقف التشغيل عند النقطة الثابتة، لن يؤثر إخراج System.out على سير تشغيل التطبيق بشكل كبير، مما يجعله مفيدًا جدًا في التطبيقات التي تعتمد بشكل كبير على آلية التشغيل المسبق.

سيتم تقديم بنية جملة System.out.println() فيما يلي:

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

هذا مثال بسيط يستخدم 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>

الآن، إذا تم تشغيل المثال أعلاه، سيكون النتيجة كالتالي:

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

إذا كنت تستخدم خادم Tomcat، يمكنك العثور على المحتويات التالية في ملف stdout.log الموجود في مجلد logs:

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

باستخدام هذا الأسلوب، يمكننا إخراج المتغيرات وأي معلومات أخرى إلى سجلات النظام، مما يساعد في تحليل الأسباب الجذرية للعيوب.

استخدام Logger JDB

مكتبة تسجيل J2SE تقدم خدمات تسجيل لكل فئة تعمل في JVM. لذا يمكننا استخدام هذه المساحة لتسجيل أي معلومات.

دعونا نعيد كتابة هذا الكود باستخدام API logger في 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>

نتائج تشغيله مشابهة للسابق، ولكن يمكنه الحصول على معلومات إضافية يتم إخراجها إلى ملف stdout.log. في هذا السياق، استخدمنا طريقة info في logger. سنقدم لكم صورة سريعة من ملف 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

يمكن إرسال الرسائل باستخدام أرقام الأولوية المختلفة، من خلال استخدام الأساليب sever()، warning()، info()، config()، fine()، finer()، finest(). تستخدم أسلوب finest() لتسجيل أفضل المعلومات، بينما تستخدم sever() لتسجيل أكثر المعلومات خطورة.

يمكن استخدام إطار Log4J لسجل الرسائل في ملفات مختلفة، وتقسيم هذه الرسائل بناءً على خطورتها واهميتها.

أدوات التتبع

NetBeans هي بنية شجرة، هي بيئة تطوير Java مفتوحة المصدر متكاملة، تدعم تطوير تطبيقات Java المستقلة وتطبيقات الشبكة، ويدعم أيضًا تتبع JSP.

يدعم NetBeans عدة وظائف أساسية لتتبع:

  • نقاط التوقف

  • تتبع خطوة بخطوة

  • مراقبة النقاط

للحصول على معلومات مفصلة، يمكنك الرجوع إلى دليل استخدام NetBeans.

استخدام محدد JDB

يمكنك استخدام الأمر jdb في JSP و servlets لتتبع، تمامًا مثل تتبع التطبيقات العادية.

عادةً، نتبع مباشرة عميل sun.servlet.http.HttpServer لمراقبة كيفية تنفيذ HttpServer لـ JSP/Servlets عند استجابة الطلبات HTTP. هذا يشبه تتبع applets. الفرق يكمن في أن برنامج applets يتم تتبعه فعليًا بواسطة sun.applet.AppletViewer.

معظم محددات التتبع يمكنها تجاهل بعض التفاصيل عند تتبع applets، لأنها تعرف كيفية تتبع applets. إذا كنت ترغب في تحويل هدف التتبع إلى JSP، فعليك القيام بما يلي:

  • إعداد classpath للdebugger ليجد sun.servlet.http.Http-Server والكلاسات ذات الصلة.

  • إعداد classpath للdebugger ليجد ملفات JSP والكلاسات ذات الصلة.

بعد إعداد classpath، ابدأ debug sun.servlet.http.Http-Server. يمكنك إعداد نقاط التوقف في أي مكان في ملف JSP، بقدر ما تريد، ثم إرسال طلب إلى الخادم باستخدام المتصفح لرؤية البرنامج يتوقف عند نقطة التوقف.

استخدام التعليقات

تعليقات البرنامج تساعد في العديد من النواحي في debug البرنامج. يمكن استخدام التعليقات في العديد من جوانب debug البرنامج.

يستخدم JSP التعليقات Java. إذا اختفت مشكلة، يرجى النظر بعناية في الكود الذي قمت بتعليقه مؤخرًا، حيث يمكن العثور على السبب عادة.

عناصر الرؤوس في العميل والخادم

في بعض الأحيان، عند عدم تشغيل JSP كما هو متوقع، يمكن أن يكون مراقبة الطلبات HTTP و الإجابات مفيدًا جدًا. إذا كنت مطلعًا على بنية HTTP، يمكنك مراقبة الطلبات و الإجابات مباشرة ومراقبة ما إذا كانت هذه العناصر تتسبب في مشاكل.

نصائح调试 مهمة

سنكشف هنا عن تقنيتين إضافيتين لت调试 JSP:

  • استخدم المتصفح لعرض محتوى الصفحة الأصلي، مما يساعد في التمييز بين المشاكل في الت формат. هذا الخيار عادة ما يكون في قائمة عرض.

  • تأكد من أن المتصفح لم يلتقط أي مخرجات طلب سابقة عند إعادة تحميل الصفحة القسري. إذا كنت تستخدم متصفح Netscape Navigator، استخدم Shift-Reload؛ وإذا كنت تستخدم متصفح IE، استخدم Shift-Refresh.