[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] ちゃっとApplet-Servlet
-----------------------------------------------------------
えんどう@ServletとJSP入門中 です。
Applet-Servlet 通信のサンプルを作るという名目で、
超ダサダサ版のちゃっとモドキを作ったので投稿します。
このサンプルでは、自分が書き込んだタイミングで
それまでのサーバー側の全部の行が返信されます。(ださー)
Perl CGI とかだと、タイマーで一定時間ごとにリフレッシュして
全ページ書き直したりということをやるみたいですが、
Java でエレガントにやろうとすると、
RMI を使ってクライアント側のメソッドをいんぼけーしょんする
とかになるんでしょうか>ちゃっとのえらいひと
// Selvlet と通信するアプレット
// SevltetApplet.java
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.net.URLConnection;
import java.io.DataOutputStream;
import java.io.DataInputStream;
public class ServletApplet extends Applet {
private String servleturl = null;
private TextField field_ = new TextField(); // メッセージ入力
private TextArea area_ = new TextArea(); // サーバーの返信
public ServletApplet() {
// GUI 構築
this.setLayout( new BorderLayout() );
field_.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
String message = e.getActionCommand(); // 入力文字列
field_.setText(""); // クリアする
try {
URL url = new URL(servleturl);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
DataOutputStream out =
new DataOutputStream(conn.getOutputStream());
out.writeUTF(message); // メッセージ送信
out.flush();
out.close();
DataInputStream in =
new DataInputStream(conn.getInputStream());
String reply = in.readUTF(); // 返信
in.close();
area_.setText(reply);
} catch (Exception ex) {
area_.append(ex.toString());
ex.printStackTrace();
}
}
});
this.add(field_, "North");
this.add(area_, "Center");
}
public void init() {
servleturl = getParameter("servleturl"); // <PARAM> タグからServlet URL取得
}
}
// Applet と通信する Selvlet
// MessageLogServlet.java
package endo;
import java.util.Vector;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.servlet.*;
public class MessageLogServlet extends GenericServlet {
private static Vector messages = new Vector();
public void service( ServletRequest req,
ServletResponse res )
throws ServletException, IOException
{
DataInputStream in =
new DataInputStream(req.getInputStream());
String message = in.readUTF(); // アプレットからの送信
messages.addElement(message); // Vector に追加
DataOutputStream out =
new DataOutputStream(res.getOutputStream());
int length = messages.size();
StringBuffer lines = new StringBuffer();
for (int i=0; i<length; i++) {
lines.append(Integer.toString(i + 1)); // メッセージ番号
lines.append(": ");
lines.append(messages.elementAt(i)); // 今までのメッセージ
lines.append('\n'); // 改行
}
out.writeUTF(lines.toString()); // 現在保持しているすべてを返信
out.flush();
out.close();
}
}
---
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)