javaweb回顧第四篇Servlet異常處理

前言:很多網站為了給用戶很好的用戶體驗性,都會提供比較友好的異常界面,現在我們在來回顧一下Servlet中如何進行異常處理的。

1:聲明式異常處理

什么是聲明式:就是在web.xml中聲明對各種異常的處理方法。

是通過<error-page>元素來聲明的,<error-page>下面有幾個子元素如下圖

error-code:http錯誤代碼

exception-type:java異常類的完整名

location:響應http錯誤代碼或者java異常的資源路徑

下面通過例子一一講解:

1:首先我們做個最簡單的先在程序中加一個FileNotFound.html文件,文件內容如下

 1 <html>
 2 <head>
 3 <meta charset="UTF-8">
 4 <title>頁面沒有發現</title>
 5 </head>
 6 <body>
 7 你訪問的頁面并不存在,或者被移到其他位置。<p>
 8 如有其他問題請聯系<a href="#">管理員</a>
 9 </body>
10 </html>
View Code

然后我們在web.xml中加入下面代碼

<error-page><error-code>404</error-code><location>/FileNotFound.html</location>
</error-page>

如果開啟tomcat 在瀏覽器輸入http://localhost:8080/servlet-test/index1.jsp

然后會出現下面

2:然后我們發現如果我聲明越來越多的異常時候會出現越來越多的html這樣的靜態代碼,那么可以能否在后臺操作呢,答案是肯定的,現在我們用一個Servlet類來進行響應

首先來看一副關于servlet相關屬性的圖

