程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 基礎知識回顧第四篇Servlet異常處理,第四篇servlet

基礎知識回顧第四篇Servlet異常處理,第四篇servlet

編輯:JAVA綜合教程

基礎知識回顧第四篇Servlet異常處理,第四篇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異常就說這麼多了,隨著技術不停的更新,處理異常的方式也越來越多但是這些基礎的還是應該了解和學習下的

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved