友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第242章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




        l。setText(〃Portion after '@' must 〃 +  

          〃have an extension; such as '。'〃);  

        l2。setText(〃〃);  

        return true;  

      }  

      // Build and encode the email data:  

      String emailData =   

        〃name=〃 + URLEncoder。encode(  

          name。getText()。trim()) +  

        〃&email=〃 + URLEncoder。encode(  

          email。getText()。trim()。toLowerCase()) +  

        〃&submit=Submit〃;  



                                                                                           563 


…………………………………………………………Page 565……………………………………………………………

      // Send the name using CGI's GET process:  

      try {  

        l。setText(〃Sending。。。〃);  

        URL u = new URL(  

          getDocumentBase(); 〃cgi…bin/〃 +  

          CGIProgram + 〃?〃 + emailData);  

        l。setText(〃Sent: 〃 + email。getText());  

        send。setLabel(〃Re…send〃);  

        l2。setText(  

          〃Waiting for reply 〃 + ++vcount);  

        DataInputStream server =  

          new DataInputStream(u。openStream ());  

        String line;  

        while((line = server。readLine()) != null)  

          l2。setText(line);  

      } catch(MalformedURLException e) {  

        l。setText(〃Bad URl〃);  

      } catch(IOException e) {  

        l。setText(〃IO Exception〃);  

      }   

    }  

    else return super。action(evt; arg);  

    return true;  

  }  

} ///:~  

  

CGI 程序(不久即可看到)的名字是Listmgr2。exe。许多Web 服务器都在Unix 机器上运行(Linux 也越来越 

受到青睐)。根据传统,它们一般不为自己的可执行程序采用。exe 扩展名。但在Unix 操作系统中,可以把 

自己的程序称呼为自己希望的任何东西。若使用的是。exe 扩展名,程序毋需任何修改即可通过 Unix 和Win32 

的运行测试。  

和往常一样,程序片设置了自己的用户界面(这次是两个输入字段,不是一个)。唯一显著的区别是在 

action()方法内产生的。该方法的作用是对按钮按下事件进行控制。名字检查过以后,大家会发现下述代码 

行:  

  

      String emailData =   

        〃name=〃 + URLEncoder。encode(  

          name。getText()。trim()) +  

        〃&email=〃 + URLEncoder。encode(  

          email。getText()。trim()。toLowerCase()) +  

        〃&submit=Submit〃;  

      // Send the name using CGI's GET process:  

      try {  

        l。setText(〃Sending。。。〃);  

        URL u = new URL(  

          getDocumentBase(); 〃cgi…bin/〃 +  

          CGIProgram + 〃?〃 + emailData);  

        l。setText(〃Sent: 〃 + email。getText());  

        send。setLabel(〃Re…send〃);  

        l2。setText(  

          〃Waiting for reply 〃 + ++vcount);  

        DataInputStream server =  

          new DataInputStream(u。openStream());  



                                                                                          564 


…………………………………………………………Page 566……………………………………………………………

        String line;  

        while((line = server。readLine()) != null)  

          l2。setText(line);  

        // 。。。  

  

name 和 email 数据都是它们对应的文字框里提取出来,而且两端多余的空格都用trim()剔去了。为了进入列 

表,email 名字被强制换成小写形式,以便能够准确地对比(防止基于大小写形式的错误判断)。来自每个 

字段的数据都编码为URL 形式,随后采用与 HTML 页中一样的方式汇编GET 字串(这样一来,我们可将Java 

程序片与现有的任何CGI 程序结合使用,以满足常规的 HTML GET 请求)。  

到这时,一些Java 的魔力已经开始发挥作用了:如果想同任何URL 连接,只需创建一个URL 对象,并将地址 

传递给构建器即可。构建器会负责建立同服务器的连接(对 Web 服务器来说,所有连接行动都是根据作为 

URL 使用的字串来判断的)。就目前这种情况来说,URL 指向的是当前Web 站点的 cgi…bin 目录(当前Web 站 

点的基础地址是用 getDocumentBase()设定的)。一旦Web 服务器在URL 中看到了一个“cgi…bin”,会接着 

希望在它后面跟随了cgi…bin 目录内的某个程序的名字,那是我们要运行的目标程序。程序名后面是一个问 

号以及CGI 程序会在QUERY_STRING 环境变量中查找的一个参数字串(马上就要学到)。  

我们发出任何形式的请求后,一般都会得到一个回应的HTML 页。但若使用Java 的URL 对象,我们可以拦截 

自CGI 程序传回的任何东西,只需从 URL 对象里取得一个 InputStream (输入数据流)即可。这是用URL 对 

象的openStream()方法实现,它要封装到一个DataInputStream 里。随后就可以读取数据行,若readLine() 

返回一个null (空值),就表明CGI 程序已结束了它的输出。  

我们即将看到的CGI 程序返回的仅仅是一行,它是用于标志成功与否(以及失败的具体原因)的一个字串。 

这一行会被捕获并置放第二个 Label 字段里,使用户看到具体发生了什么事情。  

  

1。 从程序片里显示一个Web 页  

程序亦可将 CGI 程序的结果作为一个Web 页显示出来,就象它们在普通 HTML 模式中运行那样。可用下述代码 

做到这一点:  

getAppletContext()。showDocument(u);  

其中,u 代表URL 对象。这是将我们重新定向于另一个Web 页的一个简单例子。那个页凑巧是一个CGI 程序 

的输出,但可以非常方便地进入一个原始的HTML 页,所以可以构建这个程序片,令其产生一个由密码保护的 

网关,通过它进入自己Web 站点的特殊部分:  

  

//: ShowHTML。java  

import java。awt。*;  

import java。applet。*;  

import java。*;  

import java。io。*;  

  

public class ShowHTML extends Applet {  

  static final String CGIProgram = 〃MyCGIProgram〃;  

  Button send = new Button(〃Go〃);  

  Label l = new Label();  

  public void init() {  

    add(send);  

    add(l);  

  }  

  public boolean action (Event evt; Object arg) {  

    if(evt。target。equals(send)) {  

      try {  

        // This could be an HTML page instead of  

        // a CGI program。 Notice that this CGI   

        // program doesn't use arguments; but   

        // you can add them in the usual way。  

        URL u = new URL(  



                                                                                        565 


…………………………………………………………Page 567……………………………………………………………

          getDocumentBase();   

          〃cgi…bin/〃 + CGIProgram);  

        // Display the output of the URL using  

        // the Web browser; as an ordinary page:  

        getAppletContext()。showDocument(u);  

      } catch(Exception e) {  

        l。setText(e。toString());  

      }   

    }  

    else return super。action(evt; arg);  
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!