当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

程序片[Java编程]

赞助商链接



  本文“程序片[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
程序片实际要比NameSender.java简单一些.这部份是由于很简单便可发出一个GET恳求.此外,也没必要等候答复信息.目前有两个字段,而非一个,但大家会发现很多程序片都是熟习的,请对比NameSender.java.

//: NameSender2.java
// An applet that sends an email address
// via a CGI GET, using Java 1.02.
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;

public class NameSender2 extends Applet {
  final String CGIProgram = "Listmgr2.exe";
  Button send = new Button(
    "Add email address to mailing list");
  TextField name = new TextField(
    "type your name here", 40),
    email = new TextField(
    "type your email address here", 40);
  String str = new String();
  Label l = new Label(), l2 = new Label();
  int vcount = 0;
  public void init() {
    setLayout(new BorderLayout());
    Panel p = new Panel();
    p.setLayout(new GridLayout(3, 1));
    p.add(name);
    p.add(email);
    p.add(send);
    add("North", p);
    Panel labels = new Panel();
    labels.setLayout(new GridLayout(2, 1));
    labels.add(l);
    labels.add(l2);
    add("Center", labels);
    l.setText("Ready to send email address");
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(send)) {
      l2.setText("");
      // Check for errors in data:
      if(name.getText().trim()
         .indexOf(' ') == -1) {
        l.setText(
          "Please give first and last name");
        l2.setText("");
        return true;
      }
      str = email.getText().trim();
      if(str.indexOf(' ') != -1) {
        l.setText(
          "Spaces not allowed in email name");
        l2.setText("");
        return true;
      }
      if(str.indexOf(',') != -1) {
        l.setText(
          "Commas not allowed in email name");
        return true;
      }
      if(str.indexOf('@') == -1) {
        l.setText("Email name must include '@'");
        l2.setText("");
        return true;
      }
      if(str.indexOf('@') == 0) {
        l.setText(
          "Name must preceed '@' in email name");
        l2.setText("");
        return true;
      }
      String end = 
        str.substring(str.indexOf('@'));
      if(end.indexOf('.') == -1) {
        l.setText("Portion after '@' must " +
          "have an extension, such as '.com'");
        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";
      // 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());
        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.net.*;
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(
          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);
    return true;
  }
} ///:~

URL类的最大的特点就是有效地保护了我们的安全.可以同一个Web服务器成立衔接,毋需知道幕后的任何东西.
  以上是“程序片[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 成立窗口和程序片
  • 基本程序片(java)
  • 程序片的测试
  • 程序片
  • NameSender程序片
  • 程序片的范围
  • java程序片的所长
  • 用Java 1.1 AWT制作窗口和程序片
  • <b>固有办法与程序片的注意事项</b>
  • Java程序片和CORBA
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .