アプレットのURL接続
out.print("val=");
st1=textField1.getText();
out.print(st1);
out.print("&name=");
st2=nameField.getText();
out.print(st2);
package jconnect;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import java.util.*;
/**
* <p>タイトル: </p>
* <p>説明: </p>
* <p>著作権: Copyright (c) 2003</p>
* <p>会社名: </p>
* @author 未入力
* @version 1.0
*/
public class Applet1 extends Applet {
private boolean isStandalone = false;
PrintWriter out;
private Button button1 = new Button();
private TextField textField1 = new TextField();
private TextField nameField = new TextField();
private TextArea textArea1 = new TextArea();
private Label message = new Label();
TextField textFieldID = new TextField();
Label label1 = new Label();
Label label2 = new Label();
//引数値の取得
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//アプレットのビルド
public Applet1() {
}
//アプレットの初期化
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//コンポーネントの初期化
private void jbInit() throws Exception {
button1.setLabel("send");
button1.setBounds(new Rectangle(28, 152, 67, 27));
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
this.setLayout(null);
textField1.setText("3000");
textField1.setBounds(new Rectangle(26, 115, 70, 24));
nameField.setText("Akiko");
nameField.setBounds(new Rectangle(25, 82, 65, 21));
textArea1.setText("textArea1");
textArea1.setBounds(new Rectangle(121, 17, 128, 194));
message.setBackground(Color.white);
message.setText("message");
message.setBounds(new Rectangle(24, 189, 77, 23));
textFieldID.setText("ga");
textFieldID.setBounds(new Rectangle(30, 31, 56, 22));
label1.setText("ゲーム名");
label1.setBounds(new Rectangle(26, 9, 54, 19));
label2.setText("名前、得点");
label2.setBounds(new Rectangle(12, 58, 74, 20));
this.add(textArea1, null);
this.add(textFieldID, null);
this.add(label1, null);
this.add(message, null);
this.add(button1, null);
this.add(textField1, null);
this.add(nameField, null);
this.add(label2, null);
}
//アプレットの情報取得
public String getAppletInfo() {
return "アプレット情報";
}
//引数情報の取得
public String[][] getParameterInfo() {
return null;
}
void button1_actionPerformed(ActionEvent e) {
String st0,st1,st2;
String otxt="";
try{
String myurl="http://www.ccad.sccs.chukyo-u.ac.jp/";
myurl+="cgi-bin/ranking/ranking.cgi";
URL url=new URL(myurl);
//appletと同じサーバーでないと接続できない
//URL url=new URL("http://www.yahoo.co.jp/");
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
//connection.setRequestMethod("PUT");
connection.setDoOutput(true);
if(connection.getDoOutput()) {
System.out.println("connected:"+myurl);
message.setText("connected");
}
else message.setText("connection failed");
out=new PrintWriter(connection.getOutputStream());
out.print("id=");
st0=textFieldID.getText();
out.print(st0);
out.print("&val=");
st1=textField1.getText();
out.print(st1);
out.print("&name=");
st2=nameField.getText();
out.print(st2);
System.out.println("post:"+st0+":"+st1+":"+st2);
out.close();
// ソースの表示
String str;
BufferedReader urlIn;
//次を実行しないと、cgiが実行されない!!!! cgiでprintしなくても同じ
//JDK1.3/1.4も無関係
//しかし、javacでコンパイルすると、以下は無関係!!
System.out.println("top10\n");
urlIn = new BufferedReader(new InputStreamReader(connection.getInputStream()));
//この表示は不要
while ((str = urlIn.readLine()) != null) {
System.out.println(str);
otxt += str+"\n";
}
}catch(IOException exception){
exception.printStackTrace();
}
textArea1.setText(otxt);
}
void close_actionPerformed(ActionEvent e) {
out.close();
}
}
#!/usr/bin/perl
#use strict;
use CGI::Carp qw(fatalsToBrowser);
#定義
{
#
#$ENV{'REQUEST_METHOD'}="GET";
#$ENV{'QUERY_STRING'}="id=ga&name=kita&val=3000";
$date=localtime;
%form={};
$pval="";$pname="";$id="";
$mrg=1;
$lcount=0;
my $postData = &get_PostData;
my $hash_ref = &get_FormData($postData);
my %form = %$hash_ref;
#FORMデータ取得
#print msgfile "form.$postData\n";
$id=$form{'id'};
$pval=$form{'val'};
$pname=$form{'name'};
%temp={};
#idのファイルを開く
open(msgr,$id."rank.txt");
print "Content-Type: text/html\n\n";#ヘダ出力
while(<msgr>){
chomp;
($fval,$fname)=split(/:/);#名前と得点を分離
if($fval<$pval && $mrg==1 ) {#ファイルの値と取得データを比較
push(@temp,"$pval:$pname\n");#取得データを書き出す
print "$pval:$pname\n";
$mrg=0;$lcount++;
}
push(@temp,"$fval:$fname\n");#ファイルのデータをコピー
print "$fval:$fname\n";
$lcount++;
if($lcount >= 10) {last;}#データ数10で終了
}
if (($mrg==1) && ($lcount<10)) {#ファイルのデータ数10以下の場合
push(@temp,"$pval:$pname\n");
print "$pval".':'."$pname\n";
}
close msgr;
open(msgw,">".$id."rank.txt");#ファイルに書き戻す
foreach $val (@temp){
print msgw $val;
}
close msgw;
}
#データを受け取る
sub get_PostData{
my $data;
# GETメソッドの場合
if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
$data = $ENV{'QUERY_STRING'};
# POSTメソッドの場合
} else {
read( STDIN, $data, $ENV{'CONTENT_LENGTH'});
}
return $data;
}
#FORMデータをデコードする
sub uri_decode{
my $str=shift;
$str=~tr/+/ /;
#$str=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)eg;
return $str;
}
#データを記録
sub get_FormData{
my $data=shift;
my @pair=split(/&/,$data);
my %hash;
foreach(@pair){
my($key,$value)=split(/=/);
$hash{&uri_decode($key)}=&uri_decode($value);
}
return \%hash;
}