
                             Java CGI HOWTO 
                                       
: David H. Silber [1]javacgi-document@orbits.com
: [2]־ΰ [3]cwhuang@phys.ntu.edu.tw

   v0.5, 1 December 1998 : 17 December 1998
     _________________________________________________________________
   
   Ľ趨ŷʹʹ Java д CGI ʽԼ
   Java д CGI ʽȻ HOWTO ļĿ Linux ҵϵͳϣ
   ƪرʵض汾 UNIX ϵͳ޹أ
     _________________________________________________________________
   
1. 

     * 1.1 Ԥ֪ʶ
     * 1.2 ļ
     * 1.3 ׼
     * 1.4 The Mailing List
       
2. 趨ŷִ Java CGI ʽ (ƪ)

     * 2.1 ϵͳ
     * 2.2 Java CGI 
     * 2.3 ⿪ԭʼ
     * 2.4 ıĿ¼
     * 2.5 İװ
       
3. 趨ŷִ Java CGI ʽ (ƪ)

4. ִһ Java CGI ʽ

     * 4.1  CGI ģʽִ Java ʽϰ
     * 4.2 ִ Java CGI 
       
5. ʹ Java CGI 

     * 5.1 CGI
     * 5.2 CGI_Test
     * 5.3 Email
     * 5.4 Email_Test
     * 5.5 HTML
     * 5.6 HTML_Test
     * 5.7 Text
       
6. δļƻ

7. 汾޸ļ¼

     * 7.1  0.4  0.5 ޸
     * 7.2  0.3  0.4 ޸
     * 7.3  0.2  0.3 ޸
     * 7.4  0.1  0.2 ޸
     _________________________________________________________________
   
1. 

    Java Ʒʽʽʦûм׵ķȡϵͳĻ 
    Java չ (JDK) ķʽһʽʹöر
   (tokens) ͱ׼ HTML forms/CGI ʽϣ һЩ취
   Կ˷ЩƣҾʵһ֣
   
   дǰεʱ 1996.  Java ļѾкܴĸıˡ Ŀǰ
   иõķִŷ˵ Java ʽ -- ҲӦÿһ
   servlets(?).
   
1.1 Ԥ֪ʶ

   Ҽٶ HTML  CGI һ֪ʶ˽ HTTP ŷ
   ֪ʶ ҲӦ֪д Java ʽЩû壮
   
1.2 ļ

   ĵ°汾ԴӴҵ:
   [4]http://www.orbits.com/software/Java_CGI.html.
   
1.3 ׼

   ᵽ׼°汾 FTP ȡ
   [5]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. ׼ĵ
   SGML ԭʼ
   
   Щ׼ɢ GNU Library General Public License. Ŀ
   Linux HOWTO İȨɢ
   
   ʹñ壬һЩοָ
   [6]http://www.orbits.com/software/Java_CGI.html Աҵ
   Java CGI 
   
   Ѿûʱȥά׼һˡ ˷ǳ
   ϲʽά: [7]javacgi-document@orbits.com
   
1.4 The Mailing List

   Ѿһ majordomo ̳ͨʹñʽǿԻæ
    ż [8]javacgi-request@orbits.com ݰ subscribe ֡
   
2. 趨ŷִ Java CGI ʽ (ƪ)

   һڽ㰲װҵ Java CGI ׼ԼĽܹͣ˽Ϊ
   ᵼʲ ֻ밲װʽ˽Ϊʲᣬֱ [9]趨
   ִ Java CGI ʽ (ƪ)
   
2.1 ϵͳ

   ӦѰװ Java ʽչߵκ UNIX  web ŷϰװ
    ҽװִ apache ŷ Debian Linux ϵͳϣ 㷢
   ŷ̳ͨ. ϸ [10]The Mailing List.
   
   ҵǣJava ִʱڽƺǳԼĹ -- 㽫ʹ
   Java CGI ʽĻҪٶ MB  RAM ŷ
   
2.2 Java CGI 

   дĸͽ Java CGIɴ
   [11]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz ȡ(汾
   ܻı)
   
