Servletler - Özel Durum İşleme
Bir sunucu uygulaması bir istisna attığında, web kapsayıcısı içindeki yapılandırmaları arar. web.xml atılan istisna türüyle bir eşleşme için istisna türü öğeyi kullanan.
Kullanmanız gerekecek error-page web.xml'deki öğesi belirli yanıtlara yanıt olarak sunucu uygulamalarının çağrılmasını belirtmek için exceptions veya HTTP status codes.
web.xml Yapılandırması
Tanımlanmış herhangi bir istisna veya hata olduğunda çağrılacak bir ErrorHandler sunucu uygulamasına sahip olduğunuzu düşünün . Aşağıda, web.xml'de oluşturulan giriş olacaktır.
<!-- servlet definition -->
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<!-- error-code related error pages -->
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/ErrorHandler</location>
</error-page>
<!-- exception-type related error pages -->
<error-page>
<exception-type>
javax.servlet.ServletException
</exception-type >
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.io.IOException</exception-type >
<location>/ErrorHandler</location>
</error-page>
Tüm istisnalar için genel bir Hata İşleyiciye sahip olmak istiyorsanız, her istisna için ayrı hata sayfası öğeleri tanımlamak yerine aşağıdaki hata sayfasını tanımlamalısınız -
<error-page>
<exception-type>java.lang.Throwable</exception-type >
<location>/ErrorHandler</location>
</error-page>
İstisna İşleme için yukarıdaki web.xml hakkında dikkat edilmesi gereken noktalar aşağıdadır -
Sunucu uygulaması ErrorHandler, diğer sunucu uygulamaları gibi normal şekilde tanımlanır ve web.xml'de yapılandırılır.
404 (Bulunamadı) veya 403 (Yasak) durum kodunda herhangi bir hata varsa, ErrorHandler sunucu uygulaması çağrılır.
Web uygulaması ServletException veya IOException atarsa, web kapsayıcısı / ErrorHandler sunucu uygulamasını çağırır.
Farklı hata türlerini veya istisnaları işlemek için farklı Hata İşleyicileri tanımlayabilirsiniz. Yukarıdaki örnek çok geneldir ve size temel kavramı açıklama amacına hizmet etmesini umuyoruz.
Öznitelik İste - Hatalar / İstisnalar
Aşağıda, bir hata işleme sunucu uygulamasının hatanın / istisnanın doğasını analiz etmek için erişebileceği istek özniteliklerinin listesi yer almaktadır.
Sr.No. | Öznitelik ve Açıklama |
---|---|
1 | javax.servlet.error.status_code Bu özellik, bir java.lang.Integer veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen durum kodunu verir. |
2 | javax.servlet.error.exception_type Bu özellik, java.lang.Class veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen istisna türü hakkında bilgi verir. |
3 | javax.servlet.error.message Bu öznitelik, bir java.lang.String veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen bilgiye tam hata mesajı verir. |
4 | javax.servlet.error.request_uri Bu özellik, sunucu uygulamasını çağıran URL hakkında bilgi verir ve bir java.lang.String veri türünde depolandıktan sonra depolanabilir ve analiz edilebilir. |
5 | javax.servlet.error.exception Bu öznitelik, kaydedilebilen ve analiz edilebilen istisna hakkında bilgi verir. |
6 | javax.servlet.error.servlet_name Bu öznitelik, java.lang.String veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen sunucu uygulaması adı verir. |
Hata İşleyici Servlet Örneği
Bu örnek size Servlet'te İstisna İşleme hakkında temel bir anlayış verecektir, ancak aynı konsepti kullanarak daha karmaşık filtre uygulamaları yazabilirsiniz -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class ErrorHandler extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Analyze the servlet exception
Throwable throwable = (Throwable)
request.getAttribute("javax.servlet.error.exception");
Integer statusCode = (Integer)
request.getAttribute("javax.servlet.error.status_code");
String servletName = (String)
request.getAttribute("javax.servlet.error.servlet_name");
if (servletName == null) {
servletName = "Unknown";
}
String requestUri = (String)
request.getAttribute("javax.servlet.error.request_uri");
if (requestUri == null) {
requestUri = "Unknown";
}
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Error/Exception Information";
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");
if (throwable == null && statusCode == null) {
out.println("<h2>Error information is missing</h2>");
out.println("Please return to the <a href=\"" +
response.encodeURL("http://localhost:8080/") +
"\">Home Page</a>.");
} else if (statusCode != null) {
out.println("The status code : " + statusCode);
} else {
out.println("<h2>Error information</h2>");
out.println("Servlet Name : " + servletName + "</br></br>");
out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");
out.println("The request URI: " + requestUri + "<br><br>");
out.println("The exception message: " + throwable.getMessage( ));
}
out.println("</body>");
out.println("</html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Derleme ErrorHandler.java her zamanki gibi ve sınıf dosyanızı koyun
İstisnaları işlemek için web.xml'ye aşağıdaki yapılandırmayı ekleyelim -
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type >
<location>/ErrorHandler</location>
</error-page>
Şimdi, herhangi bir istisna oluşturan veya yanlış bir URL yazan bir sunucu uygulaması kullanmayı deneyin, bu, Web Container'ı çağırmak için tetikler. ErrorHandlerservlet ve programlandığı gibi uygun bir mesaj görüntüler. Örneğin, yanlış bir URL yazarsanız, aşağıdaki sonucu görüntüler -
The status code : 404
Yukarıdaki kod bazı web tarayıcılarında çalışmayabilir. Öyleyse Mozilla ve Safari ile deneyin ve çalışmalıdır.