1. 程式人生 > >JAVA學習總結(二)

JAVA學習總結(二)

關於面向物件中的異常處理、XML文件、Servlet使用

異常處理

我們在寫程式的時候難免會出現各種錯誤,其中有些是我們可以預見的,有些確實我們無法預見的,而不同的異常情況處理方式也有所不同,這裡我要說的就是利用Exception來處理一些我們在寫程式時可以處理的異常。 我們可以瞭解到常見的異常原因有:

  • 使用者的非法輸入
  • 請求的流不存在
  • 記憶體溢位等

相應的就會產生一些:

  • 檢查時異常
  • 執行時異常
  • 錯誤

我們就會使用Exception類、trycatchfinallythrowthrows來處理這些異常。 在JAVA中有一些內建的異常處理方法,比如IOExceptionClassNotFoundException

等,我們只需要在合適的時候呼叫它們,至於具體都有哪些,我們可以在需要的時候查閱。當然,我們也可以通過繼承Exception類來實現你想要的異常處理。

所有的異常類是從 java.lang.Exception 類繼承的子類。 Exception 類是 Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error 。 Java 程式通常不捕獲錯誤。錯誤一般發生在嚴重故障時,它們在Java程式處理的範疇之外。 Error 用來指示執行時環境發生的錯誤。

另外,在敲程式碼的時候,我們要注意幾點:

  1. throw和throws的區別。throw寫在方法裡,後面跟的是一個例項化的物件,throws寫在類名後面,後面跟的是異常的型別(可以寫多個,中間用逗號隔開);
  2. try和catch配對。一個try至少要有一個catch和它對應或者有一個finally,一個try可以有多個catch;
  3. finally。finally是異常處理的最終措施,無論是否發生異常,finally 程式碼塊中的程式碼總會被執行。它推薦寫,但也可以不寫。
  4. catch的順序。當有多個catch時,catch的順序為從小到大,即第一個catch的異常可以繼承自下一個異常或是和下一個異常平級,但不能是第二個異常繼承自第一個異常,這樣就沒有意義了。

下面是個虛擬碼

//try、catch和finally
try{
   // do something
}
catch(異常型別1 異常的變數名1){
  // do something
}
catch(異常型別2 異常的變數名2){
  // do something
}
finally{
  // do something
}

//throw和throws
public static void main(String[] args) throws IOException,
                              InsufficientFundsException
   {
       // Method implementation
       throw new Exception();
   }

XML文件

XML,可擴充套件標記語言,和JSON一樣被設計來傳輸和儲存資料。而要寫一個XML文件,就要有一個文件頭(必須在開頭):

<?xml version="1.0" encoding="UTF-8"?>

在寫註釋時,XML使用的是<!-- -->而不是//,這種註釋方式支援換行但是不支援巢狀。 XML有其自身許多屬性和元素,我們在與JAVA搭配使用的時候就涉及到這麼幾個點:

  • schema——說明本文件有schema約束條件
  • xmlns——就是XML的名稱空間,去你後面指定的URL找需要的東西
  • xmlns:xsi ——指定schemaLocation來自哪個名稱空間
  • xsi:schmeLocation——指定該名稱空間下的哪個xsd檔案

這是寫在一個XML文件開始的部分,後面就看你發揮了,是要寫個Servlet還是寫個Filter。 我還想說的是轉義的問題。和其他語言使用“\”不同,這裡使用的是&amp;+你要轉義的字元,例如:

jdbc:mysql://localhost:3306/test?useSSL=true&amp;&serverTimezone=Hongkong

關於XML的解析,由於目前使用較少,瞭解僅限以下內容:

解析的兩種方式 DOM:樹形結構解析,在載入整個文件之後進行解析 SAX:按行讀取,讀一行解析一行

基於兩種方式的三種具體實現 JAXP: 基於DOM,是w3c推出 DOM4J:基於DOM,是第三方開源的 SAX:基於SAX,是來源於一個開源社群

而這些解析方式都有各自的處理過程和優缺點,大家可以自行了解。 再給個開頭樣例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
        
         <!--
  		servlet或是Filter等
  		 -->
  		 
</web-app>

Servlet

在我看來,servlet是sun公司搞出來的一套在服務端和客戶端之間的一個互動的工具,運用這個工具,我們可以更便利的實現我們的需求,他可以處理異常,提交表單、訪問資料庫等等,我們要做的就是去使用它。那麼我們要怎麼使用它呢? 首先,我們要新增它所依賴的jar包,這個包一般在你下的Tomcat的lib資料夾裡都會有。 在這裡插入圖片描述 然後給它配置一個檔案web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>demo.serverlet.controller.HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
</web-app>

其中有幾個關鍵詞

  • servlet——在這裡寫servlet的宣告
  • servlet-name——servlet的宣告
  • servlet-class——所宣告的servlet在哪個方法裡實現
  • servlet-mapping——servlet的對映,其中的servlet-name要和上面servlet匹配
  • url-pattern——對映到的路徑,用以網路訪問時具體的路徑

在一個servlet裡可以宣告多個具體的內容,每一個宣告都要有一個對映與之對應;url-pattern要區分大小寫,當然url-pattern裡也可以寫*.do或者絕對路徑。 接下來就是具體實現servlet,其中主要包括以下幾個部分:

  1. 繼承HttpServlet。我們通常編寫 Servlet 來擴充套件 javax.servlet.http.HttpServlet,並實現 Servlet 介面的抽象類專門用來處理 HTTP 請求;
  2. init()。執行必需的初始化;
  3. service()。實際做的內容,可以是post或get,也採用繼承;
  4. destory()。清場,這裡servlet 被銷燬,但是並沒有立即被回收,再次請求時,並沒有重新初始化,還是需要JAVA自己的垃圾回收器。

下面給個例子:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
 
  private String message;

  public void init() throws ServletException
  {
      // 初始化
      message = "Hello World";
  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 設定響應內容型別
      response.setContentType("text/html");

      // 實際的邏輯
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
     System.out.println("destory");
  }
}

啟動tomcat,訪問localhost:8080/hello就會顯示出下面的結果 在這裡插入圖片描述

當然,異常處理、XML和servlet不僅僅是這一點內容,還有更多的內容等著我們慢慢積累。