2.3 ⿪ԭʼ

   һʵĿ¼׼⿪ (㻹ûб׼ĵطҽ
    /usr/local/src) ָ⿪׼:
gzip -dc java_cgi-0.5.tgz | tar -xvf -

   һ java_cgi-0.5 Ŀ¼ ҵطᵽ
    (汾ıˣ͸׼ģ)
   
2.4 ıĿ¼

    Java CGI ʽס һ˵ϣں
   cgi-bin ƽеĿ¼ ҵ apache ŷ趨ʹ /var/www/cgi-bin Ϊ
   cgi-bin Ŀ¼  /var/www/javacgi Ϊ Java CGI ʽĵط
   ܲý Java CGI ʽŽĳһѴڵ CLASSPATH Ŀ¼ 
    Makefile Ӧϵͳãȷ root ǩȻִ make
   install ⽫ Java ʽ޸ java.cgi ָԷϵͳ
   ʽװʵλã ϣӵбĵ HTML 汾Լһ HTML 
   ļ make all
   
2.5 İװ

   ɱ׼װ HTML ļ javacgitest.html, javaemailtest.html Լ
   javahtmltest.html ǰʹ make allǻ Makefile
   ָ WEBDIR Ŀ¼У ǣִ make test 
   javacgitest.html-dist, javaemailtest.html-dist Լ
   javahtmltest.html-dist ǣ
   
   ȷİװȷᣬϣ JAVACGI Ŀ¼Ƴ
   CGI_Test, Email_Test Լ HTML_Test 𣬻д WEBDIR Ŀ¼Ƴ
   javacgitest.html, javaemailtest.html Լjavahtmltest.htmlΪǻ
   ʾӦֻŷ߲ſõʹѶ
   
3. 趨ŷִ Java CGI ʽ (ƪ)

    1.  [12]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. ȡ
       Java CGI ׼(汾ܻı䣮)
    2. ָ⿪׼:
gzip -dc java_cgi-0.5.tgz | tar -xvf -
       (汾ıˣ͸׼ģ)
    3. ޸² java_cgi-0.5 Ŀ¼ Makefile Էϵͳ
    4.  root ݣִ make install ⽫ Java ʽϵͳ
       Ѷװ൵ ϣӵбĵ HTML 汾Լһ
       HTML ļ make all
    5. ȻӦþͿˣ
       
4. ִһ Java CGI ʽ

4.1  CGI ģʽִ Java ʽϰ

    web ŷִ Java ʽҪ:
   
  㲻һִеһִ Java ʽ
  
   ִ Java ִʱ(run-time)еķʽṩʼ
   (ʽִ) һ HTML form ûа취ṩи web ŷ
   
   
  Java ʽûһķȡû
  
   Java ʽÿ豻룮 ( Java ʽ)û C 
   Ե getenv() 
   
4.2 ִ Java CGI 

   Ϊ˴Щѣдһ CGI ָʽṩ Java Ѷ
   
   
  java.cgi ָ
  
   ָ HTTP ŷϣʹõ Java CGI ʽ֮Ļ 
   server ṩȡҪִгʽƣ еĻ
   ۵һݴ浵ȻᣬԼʽƼУ ִ
   Java ִʱ̽
   
   java.cgi ָ趨밲װ [13]ıĿ¼ һ˵
   
   HTML form  java.cgi
  
   ʹ Java CGI ʽ HTML form ķʽָΪ:
<form action="/cgi-bin/java.cgi/CGI_Test" method="POST">

    /cgi-bin/ 㱾ض˵ CGI λִеĿ¼ java.cgi 
    web ִ Java ʽǰˣ  CGI_Test һִе Java ʽ
   Ƶӣ
   
5. ʹ Java CGI 

   ĿǰΪֹ֧ԮҪ -- [14]CGI, [15]Email Լ [16]HTML ڿ
   Ƿֱϴ MIME ʽ -- MIMEin & MIMEout
   
   ҲһЩ֧ԮͲԵ [17]CGI_Test, [18]Email_Test Լ
   [19]HTML_Test İװõģ ҲԼʽʹ
   Щ㣮 [20]Text  Email  HTML Ļ
   