現在我以其中status_code作為例子先建立一個ErrorHandlerServlet如下

 1 public class ErrorHandlerServlet extends HttpServlet{
 2 
 3     private static final long serialVersionUID = 1L;
 4     protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
 5     {
 6 
 7         response.setContentType("text/html;charset=gb2312");
 8         PrintWriter out=response.getWriter();
 9         Integer status_code=(Integer)request.getAttribute("javax.servlet.error.status_code");        
10         out.println("<html><head><title>錯誤列表</title></head>");
11         out.println("<body>");
12 
13         switch(status_code)
14         {
15         case 401:
16             out.println("<h2>http錯誤碼:"+status_code+"</h2>");
17             out.println("你并沒有被授權");
18             out.println("如有其他問題請聯系<a href='#'>管理員</a>");
19             break;
20         case 404:
21             out.println("<h2>http錯誤碼:"+status_code+"</h2>");
22             out.println("你訪問的頁面并不存在,或者被移到其他位置");
23             out.println("如有其他問題請聯系<a href='#'>管理員</a>");
24             break;
25         }
26         
27         out.println("</body></html>");
28         out.close();
29     }
ErrorHandlerServlet

然后在配置web.xml

 1 <servlet>
 2         <servlet-name>ErrorHandlerServlet</servlet-name>
 3         <servlet-class>com.lp.servlet.ErrorHandlerServlet</servlet-class>
 4     </servlet>
 5     <servlet-mapping>
 6         <servlet-name>ErrorHandlerServlet</servlet-name>
 7         <url-pattern>/errorHandler</url-pattern>
 8     </servlet-mapping>
 9     <error-page>
10         <error-code>404</error-code>
11         <location>/errorHandler</location>
12     </error-page>
web.xml

現在我們再次開啟tomcat 在瀏覽器輸入http://localhost:8080/servlet-test/index1.jsp

可以看到如下圖

3:我們發現發現關于exception-type都沒有用上那么關于怎么用exception-type呢下面來用實例講解

我們在寫一個關于文件操作的Servlet類FileExceptionServlet

 1 public class FileExceptionServlet extends HttpServlet{
 2     /**
 3      * 
 4      */
 5     private static final long serialVersionUID = 1L;
 6     public  void doGet(HttpServletRequest request,HttpServletResponse response) throws FileNotFoundException  
 7     {        
 8             File file=new File("1.txt");
 9             FileInputStream fileInputStream=new F
10     }
11 }
FileExceptionServlet

在這里我們并沒有1.txt文件,注意聲明的FileNotFoundException異常在配置中會用的到

同樣我們在寫一個關于處理Servlet異常的ExceptionHandlerServlet類

 1 public class ExceptionHandlerServlet extends HttpServlet{
 2 
 3     /**
 4      * 
 5      */
 6     private static final long serialVersionUID = 1L;
 7     protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
 8     {
 9         response.setContentType("text/html;charset=gb2312");
10         PrintWriter out=response.getWriter();
11         out.println("<html><head><title>錯誤列表</title></head>");
12         out.println("<body>");
13         out.println("應用程序出錯");
14         out.println("錯誤原因可能是某個服務器端文件被刪除");
15         out.println("請聯系<a href='#'>管理員</a>");    
16         out.println("</body></html>");
17         out.close();
18     }
ExceptionHandlerServlet

然后再次配置web.xml

 1 <servlet>
 2         <servlet-name>ExceptionHandlerServlet</servlet-name>
 3         <servlet-class>com.lp.servlet.ExceptionHandlerServlet</servlet-class>
 4     </servlet>
 5     <servlet-mapping>
 6         <servlet-name>ExceptionHandlerServlet</servlet-name>
 7         <url-pattern>/exceptionHandler</url-pattern>
 8     </servlet-mapping>
 9     <error-page>
10         <exception-type>java.io.FileNotFoundException</exception-type>
11         <location>/exceptionHandler</location>
12     </error-page>
web.xml

然后啟動tomcat輸入http://localhost:8080/servlet-test/exceptionHandler看到

2:編程式的異常處理

這個在實際開發中運用的比較多主要采取try catch捕獲異常 然后進行處理。舉一個小例子比喻我們上面說的文件操作,如果發現文件不存在的時候我們可以把這個錯誤記錄在日志便于查閱,ok我看一下

 1 public  void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException  
 2     {    
 3         try {
 4             File file=new File("1.txt");
 5             @SuppressWarnings("unused")
 6             FileInputStream fileInputStream=new FileInputStream(file);
 7         } catch (FileNotFoundException e) {
 8             getServletContext().log(e.getMessage());
 9             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"文件未能發現");
10         }
11     }
View Code

從中我們可以看出采用了sendError這個方法,目的就是可以把一些錯誤信息很好的展現出來,日志這里就是簡單提下,在實際中可能根據不同業務選擇的不一樣。

然后再次配置wen.xml

<servlet><servlet-name>FileExceptionServlet</servlet-name><servlet-class>com.lp.servlet.FileExceptionServlet</servlet-class></servlet><servlet-mapping><servlet-name>FileExceptionServlet</servlet-name><url-pattern>/fileexception</url-pattern></servlet-mapping>

再次運行http://localhost:8080/servlet-test/fileexception

好了,關于Servlet異常就說這么多了,隨著技術不停的更新,處理異常的方式也越來越多但是這些基礎的還是應該了解和學習下的

?

轉載于:https://www.cnblogs.com/LipeiNet/p/5684003.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372647.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java開發cs教程,日常運維(一)

w命令&#xff1a;用于查看系統負載、顯示已經登陸系統的用戶列表&#xff0c;并顯示用戶正在執行的指令等信息第一行從左面開始顯示的信息依次為&#xff1a;時間&#xff0c;系統運行時間&#xff0c;登錄用戶數&#xff0c;平均負載。第二行開始以及下面所有的行&#xff0c…

coursera 《現代操作系統》 -- 第五周 同步機制(1)

臨界區塊&#xff08;Critical section&#xff09;指的是一個訪問共用資源&#xff08;例如&#xff1a;共用設備或是共用存儲器&#xff09;的程序片段&#xff0c;而這些共用資源有無法同時被多個線程訪問的特性。&#xff08;不是字面意思的一個區域&#xff0c;是程序片段…

java.lang.NoClassDefFoundError:如何解決–第2部分

本文是我們的NoClassDefFoundError故障排除系列的第2部分。 看一下第1部分 。 它將重點介紹最簡單的NoClassDefFoundError問題類型。 本文對于Java初學者來說是理想的選擇&#xff0c;我強烈建議您自己編譯并運行示例Java程序。 今后將使用以下書寫格式&#xff0c;并為您提供&…

Android開發技術周報 Issue#34

教程 Google Develop for Android 系列 前幾天在G上看到Google Developers站點&#xff0c;有一個Android系列的文章&#xff0c;分享到個人微博&#xff0c;周末閑來沒事就學寫了下&#xff0c;把它們簡單的翻譯了下&#xff0c;沒想到一發不可收拾&#xff0c;六篇文章全部都…

php進度條插件,分享8款優秀的 jQuery 加載動畫和進度條插件_jquery

加載動畫和進度條在網站和 Web 應用中的使用非常流行。雖然網速越來越快&#xff0c;但是我們的網站越來越復雜&#xff0c;同時用戶對網站的使用體驗的要求也越來越高。在內容加載緩慢的時候&#xff0c;使用時尚的加載動畫和進度條告訴用戶還有內容正在加載是一種非常好的方式…

卷積神經網絡(CNN)與特殊的卷積

各種卷積操作的可視化的顯示形式&#xff1a;GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning1. fractionally-strided 卷積 如上圖示&#xff0c;輸入為 33 &#xff0c;想要卷積上采樣成 55 的輸出。需要…

JBoss AS 7:自定義登錄模塊

JBoss AS 7很整潔&#xff0c;但是仍然缺少文檔&#xff08;錯誤消息沒有那么有用&#xff09;。 這篇文章總結了如何創建自己的兼容JavaEE的登錄模塊&#xff0c;以對部署在JBoss AS上的Web應用程序的用戶進行身份驗證。 提供了一個工作的基本用戶名密碼模塊。 為什么要使用Ja…

MySQL安裝步驟及相關問題解決

1. 下載MySQL Server&#xff0c;網址&#xff1a;http://dev.mysql.com/downloads/mysql/ 2. 點擊MySQL5.5.21的安裝文件&#xff0c;出現安裝向導界面&#xff0c;單擊“next”繼續安裝&#xff1a; 3. 選擇接受協議&#xff0c;單擊“next”繼續安裝&#xff1a; 4. 在出現選…

matlab的數學函數,matlab中常見數學函數的使用

matlab中常見數學函數的使用 MATLAB 基本知識 Matlab 的內部常數 pi 圓周率 exp(1) 自然對數的底數 e i 或 j 虛數單位 Inf 或 inf 無窮大 Matlab 的常用內部數學函數 指數函數 exp(x) 以 e 為底數 log(x) 自然對數&#xff0c;即以 e 為底數的對數 log10(x) 常用對數&#xff…

C++中 list與vector的區別

C中 list與vector的區別 引用http://www.cnblogs.com/shijingjing07/p/5587719.html C vector和list的區別 1.vector數據結構vector和數組類似&#xff0c;擁有一段連續的內存空間&#xff0c;并且起始地址不變。因此能高效的進行隨機存取&#xff0c;時間復雜度為o(1);但因為內…

使用Struts 2的查詢網格(無插件)

當將jQuery與struts 2一起使用時&#xff0c;開發人員被說服使用struts2-jQuery插件 。 因為大多數論壇和其他Internet資源都支持struts2 jQuery插件。我有這種經驗。 我想將Struts 2使用jQuery Grid插件&#xff0c;但不使用struts2 jQuery插件。 對于我而言&#xff0c;很難找…

php reflectionmethod,PHP ReflectionMethod getClosure()用法及代碼示例

ReflectionMethod::getClosure()函數是PHP中的一個內置函數&#xff0c;用于為該方法返回動態創建的閉包&#xff0c;否則&#xff0c;在出現錯誤的情況下返回NULL。用法:Closure ReflectionMethod::getClosure ( $object )參數&#xff1a;該函數接受參數對象&#xff0c;該參…

java學習筆記--IO流

第十二章大綱&#xff1a; I/O input/output 輸入/輸出 一、創建文件&#xff0c;借助File類來實現 file.createNewFile() &#xff1a; 創建文件 file.exists() &#xff1a; 判斷文件是否存在&#xff0c;如果存在&#xff0c;則返回true delete() &#xff1a; 刪除文件&…

linux命令之kill篇

作業四&#xff1a;查詢firewall進程&#xff0c;然后殺死 [rootlocalhost 桌面]# ps -aux |grep firewall root 772 0.0 2.0 327912 20704 ? Ssl 15:23 0:00 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid root 5323 0.0 0.0 112660…

ActiveMQ網絡連接器

這篇文章對我和任何對網絡連接器如何為ActiveMQ工作感興趣的ActiveMQ貢獻者而言都是更多的內容。 我最近花了一些時間查看代碼&#xff0c;并認為最好畫一些快速的圖表來幫助我記住我學到的東西&#xff0c;并在將來發現問題時幫助將來確定在哪里進行調試。 如果我輸入有誤&…

《程序設計與數據結構》第3周學習總結

學號 20162317 《程序設計與數據結構》第3周學習總結 教材學習內容總結 第三章的內容相比之前兩章更為具體&#xff0c;介紹的內容更為集中&#xff0c;主要說到了類和對象的問題&#xff0c;其中也仔細介紹了String類、Random類、Math類、NumberFormat類等類。此外也說到了與類…

Java中帶有JWebSocket的WebServerSocket

首先&#xff0c;轉到http://jwebsocket.org/下載2個軟件包Server and Client。 如果要查看源代碼&#xff0c;請下載源代碼包。 服務器 解壓縮服務器程序包。 轉到“ conf”文件夾 選擇“ jWebSocket.xml”文件打開 編輯“ jWebSocket.xml”文件&#xff0c;在標簽<dom…

OpenCV入門指南----人臉檢測

本篇介紹圖像處理與模式識別中最熱門的一個領域——人臉檢測&#xff08;人臉識別&#xff09;。人臉檢測可以說是學術界的寵兒&#xff0c;在不少EI&#xff0c;SCI高級別論文都能看到它的身影。甚至很多高校學生的畢業設計都會涉及到人臉檢測。當然人臉檢測的巨大實用價值也讓…

matlab提取艾里斑,艾里斑:我不是雀斑

正是艾里斑&#xff0c;限制了光學儀器的精度我們知道凸透鏡能把入射光會聚到它的焦點上&#xff0c;由于透鏡的口徑有一定大小&#xff0c;限制了光線的傳播&#xff0c;所以凸透鏡也會發生衍射。這導致透鏡無法把光線會聚成無限小的點&#xff0c;而只會在焦點上形成具有一定…

mysql啟動錯誤排查-無法申請足夠內存

一般情況下mysql的啟動錯誤還是很容易排查的&#xff0c;但是今天我們就來說一下不一般的情況。拿到一臺服務器&#xff0c;安裝完mysql后進行啟動&#xff0c;啟動錯誤如下&#xff1a; 有同學會說&#xff0c;哥們兒你是不是buffer pool設置太大了&#xff0c;設置了96G內存。…