日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

servlet 异常处理_Servlet异常和错误处理示例教程

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 servlet 异常处理_Servlet异常和错误处理示例教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

servlet 異常處理

有時候我寫了一篇有關Java異常處理的文章,但是當涉及到Web應用程序時,我們需要的不僅僅是Java中的異常處理。

Servlet異常

如果您注意到,doGet()和doPost()方法將拋出ServletException和IOException ,那么讓我們看看當從應用程序中拋出這些異常時會發生什么。 我將編寫一個簡單的Servlet,它將拋出ServletException。

MyExceptionServlet.java

package com.journaldev.servlet.exception;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/MyExceptionServlet") public class MyExceptionServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {throw new ServletException("GET method is not supported.");}}

現在,當我們使用GET方法通過瀏覽器調用此servlet時,將得到如下圖所示的響應。

由于瀏覽器僅了解HTML,因此當我們的應用程序引發異常時,servlet容器將處理該異常并生成HTML響應。 此邏輯特定于servlet容器,我正在使用tomcat并獲取此錯誤頁面,但是如果您將使用其他服務器(如JBoss或Glassfish),則可能會收到不同的錯誤HTML響應。

此響應的問題在于它對用戶沒有任何價值。 它還向用戶顯示了我們的應用程序類和服務器詳細信息,這對用戶沒有意義,并且從安全角度來看也不是一件好事。

Servlet錯誤

我敢肯定,當您嘗試訪問不存在的URL時,您一定已經看到404錯誤。 讓我們看看我們的servlet容器如何響應404錯誤。 如果我們發送無效URL的請求,則會得到響應HTML,如下圖所示。

同樣,它是服務器代表我們生成的通用HTML,對用戶幾乎沒有價值。

Servlet異常和錯誤處理

Servlet API支持可在部署描述符中配置的自定義Exception和Error Handler servlet,這些servlet的全部目的是處理應用程序引發的Exception或Error并發送對用戶有用HTML響應。 我們可以提供指向應用程序主頁的鏈接或一些詳細信息,以使用戶知道出了什么問題。

因此,首先我們需要創建一個自定義的Exception and Error Handler servlet。 我們可以為應用程序提供多個異常和錯誤處理程序servlet,但為簡單起見,我將創建一個servlet,并將其用于異常和錯誤。

AppExceptionHandler.java

package com.journaldev.servlet.exception;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/AppExceptionHandler") public class AppExceptionHandler extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {processError(request, response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {processError(request, response);}private void processError(HttpServletRequest request,HttpServletResponse response) throws IOException {// Analyze the servlet exceptionThrowable 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 typeresponse.setContentType("text/html");PrintWriter out = response.getWriter();out.write("<html><head><title>Exception/Error Details</title></head><body>");if(statusCode != 500){out.write("<h3>Error Details</h3>");out.write("<strong>Status Code</strong>:"+statusCode+"<br>");out.write("<strong>Requested URI</strong>:"+requestUri);}else{out.write("<h3>Exception Details</h3>");out.write("<ul><li>Servlet Name:"+servletName+"</li>");out.write("<li>Exception Name:"+throwable.getClass().getName()+"</li>");out.write("<li>Requested URI:"+requestUri+"</li>");out.write("<li>Exception Message:"+throwable.getMessage()+"</li>");out.write("</ul>");}out.write("<br><br>");out.write("<a href=\"index.html\">Home Page</a>");out.write("</body></html>");} }

讓我們看看如何在部署描述符中配置它,然后我們將了解它的實現及其工作方式。

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>ServletExceptionHandling</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><error-page><error-code>404</error-code><location>/AppExceptionHandler</location></error-page><error-page><exception-type>javax.servlet.ServletException</exception-type><location>/AppExceptionHandler</location></error-page> </web-app>

如您所見,使用error-page元素為應用程序指定異常處理程序servlet非常容易。 每個錯誤頁面元素應具有錯誤代碼異常類型元素。 我們在location元素中定義異常處理程序servlet。

基于以上配置,如果應用程序拋出404錯誤或ServletException,它將由AppExceptionHandler Servlet處理。

當出現此類異常和錯誤情況時,servlet容器將調用Exception Handler servlet的相應HTTP方法,并傳遞請求和響應對象。 請注意,我已經提供了doGet()和doPost()方法的實現,以便它可以處理GET和POST請求并使用通用方法來處理它們。

在servlet容器調用servlet來處理異常之前,它會在請求中設置一些屬性以獲取有關異常的有用信息,其中一些屬性是javax.servlet.error.exceptionjavax.servlet.error.status_codejavax.servlet。 error.servlet_namejavax.servlet.error.request_uri

作為例外,狀態碼始終為500,與“內部服務器錯誤”相對應,對于其他類型的錯誤,我們將獲得不同的錯誤代碼,例如404、403等。

使用狀態代碼,我們的實現將不同類型HTML響應呈現給用戶。 它還提供了到應用程序主頁的超鏈接。

現在,當我們點擊拋出ServletException的servlet時,我們將得到如下圖所示的響應。

如果我們嘗試訪問無效的URL,這將導致404響應,我們將得到如下圖所示的響應。

它看起來不是很好,并且可以幫助用戶輕松地了解發生了什么并為他們提供前往正確位置的方法。 它還避免了將應用程序敏感信息發送給用戶。 我們應該始終為我們的Web應用程序配備異常處理程序。

如果要在單個異常處理程序中處理運行時異常和所有其他異常,則可以將異常類型提供為Throwable。

<error-page><exception-type>java.lang.Throwable</exception-type><location>/AppExceptionHandler</location> </error-page>

如果有多個錯誤頁面條目,例如對于Throwable一項,對于IOException一項,應用程序拋出FileNotFoundException,那么它將由IOException的錯誤處理程序處理。

您還可以將JSP頁面用作異常處理程序,僅提供jsp文件的位置而不是servlet映射。

這就是Web應用程序中異常處理的全部,希望您喜歡它。

  • 下載ServletExceptionHandling項目

參考: 開發者食譜博客上的JCG合作伙伴 Pankaj Kumar提供的Servlet異常和錯誤處理示例教程 。

翻譯自: https://www.javacodegeeks.com/2013/08/servlet-exception-and-error-handling-example-tutorial.html

servlet 異常處理

總結

以上是生活随笔為你收集整理的servlet 异常处理_Servlet异常和错误处理示例教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。