5.1 CGI

  ﷨
  
   public class CGI
   
  
  
   CGI еġCGI Ѷ -- web ŷ趨ĻԼ
   submit ʱ form /ֵ еѶ
   Properties У
   
   λ ``Orbits.net'' װ(package)У
   
  ԱժҪ
     _________________________________________________________________
   
        CGI()         //  
        getNames()    //  ȡƵĴ
        getValue()    //  ȡָƵֵ
     _________________________________________________________________
   
  
  
   CGI_Test.
   
  CGI()
  
   Ŀ
          һ CGI ϵ
          
   ﷨
          public CGI()
          
   
          һ CGI ʱпõ CGI ϱľֲ
          ռУ
          
  getNames()
  
   Ŀ
          гѶӦֵƣ
          
   ﷨
          public Enumeration getNames ()
          
   
          ṩѶӦֵƵб
          
    
          Ƶ Enumeration 
          
  getValue()
  
   Ŀ
          ȡָӦ name  value
          
   ﷨
          public String getValue ( String name )
          
   
          ṩ HTML form  names  values ֮ĶӦ
          
   
          
        name
                ѡļֵ
                
    
          һӦֵ String 
          
5.2 CGI_Test

   ṩܣһʹ CGI Լһȷ Java
   CGI ׼ĲԳʽ
   
  ԱժҪ
     _________________________________________________________________
   
        main()      //  Program main().
     _________________________________________________________________
   
  
  
   [21]CGI.
   
  main()
  
   Ŀ
          ṩ main() 
          
   ﷨
          public static void main( String argv[] )
          
   
           CGI ʽڣֻؿõ/ֵֵб
          
    
          
        argv[]
                 java.cgi ָ崫ĲĿǰδʹã
                
5.3 Email

  ﷨
  
   public class Email extends Text
   
  
  
   ѶϢ Text  add*() ʼרõķ ᣬ
   ѶϢ͵Ŀĵأ
   
   λ ``Orbits.net'' װУ
   
  ԱժҪ
     _________________________________________________________________
   
        Email()      //  
        send()       //  ͳʼѶϢ
        sendTo()     //  ѶϢĿĵ
        subject()    //  趨ѶϢ
     _________________________________________________________________
   
  
  
   Email_Test, Text.
   
  Email()
  
   Ŀ
          һʼѶϢ
          
   ﷨
          public Email()
          
   
          һյѶϢɴ𷽷ɣ
          
   
          Text.
          
  send()
  
   Ŀ
          ͳʼѶϢ
          
   ﷨
          public void send ()
          
   
          ŲͳѶϢĿλַδ趨ж
          
  sendTo()
  
   Ŀ
          ӱѶϢĿĵأ
          
   ﷨
          public String sendTo ( String address )
          
   
           address 뵽ĿĵбУһݵʼĿĵصĿû
          Ƶģ 㽨˹б㽫ܻᳬʼ
          ʹʽ(MTA) ܽܵĴСùļ壮
          
   
          
        address
                ѶϢʹһĿĵأ
                
  subject()
  
   Ŀ
          趨ѶϢ⣮
          
   ﷨
          public void subject ( String subject )
          
   
          趨ʼ Subject: λ гһϣʹ
          һκеĽ
          
   
          
        subject
                Subject: λ֣
                
5.4 Email_Test

   ṩһʹ Email Լһȷ Java CGI ׼
   ĲԳʽ
   
  ԱժҪ
     _________________________________________________________________
   
        main()      //  Program main().
     _________________________________________________________________
   
  
  
   [22]Email.
   
  main()
  
   Ŀ
          ṩ main() 
          
   ﷨
          public static void main( String argv[] )
          
   
           CGI ʽڣؿõ/ֵֵб Ҳ
          б͵ Email ָλַ
          
    
          
        argv[]
                 java.cgi ָ崫ĲĿǰδʹã
                
