文字方塊:

 

 

 

 

JAVA 風雲再起

資訊教育中心陳志文、謝祿適、林芳白

    曾幾何時,專善物件導向(OO)的JAVA,已悄悄的跨入INTERNET,不再是JAVA SCRIPT,亦不再是JAVA APPLET,他不但繼承了JAVA跨平台的 SUPER 特性,也把目標鎖了 ASP & PHP ,OO物件式的撰寫, 不但具有前端動態的JAVA SERVER PAGE(JSP) ,更具有後端快速安全的 SERVLET,若再加上BEAN,那真是風雲再起......。它的特性如下(和時下的ASP 和 PHP相比)

1.安裝容易,並且所有的支援多是FREE(NO MONEY)

2.真正的跨平台,而且是完全跨平台,提昇程式的可攜性

3.程式的執行經過Compile,快速並且有效率

4.物件式的架構,讓程式撰寫輕而易舉,提高程式的可讀性

5.完全支援後端資料庫,JDBC & ODBC,使用真是方便

你還在猶豫嗎?請趕快連上http://java.sun.com ,一窺究竟吧!

1.安裝tomcat-3.2.1 (湯姆的貓 JSP & SERVLET ENGINE)

  http://java.sun.com/products/jsp/download.html==>下載jakarta-tomcat-3.2.1.zip

  解壓縮到d:\jakarta-tomcat

  進入jakarta-tomcat\bin修改start.bat

  加入set TOMCAT_HOME=d:\jakarta-tomcat

      set JAVA_HOME=d:\jdk1.3

  執行start.bat 即可驅動(MS-DOS模式)....................................

  jsp實體根目錄=>d:\jakarta-tomcat\webapps\Root\

  修改以上路徑和檔案=>d:\jakarta-tomcat\conf\server.xml

  (例如==> http://163.15.102.142:8080/test.jsp)

  SERVLET實體根目錄=>d:\jakarta-tomcat\webapps\Root\WEB-INF\classes\

   http://163.15.102.142:8080/servlet/檔案名稱

  (例如==> http://163.15.102.142:8080/servlet/test)

===========================================================================

2.安裝jdk1.3   ==> (complie java for .java-->.class)

  http://java.sun.com/products/  ==>下載J2sdk_3_0-win.exe

  解壓縮 & SETUP 到 ==>  d:\jdk1.3

===========================================================================

3.安裝jsdk2.0  ==> (complie java for servlet)

http://java.sun.com/docs/books/tutorial/servlets/servletrunner/server-start.html#config

  解壓縮到==>   d:\jsdk2.0

===========================================================================

4.安裝mm.mysql.jdbc.2.0 (to RUN mysql for java jdbc)

  http://www.mysql.com/downloads/api-jdbc.html

  解壓縮到 ==>  d:\mm.mysql.jdbc.2.0 即可

===========================================================================

5.安裝mysql  (to RUN mysql for java odbc)

  http://www.mysql.com/downloads/mysql-3.23.html

  解壓縮到 & 執行setup ==> d:\mysql 

===========================================================================

6.設定autoexec.bat

內容如下:

PATH=%PATH%;d:\jdk1.3\bin;d:\jsdk2.0\bin

SET LASSPATH=d:\mm.mysql.jdbc-2.0;d:\jdk1.3\lib\tools.jar;

d:\jsdk2.0\lib\jsdk.jar;d:\jakarta-tomcat\lib;d:\jakarta-tomcat\webapps

測試程式舉例


7. JSP FOR EXAMPLE

(一) 雙迴圈測試執行時間===> 存成test.jsp

  <%@page import="java.util.*"%>

  <%@page contentType="text/html;charset=Big5"%>

  <%

  Date d1=new Date();

  String now1=d1.toString();

  int j=299;

  long k=1;

  for (int i = 1;i <= 100;i++)

  {

      for (int mm = 1;mm <= 100001;mm++)

     {

        k=j+i+k+mm;

     }

  }

  Date d2=new Date();

  String now2=d2.toString();

  out.print("開始時間:"+now1+"<p>");

  out.print("結束時間"+now2+"<p>");

  %>

=============================================================

(二) 資料庫SELECT ==>存成test1.jsp

  <%@page import="java.sql.*"%>

  <%@page import="java.util.Date"%>

  <%@page contentType="text/html;charset=Big5"%>

  <%

   Date d1=new Date();

   String now1=d1.toString();

   String driver   = "org.gjt.mm.mysql.Driver";

   String url      = "jdbc:mysql://163.15.102.142/資料庫名稱";

   String user     = "帳號";

   String password = "密碼";

   Class.forName(driver);

   Connection con = DriverManager.getConnection(url,user,password);

   Statement  smt = con.createStatement();

   String sql = "select * from 資料表";

   ResultSet rs = smt.executeQuery(sql);

   while(rs.next())

   {

   out.print(rs.getFloat(1)+rs.getString(2)+rs.getString(3)+rs.getString(4)+"<br>");

   }

   Date d2=new Date();

   String now2=d2.toString();

   out.print("JSP開始時間:"+now1+"<p>");

   out.print("JSP結束時間"+now2+"<p>");

  %>

=============================================================

8.SERVLET FOR EXAMPLE ==> 存成 test.java

 (一) 九九乘法表 ==> 存成 test.java (必須經過 compile 再放入SERVLET根目錄)

  import java.io.*;

  import java.text.*;

  import java.util.*;

  import javax.servlet.*;

  import javax.servlet.http.*;

  public class a992 extends HttpServlet

  {

    public void doGet(HttpServletRequest req, HttpServletResponse res)

           throws ServletException, IOException

   {

        res.setContentType("text/html; charset=Big5");

        ServletOutputStream sos = res.getOutputStream();

        PrintWriter pw = new PrintWriter(sos,true);

        pw.println("九九乘法表<br>");

      for (int a=1;a<=9;a++)       {

          

      for (int b=1;b<=9;b++)       {

           int c=a*b;

           pw.print(a+"*"+b+"="+c+"\t");

      } 

          

      pw.println("<br>");

        }

    }

  }

=============================================================

 (二) 資料庫SELECT ==>存成test1.java(必須經過 compile 再放入SERVLET根目錄)

   import java.io.*;

   import java.sql.*;

   import javax.servlet.*;

   import javax.servlet.http.*;

   public class test16 extends HttpServlet

  {

  public void doGet(HttpServletRequest req, HttpServletResponse res)

  throws ServletException, IOException

  {

     String sql = "select * from 資料表";

     Connection con = null;

     Statement statement = null;

     ResultSet rs = null;

     res.setContentType("text/html; charset=Big5");

     ServletOutputStream sos = res.getOutputStream();

     PrintWriter pw = new PrintWriter(sos,true);

     try

        {

         Class.forName("org.gjt.mm.mysql.Driver");

         con = riverManager.getConnection("jdbc:mysql://

                                  163.15.102.142:3306/資料庫名稱?user=帳號&password=密碼");

         statement = con.createStatement();

         rs = statement.executeQuery(sql);

         ResultSetMetaData rsmd = rs.getMetaData();

         int colCount = rsmd.getColumnCount();

         pw.println("<html>");

         pw.println("<head><title>book data base</title></head>");

         pw.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=big5\">");

         pw.println("<body>");

         pw.println("<table cellspacing=10>");

         pw.println("<tr>");

         for(int i =1; i <= colCount; i++)

            pw.println("<th>"+rsmd.getColumnLabel(i));

         pw.println("</tr>");

         while (rs.next())

            {

             pw.println("<tr>");

               for( int i = 1; i <=colCount; i++)

                 {

                   pw.println("<td>");

                   Object obj = rs.getObject(i);

                   if (obj != null) pw.println(obj.toString());

                   else pw.println("&nbsp;");

                  }

               pw.println("</tr>");

             }

          pw.println("</table>");

          pw.println("</body>");

          pw.println("</html>");

        }

        catch (ClassNotFoundException e)

           {pw.println("無法載入資料庫: "+e.getMessage());}

        catch (SQLException e)

           {pw.println("SQLException."+e.getMessage());}

        finally

           {

              try

                 { if (con != null) con.close();}

              catch (SQLException sqle) {}

            }

     }

  }


 

安裝Tomcat成為NT的SERVICE(以tomcat 3.2.1為例):

1.由http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.1/bin/win32/i386/下載 jk_nt_service.exe

2.修改jakarta-tomcat\conf子目錄下的 wrapper.properties 如下

    更改 wrapper.tomcat_home 後面的敘述為tomcat的目錄如 d:\jakarta-tomcat

    更改 wrapper.java_home 後面的敘述為 Java 的根目錄如 c:\jdk1.3

    加上 wrapper.class_path=d:\mm.mysql.jdbc-2.0pre5\

3.執行jk_nt_service -I <name of service> <path to updated wrapper properties>

    <name of service> 是指一沒有空白字元的服務名稱如 Jakarta

    <path to updated wrapper properties> 為 wrapper.properties 檔所在的完整路徑名稱    (而且系統服務將會檢查是否存在這個檔)

    例如一個實際的範例命令如下 :

        jk_nt_service -I Jakarta wrapper.properties 或者

        jk_nt_service.exe -I jakrta D:\jakarta-tomcat\conf\wrapper.properties

4.啟動Tomcat做為系統服務

    命令列執行方式: net start <服務名稱> (e.g. net start Jakarta)

    圖形介面:在系統管理工具(windows2000,NT則為控制台)的服務選項,反白jakarta的服         務名稱,選擇啟動。

5.停止Tomcat做為系統服

    命令列執行方式: net stop <服務名稱> (e.g. net stop Jakarta)

    圖形介面:在系統管理工具(windows2000,NT則為控制台)的服務選項,反白jakarta的服         務名稱,選擇停止。

 

整合Tomcat及IIS(以tomcat 3.2.1為例):

    一般而言IIS是無法執行Serverlet 及 JSP 的。要藉著設定IIS及使用Tomcat redirector plugin 來使得 IIS 由80埠可向 Tomcat 提出 Serverlet 及 JSP 的服務需求。

 

一、文件說明及假定:

    當你安裝好 Tomcat 之後應該有以下的目錄:

    conf 放置 Tomcat 設定檔的目錄

    webapps 放置範例應用程式目錄

    bin 放置web server plugins 的目錄

   

    以下的文件將假定 Tomcat 是安裝在 d:\jakarta-tomcat

    worker目錄則是 Tomcat 處理從 IIS  接手過來的工作目錄。

 

二、系統需求:

        Windows NT SP4/6/6/6aWindows98Windows 2000

        IIS4/IIS5/PWS4

        Tomcat3.2

 

三、安裝

Tomcat 重導器(redirector)需要三個檔案:

  1. isapi_redirect.dll – 這是 IIS 伺服器的 plugin,你可以使用由Tomcat事先編譯好的,或是自行重新編譯。
  2. workers.properties – 這個檔案是用來描述Tomcat 工作主機及連接埠。在conf目錄中有提供一個範例檔
  3. uriworkermap.properties – 這個檔案是用來對映(maps) URL-Path  模型(patterns) Tomcat工作主機,在conf目錄中有提供一個範例檔

安裝過程包括以下幾個部份:

  1. 設定 ISAPI 重導器到預設的範例並檢查IISservlets的狀況。
  2. 增加更多的設定

設定 ISAPI 重導器

本文中將假定 isapi_redirect.dll 是放在以下的位置 c:\jakarta-tomcat\bin\win32\i386\isapi_redirect.dll 而且你可以在c:\jakarta-tomcat\conf 創造屬性檔 ( properties ) 

  1. 在系統註冊檔中, 新增一個機碼名稱為
    "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0"
  2. 新增一個字串名稱 extension_uri 並指定其值為 /jakarta/isapi_redirect.dll
  3. 新增一個字串名稱 log_file並指定其值為你的系統簽入記錄 log file  (例如: c:\jakarta-tomcat\logs\isapi.log).
  4. 新增一個字串名稱 log_level 並指定log level 的值 (can be debug, info, error or emerg).
  5. 新增一個字串名稱 worker_file 並指定 workers.properties 檔所在目錄的完整路徑 (例如 c:\jakarta-tomcat\conf\workers.properties)
  6. 新增一個字串名稱 worker_mount_file並指定uriworkermap.properties 檔的完整路徑 (例如 c:\jakarta-tomcat\conf\uriworkermap.properties)
  7. 使用 IIS管理終端機, 增加一個新的虛擬目錄。這個虛擬目錄必須是jakarta. ,他是真實路徑必須是放置isapi_redirect.dll的目錄 (在本文的例子是 c:\jakarta-tomcat\bin\win32\i386)。我們創造新的虛擬目錄並指定它為可執行指令。
  8. 使用IIS管理介面增加 isapi_redirect.dll 做為網站篩選器。 (命名為 jakarta)如果是win98則請執行 c:\jakarta-tomcat\bin\win32\i386\isapi_redirect.dll. 因為在win98PWS,你必須使用 regedit 去新增篩選器(Filter DLLs),內容如下: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters. 並在機碼值中輸入 isapi_redirect.dll 的完整路徑。
  9. 重新啟動 IIS (stop + start the IIS service), 確信 jakarta 篩選器是在(costin)Win98下, WINDOWS\SYSTEM\inetsrv 並且執行 PWS /stop (DLL and log 檔是鎖定假如 stop button, PWS 將一直保存 DLLs 在記錄體. )..

重新啟動start Tomcat 並且輸入 http://127.0.0.1/examples/jsp/index.html  系統會出現tomcat的範例網頁。

 

增加附加環境條件

 

 

新增一應用程式

jakarta-tomcat的安裝路徑中找到conf 目錄,其中包含一個 server.xml 檔,在該檔案內容中新增你所要增加的應用程式路徑其相關資訊,例如你要新增的路徑為 Teach_job 時內容如下:

此時在 Jakarta-tomcat 的路徑中的webapps 新增 Teach_job 目錄,並在該目錄下新增 WEB-INF 其下再新增CLASSES的目錄,新增內容 中的relodable為程式修改後是否立即更新,在發展中的程式其值為true,若是已穩定的系統則設為 false,可增加執行效率。

        <Context path="/Teach_job"

                 docBase="webapps/Teach_job"

                 crossContext="false"

                 debug="0"

                 reloadable="true" >

        </Context>

 

 
 


Linux上的JSPJava Servlet 平台

在本篇簡單架設文件中,將以SunJDKApachejakarta-tomcat為例:

工作平台:Redhat7.0+CLE1.0

下載檔案:

1.     SunJDK1.3

http://java.sun.com/jese/1.3/download-linux.html中下載

j2sdk-1.3.1-linux-rpm.bin大約25Mbytes

 

2.     Sunjsdk2.2

http://java.sun.com/product/servlet/download.htm 中下載

請選擇2.2-Final Release下的Download class files

servlet-2_2b.zip大約30K bytes

 

3.     Apachejakarta-tomcat

http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.1/bin中下載

Jakarta-tomcat-3.2.1.tar.gz大約2.7M bytes

 

4.     MySQLJDBC

http://mysql.com/downloads/api-jdbc.html中下載

mm.mysql.jdbc-2.0pre5.tar.gz大約565K bytes

 

安裝

 

1.     root的權限。

2.     執行sh./j2sdk-1.3.1-linux-rpm.bin

回答一些有的沒有的問題,最後會產生j2sdk-1.3.1-linux.rpm

3.     rpm-ihv j2sdk-1.3.1-linux.rpm

4.     mkdir jsdk2_2b

5.     cp jsdk2_2b.zip jsdk2_2b

6.     cd jsdk2_2b

7.     unzip jsdk2_2b.zip

8.     cd

9.     mv jsdk2_2b/opt

10.  cd /opt

11.  tar zxvf /root/jaka-tomcat-3.2.1.tar.gz

12.  tar zxvf /root/mm.mysql.jdbc-1.2c.tar.gz

13.  把下列幾行加入 /etc/profile 最後面

#

# Env.Java

#

PATH=”$PATH:/usr/java/jdk1.3.1/bin”

JAVA_HOME=”/usr/java/jdk1.3.1”

CLASSPATH=”./usr/java/jdk1.3.1/lib/tools.jar:/opt/jsdk2_2b/lib/jsdk.jar”

CLASSPATH=”$CLASSPATH:/opt/mm.mysql.jdbc-2.opre5/”

 

Export PATH CLASSPATH JAVA_HOME

 

#

# Env.Tomcat

#

TOMCAT_HOME=”/opt/jaka-tomcat-3.2.1”;export TOMCAT_HOME

 

14.  logout後重新用root login

15.  cd /opt/jaka-tomcat-3.2.1/bin

16.  ./startup.sh 應該可以看到如下的畫面

./startup.sh應該可以看到如下的畫面

[root@home bin]# ./startup.sh 就可以看到jakarta-tomcat8080埠啟動HttpConnectionHandler on 8080Ajp12ConnectionHandler on 8007

 

17.  找一台有browser的電腦,打入http://server-ip:8080/examples/jsp,如果你見到湯姆貓的畫面,則大功告成。

 

促成Tomcat Apache 同心協力分工合作

        Apach 負責靜態文件服務(如htmlgif),而Tomcat 負責動態文件(如資料庫),各擅所長,分工合作。步驟如下:

 

1.cp mod_jserv.so /usr/lib/apache      註:或是你系統上apache放置程式庫的目錄

2.cp /usr/local/Jakarta-tomcat-3.2.1/conf/tomcat-apache.conf  /hoem/httpd/conf/. 

3.vi /home/httpd/conf/httpd.conf

        加入 include /home/httpd/conf/tomcat-apache.conf

4.在瀏覽器上,打入http://server-ip/examples/jsp , 如果你見到湯姆貓的畫面,則大功告成。

 

Linux開機後自動執行tomcat

/etc/rc.d/rc.local 加入以下幾行即可

#

# start Tomcat

#

export PATH=$PATH:/usr/java/jdk1.3.1/bin

export JAVA_HOME=/usr/java/jdk1.3.1

export CLASSPATH=/usr/java/jdk1.3.1/lib/tools.jar:/hdd-d/jsdk2.0/lib/jsdk.jar

export CLASSPATH=$CLASSPATH:/hdd-d/mm.mysql.jdbc-2.0pre5/

export TOMCAT_HOME=/usr/local/jakarta-tomcat-3.2.1

/usr/local/jakarta-tomcat-3.2.1/bin/startup.sh