JAVA學習總結(二)
關於面向物件中的異常處理、XML文件、Servlet使用
異常處理
我們在寫程式的時候難免會出現各種錯誤,其中有些是我們可以預見的,有些確實我們無法預見的,而不同的異常情況處理方式也有所不同,這裡我要說的就是利用Exception來處理一些我們在寫程式時可以處理的異常。 我們可以瞭解到常見的異常原因有:
- 使用者的非法輸入
- 請求的流不存在
- 記憶體溢位等
相應的就會產生一些:
- 檢查時異常
- 執行時異常
- 錯誤
我們就會使用Exception
類、try
、catch
、finally
、throw
、throws
來處理這些異常。
在JAVA中有一些內建的異常處理方法,比如IOException
、ClassNotFoundException
Exception
類來實現你想要的異常處理。
所有的異常類是從 java.lang.Exception 類繼承的子類。 Exception 類是 Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error 。 Java 程式通常不捕獲錯誤。錯誤一般發生在嚴重故障時,它們在Java程式處理的範疇之外。 Error 用來指示執行時環境發生的錯誤。
另外,在敲程式碼的時候,我們要注意幾點:
- throw和throws的區別。throw寫在方法裡,後面跟的是一個例項化的物件,throws寫在類名後面,後面跟的是異常的型別(可以寫多個,中間用逗號隔開);
- try和catch配對。一個try至少要有一個catch和它對應或者有一個finally,一個try可以有多個catch;
- finally。finally是異常處理的最終措施,無論是否發生異常,finally 程式碼塊中的程式碼總會被執行。它推薦寫,但也可以不寫。
- 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。
我還想說的是轉義的問題。和其他語言使用“\”不同,這裡使用的是&
+你要轉義的字元,例如:
jdbc:mysql://localhost:3306/test?useSSL=true&&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,其中主要包括以下幾個部分:
- 繼承HttpServlet。我們通常編寫 Servlet 來擴充套件 javax.servlet.http.HttpServlet,並實現 Servlet 介面的抽象類專門用來處理 HTTP 請求;
- init()。執行必需的初始化;
- service()。實際做的內容,可以是post或get,也採用繼承;
- 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不僅僅是這一點內容,還有更多的內容等著我們慢慢積累。