J2EE Part 17

1.複習 Try...Catch
a.語法:(參考JAVA課本 P.327)

try{          }
catch(...)  {          }     <==可以多個catch,但子類別要在上面,父類別在下,編譯才不會錯
...
...
finally {          }     <==一定會被執行

老師範例程式碼一:
test.java
public class Test {
  public static void main ( String[] args ){
    try {
       throw new Exception("丟丟銅仔!");
//      System.out.println(10/0);
    } catch ( ArithmeticException e ){
      System.out.println("數學有問題: " +e);
    } catch ( Exception e ){
       System.out.println("抓到例外: " +e);
    } finally {
      System.out.println("finally區塊,一定會被執行!");
    }
  }
}


run.bat
del *.class
javac *.java
java -cp . Test
pause


老師範例程式碼二:
test.java
import java.io.*;
public class Test {
  void OpenFile() throws IOException {
//  void OpenFile() throws EOFException {
//    throw new IOException("檔案開啟!");
    throw new EOFException("檔案已經尾端");
  }
  public static void main(String [] args) {
    Test t = new Test();
    try {
      t.OpenFile();
    } catch (EOFException e) {
      System.out.println("抓到EOFException例外: " + e);
    } catch (IOException e) {
      System.out.println("抓到IOException例外: " + e);
    }
  }
}

run.bat
del *.class
javac Test.java
java -cp Test
pause


老師範例程式碼三:
EscapedEx.java
public class EscapedEx {
//  public static void main ( String[] args ){
  public static void main ( String[] args ) throws InterruptedException{
    System.out.print("安裝進度: ");
    for( int i=0; i<=100; i+=5){
      if( i < 10 ){
        System.out.print( i + "%\b\b" );
      } else {
        System.out.print( i + "%\b\b\b" );
      }
//      try{
        Thread.currentThread().sleep(1000);
//      } catch ( Exception e ){}
    } //for
  } //main
} //class


run.bat
del *.class
javac EscapedEx.java
java -cp EscapedEx
pause



b.例外類別的層級關係 (父子類別)

老師範例程式碼四:
MyException.java
public class MyException extends Exception{
  private int port;
  public MyException ( String message, int port ){
    super( message );
    this.port = port;
  }
  public int getPort() {
    return port;
  }
}


test.java
public class Test {
  public static void main ( String[] args ){
    try {
      //假設 MySQL server 發現無法連結!
      throw new MyException("MySQL Server 發現無法連結: ", 3306);
    } catch ( MyException e ){
      System.out.println(e);
      System.out.println( "port: " + e.getPort() );
    }
  }
}


run.bat
del *.class
javac *.java
java -cp . Test
pause



老師範例程式碼五: ( assert:斷言)
test.java
public class Test {
  public static void main(String [] args) {
    boolean b1 = true;
    assert b1==true; 
    b1 = false;
    try {
      assert b1;
//    } catch (AssertionError e) {
//    } catch (Exception e) {
    } catch (Error e) {
      System.out.println("try catch 捉到錯誤: " + e);
    }
  }
}

run.bat
del *.class
javac *.java
java -ea -cp . Test
paus

老師範例程式碼六: ( assert:斷言的延伸,後面可加冒號:再帶上字串。)
test.java
public class Test {
  public static void main(String [] args) {
    int age =17;
    assert age>=18: "我以為妳18歲了..." +age;    
//可在後面加上冒號:若不符合 assert,則會秀後面的字串。
  }
}

run.bat
del *.class
javac *.java
java -ea -cp . Test
pause


2.JSP 的 try...catch
請參考JSP課本的第12章 P.12-5 ~ P.12-6
程式碼:trycatch.jsp
<%@ page contentType="text/html; charset=UTF-8"
  import="java.io.*"%>
<HTML>
<HEAD>
<TITLE>try-catch區塊的使用</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>try-catch區塊的使用</FONT>
</CENTER>
<HR><P></P>
<%
int a = 10, b = 0, c;
try{
c = a / b; //此敘述將產生除以零的例外
}
catch(Exception e){
out.println(e.toString());
}
finally{
out.println("<BR>這裡一定會被執行");
}
%>
</BODY>
</HTML>



3.Servlet & JSP
a.MVC
Model....View....Controller


b.Servlet:一般都作為 Model。在 server 端的模型,可重複使用。

c.JSP:一般都作為 View。顯示給 client 端看的。

d.JavaBean:一般都作為 Controller。在 server 端作控制。


4. Servlet 要設定環境變數
a. 因為Servlet 需要
import javax.servlet.*;
import javax.servlet.http.*;
,所以要再加一個環境變數在 CLASSPATH 裡面。



5. Java2 Servlet
請參考 Java2 P.496 ~
a. 修改 web.xml 檔案中的 <servelt-mapping> 中 url 的路徑,如下圖。

b. 修改 Sample1.java ~ Sample8.java 的超連結路徑,如下圖。

No comments: