Servletler - Hata Ayıklama
Sunucu uygulamalarını test etmek / hata ayıklamak her zaman zordur. Servletler, büyük miktarda istemci / sunucu etkileşimi içerme eğilimindedir, bu da hataları olası ancak yeniden üretilmesi zor hale getirir.
İşte hata ayıklamanıza yardımcı olabilecek birkaç ipucu ve öneri.
System.out.println ()
System.out.println (), belirli bir kod parçasının yürütülüp yürütülmediğini test etmek için bir işaretçi olarak kullanımı kolaydır. Değişken değerleri de yazdırabiliriz. Ek olarak -
Sistem nesnesi çekirdek Java nesnelerinin bir parçası olduğu için, herhangi bir ekstra sınıf yüklemeye gerek kalmadan her yerde kullanılabilir. Buna Servletler, JSP, RMI, EJB'ler, sıradan Fasulye ve sınıflar ve bağımsız uygulamalar dahildir.
Kesme noktalarında durma tekniği normal yürütmeyi durdurur, bu nedenle daha fazla zaman alır. System.out'a yazmak, uygulamanın normal yürütme akışına çok fazla müdahale etmez, bu da zamanlama önemli olduğunda onu çok değerli kılar.
System.out.println () kullanmak için sözdizimi aşağıdadır -
System.out.println("Debugging message");
Yukarıdaki sözdizimi tarafından üretilen tüm mesajlar, web sunucusu günlük dosyasına kaydedilir.
Mesaj Günlüğü
Tüm hata ayıklama, uyarı ve hata mesajlarını standart bir günlüğe kaydetme yöntemi kullanarak günlüğe kaydetmek için uygun günlük yöntemini kullanmak her zaman harika bir fikirdir. Tüm mesajları kaydetmek için log4J kullanıyorum .
Servlet API ayrıca aşağıdaki gibi log () yöntemini kullanarak bilgi çıktısının basit bir yolunu sağlar -
// 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, metin mesajlarını sunucu uygulaması kapsayıcısının günlük dosyasına kaydeder. Tomcat ile bu günlükler <Tomcat-installation-directory> / logs içinde bulunur.
Günlük dosyaları, ortaya çıkan yeni hataların veya sorunların sıklığının bir göstergesidir. Bu nedenle, normalde oluşmaması gereken istisnaların catch yan tümcesinde log () işlevini kullanmak iyidir.
JDB Hata Ayıklayıcısını Kullanma
Bir uygulamada veya uygulamada hata ayıklamak için kullandığınız jdb komutlarıyla sunucu uygulamalarının hatalarını ayıklayabilirsiniz.
Bir sunucu uygulamasında hata ayıklamak için sun.servlet.http.HttpServer'ın hatalarını ayıklıyoruz ve tarayıcıdan yapılan HTTP isteklerine yanıt olarak HttpServer'ın sunucu uygulamalarını çalıştırmasını dikkatle izliyoruz. Bu, uygulamaların nasıl hata ayıklandığına çok benzer. Aradaki fark, uygulamalarda hata ayıklanan asıl programın sun.applet.AppletViewer olmasıdır.
Çoğu hata ayıklayıcı, uygulamalarda nasıl hata ayıklanacağını otomatik olarak bilerek bu ayrıntıyı gizler. Servletler için aynısını yapana kadar, aşağıdakileri yaparak hata ayıklayıcınıza yardım etmelisiniz -
Hata ayıklayıcınızın sınıf yolunu sun.servlet.http.Http-Server ve ilişkili sınıfları bulabilecek şekilde ayarlayın.
Hata ayıklayıcınızın sınıf yolunu, sunucu uygulamalarınızı ve destek sınıflarınızı, tipik olarak server_root / servletler ve server_root / sınıfları da bulabilecek şekilde ayarlayın.
Normalde sınıf yolunuzda server_root / servlet'leri istemezsiniz çünkü servlet yeniden yüklemeyi devre dışı bırakır. Ancak bu dahil etme, hata ayıklama için kullanışlıdır. HttpServer'daki özel sunucu uygulaması yükleyici sunucu uygulamasını yüklemeden önce hata ayıklayıcınızın bir sunucu uygulamasında kesme noktaları ayarlamasına olanak tanır.
Uygun sınıf yolunu ayarladıktan sonra, sun.servlet.http.HttpServer'da hata ayıklamaya başlayın. Hata ayıklamayla ilgilendiğiniz sunucu uygulamasında kesme noktaları ayarlayabilir, ardından verilen sunucu uygulaması için HttpServer'a bir istekte bulunmak için bir web tarayıcısı kullanabilirsiniz (http: // localhost: 8080 / servlet / ServletToDebug). Kesme noktalarınızda yürütmenin durdurulduğunu görmelisiniz.
Yorumları Kullanma
Kodunuzdaki yorumlar, hata ayıklama sürecine çeşitli şekillerde yardımcı olabilir. Yorumlar, hata ayıklama sürecinde birçok başka şekilde kullanılabilir.
Servlet Java yorumlarını kullanır ve tek satırlı (// ...) ve çok satırlı (/ * ... * /) yorumlar Java kodunuzun bazı kısımlarını geçici olarak kaldırmak için kullanılabilir. Hata ortadan kalkarsa, az önce yorumladığınız koda daha yakından bakın ve sorunu bulun.
İstemci ve Sunucu Başlıkları
Bazen bir sunucu uygulaması beklendiği gibi davranmadığında, ham HTTP isteğine ve yanıtına bakmak yararlıdır. HTTP'nin yapısına aşinaysanız, isteği ve yanıtı okuyabilir ve bu başlıklarla tam olarak ne olduğunu görebilirsiniz.
Önemli Hata Ayıklama İpuçları
İşte sunucu uygulaması hata ayıklamayla ilgili daha fazla hata ayıklama ipucunun bir listesi -
Server_root / classes'in yeniden yüklenmediğini ve server_root / servlet'lerin büyük olasılıkla yüklendiğini unutmayın.
Bir tarayıcıdan, görüntülediği sayfanın ham içeriğini göstermesini isteyin. Bu, biçimlendirme sorunlarının belirlenmesine yardımcı olabilir. Genellikle Görünüm menüsünün altındaki bir seçenektir.
Sayfayı tam olarak yeniden yüklemeye zorlayarak tarayıcının önceki bir isteğin çıktısını önbelleğe almadığından emin olun. Netscape Navigator ile Shift-Yeniden Yükle'yi kullanın; Internet Explorer ile Shift-Refresh kullanın.
Sunucu uygulamanızın init () yönteminin bir ServletConfig parametresi aldığını ve hemen super.init (config) öğesini çağırdığını doğrulayın.