5.5 HTML

  ﷨
  
   public class HTML extends Text
   
  
  
   ѶϢ Text  add*()  HTML רõķ ᣬ
   ѶϢ͵Ŀĵأ
   
   Ŀǰûдȷбķȷ˳ʹã ˳
   ʽ߱ȷûΥ HTML ﷨
   
   λ ``Orbits.net'' װУ
   
  ԱժҪ
     _________________________________________________________________
   
        HTML()                  //  
        author()                //  趨ļߵ
        definitionList()        //  ʼһб
        definitionListTerm()    //  ڶбһĿ
        endList()               //  б
        listItem()              //  бһĿ
        send()                  //  ͳ HTML ѶϢ
        title()                 //  趨ļ
     _________________________________________________________________
   
  
  
   HTML_Test, Text.
   
  HTML()
  
   Ŀ
          һ HTML ѶϢ
          
   ﷨
          public HTML()
          
   
          һյѶϢ HTML ɣ
          
   
          Text.
          
  author()
  
   Ŀ
          趨ļߵ֣
          
   ﷨
          public void author ( String author )
          
   
          ļ趨Ϊ author
          
   
          
        author
                ΪѶϢߵ֣
                
   
          title().
          
  definitionList()
  
   Ŀ
          ʼһб
          
   ﷨
          public void definitionList ()
          
   
          ʼһб һбһرббеÿһ
           Ŀ   γɵģ һбʼӦ(
          )һĿ/Լһ endList() ĺУ ע⣬Ŀǰ
          ǳ״ģ
          
   
          definitionListTerm(), endList(), listItem().
          
  definitionListTerm()
  
   Ŀ
          ڶбһĿ
          
   ﷨
          public void definitionListTerm ()
          
   
          ڶбһĿ ĿǰбĿݵӦڴ˷
          ᲢڶӦ listItem ǰ룮
          
   
          definitionList(), listItem().
          
  endList()
  
   Ŀ
          һб
          
   ﷨
          public void endList ()
          
   
          һбע⣬Ŀǰбǳ״ģ
          
   
          definitionList().
          
  listItem()
  
   Ŀ
          бһĿ
          
   ﷨
          public void listItem ()
          
          public void listItem ( String item )
          
          public boolean listItem ( String term, String item )
          
   
          бһĿ ʹõһʽĿǰбĿӦ
          ˷Ტκбǰ룮 ڵڶ
          ʽУitem ֱָΪĲᱻ룮 ʽ
          ǶбרòͬʱָбĿ붨ֲݣ
          
   
          
        item
                бĿ֣
                
        term
                ˶бĿݵ֣
                
   
          definitionList(), definitionListTerm(), endList().
          
  send()
  
   Ŀ
          ͳ HTML ѶϢ
          
   ﷨
          public void send ()
          
   
          ͳ HTML ѶϢ
          
  title()
  
   Ŀ
          趨ļ֣
          
   ﷨
          public void title ( String title )
          
   
          趨ļı֣
          
   
          
        title
                ļ֣
                
   
          author().
          
5.6 HTML_Test

   ṩһʹ HTML Լһȷ Java CGI ׼
   ĲԳʽ
   
  ԱժҪ
     _________________________________________________________________
   
        main()      //  Program main().
     _________________________________________________________________
   
  
  
   [23]HTML.
   
  main()
  
   Ŀ
          ṩ main() 
          
   ﷨
          public static void main( String argv[] )
          
   
           CGI ʽڣһ HTML ļпõ/ֵ
          ֵбÿһ/ֵʾһбԪ
          
    
          
        argv[]
                 java.cgi ָ崫ĲĿǰδʹã
                
5.7 Text

  ﷨
  
   public abstract class Text
   
  
  
   Ϊ [24]Email  [25]HTML Ļ ѶϢԴķ
   ķɲţ
   
   λ ``Orbits.net'' װУ
   
  ԱժҪ
     _________________________________________________________________
   
        Text()            //  
        add()             //  ֵ
        addLineBreak()    //  з
        addParagraph()    //  ֶη
     _________________________________________________________________
   
  
  
   [26]Email, [27]HTML.
   
  add()
  
   Ŀ
          ڴĿм֣
          
   ﷨
          public void add ( char addition )
          
          public void add ( String addition )
          
          public void add ( StringBuffer addition )
          
   
          Ŀм addition
          
   
          
        addition
                Ŀ֣
                
   
          addLineBreak(), addParagraph().
          
  addLineBreak()
  
   Ŀ
          ǿĿǰλ÷У
          
   ﷨
          public void addLineBreak ()
          
   
          Ŀǰλüһзţ
          
   
          add(), addParagraph().
          
  addParagraph()
  
   Ŀ
          ʼһµĶ䣮
          
   ﷨
          public void add ()
          
   
          ĿǰλʼһµĶ䣮
          
   
          add(), addLineBreak().
          
6. δļƻ

     * Email :
       
        Email( int capacity )
                ֪ٿռѶϢʱ
                
        sendTo( String [] address )
                ԭʼʼĿĵصб
                
        sendCc( String address )
                һƵʼĿĵأ
                
        sendCc( String [] address )
                ӸƵʼĿĵصб
                
        sendBcc( String address )
                һ Blind Carbon-Copy ĵʼĿĵأ
                
        sendBcc( String [] address )
                 Blind Carbon-Copy ĵʼĿĵб
                
     * HTML :
       
        HTML( int capacity )
                ֪ٿռѶϢʱ
                
        public void unorderedList()
                ʼһб
                
        public void orderedList()
                ʼһб
                
        public void directoryList()
                ʼһĿ¼б
                
        public void menuList()
                ʼһѡб
                
        void anchor( String anchorName )
                ָһê(anchor)
                
        void link( String url, String text )
                ָһᣮ
                
        void applet( String url, String altText )
                ָһ applet ᣮ
                
     * ״ HTML б
     * Ӵǿ HTML бʽ˳
     * ϵĵλӦ Makefile 趨
     * ȥڴ GET ϴʱ֮ٵĿ/ֵԣ
     *  CGI ʵ java.util.Enumeration ṩƣ
     * һ Test ʹñ׼еÿ
     * ˵ CGI_Test, Email_Test  HTML_Test ໥ṩĿ
       Ľԣ
     * ˵βʹñ׼ÿһ磮
       
7. 汾޸ļ¼

7.1  0.4  0.5 ޸

     * ļעԷӦͳİ汾
       
7.2  0.3  0.4 ޸

     *  HTML ṩĻܣ
     *  HTML_Test  javahtmltest.html-dist
     *  HTML б
       
7.3  0.2  0.3 ޸

     *  Text  Email  HTML Ҳ룬ʱֻһСݶѣ
     * ͬװУ Ҫ Orbits.net.*֧Ԯõ
       Text  Orbits.text.Text
     *  CGItest Ϊ CGI_Test
     *  Email_Test 
       
7.4  0.1  0.2 ޸

     * һݴ浵жǿ Java  CGI
        java.cgi ѱ޸ģ
     *  javacgitest.html ļΪ׼һݣ
     * װʱ make ޸ĵĵȫԽβ -dist 

References

   1. mailto:javacgi-document@orbits.com
   2. http://www.phys.ntu.edu.tw/~cwhuang/pub/
   3. mailto:cwhuang@phys.ntu.edu.tw
   4. http://www.orbits.com/software/Java_CGI.html
   5. ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz
   6. http://www.orbits.com/software/Java_CGI.html
   7. mailto:javacgi-document@orbits.com
   8. mailto:javacgi-request@orbits.com
   9. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#install-short
  10. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#mailing-list
  11. ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz
  12. ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz
  13. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#make-programs
  14. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#cgi-class
  15. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-class
  16. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#html-class
  17. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#cgi-test-class
  18. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-test-class
  19. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-test-class
  20. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#text-class
  21. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#cgi-class
  22. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-class
  23. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#html-class
  24. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-class
  25. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#html-class
  26. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#email-class
  27. file://localhost/tmp/zh-sgmltools.22000/Java-CGI-HOWTO.txt.html#html-class
