ASHでは、技術評論社のSoftwareDesign誌(2002年6月号)の「ゼロからはじめるHTTP+WebDAVプログラミング」を執筆しました。
このページでは、執筆時のプログラムを公開しています。コピー&ペーストすることにより利用できます。
プログラムの詳細は、技術評論社のSoftwareDesign誌を読んでください。
なお、記事についての質問などがありましたら、ASHの掲示板でも受け付けます。
下記のソースを一括ダウンロードできます。 ソースファイルは、LZH圧縮形式と、tar+gzip圧縮形式で、ダウンロード可能となっています。 LZH圧縮形式には、Shift_JISコードのソースが格納されています。 tar+gzip圧縮形式には、EUC-JPコードのソースが格納されています。
sd_http.lzh(LZH圧縮形式のダウンロード) sd_http.tar.gz(tar+gzip圧縮形式のダウンロード) |
JavaのSoketクラスを使って、指定したURLのHTTPヘッダとHTMLソースを表示するプログラムのソースです。
| Http.java |
|---|
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
import java.io.*;
import java.net.*;
/** Httpプロトコルによるソース表示 **/
public class Http {
public static void main(String args[]) {
String url;
String host;
int port;
String proxyHost;
int proxyPort;
Socket sock;
BufferedReader sockin;
BufferedWriter sockout;
String str;
try {
// プロキシの設定
proxyHost = "";
proxyPort = 8080;
// URLの設定
if (proxyHost.equals("")) { // プロキシを使わない場合
url = "/";
host = "www.ash.jp";
port = 80;
} else { // プロキシを使う場合
url = "http://www.ash.jp/";
host = proxyHost;
port = proxyPort;
}
// ソケットの作成
sock = new Socket(host, port);
sockin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
// HTTPリクエスト送信
sockout.write("GET " + url +" HTTP/1.1\r\n");
sockout.write("Host: " + host + "\r\n");
sockout.write("Connection: close\r\n");
sockout.write("\r\n");
sockout.flush();
// HTTPレスポンス受信
while ((str = sockin.readLine()) != null) {
System.out.println(str);
}
// ソケットのクローズ
sockout.close();
sockin.close();
sock.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
JavaのHttpURLConnectionクラスを使って、指定したURLのHTTPヘッダとHTMLソースを表示するプログラムのソースです。
| HttpURL.java |
|---|
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
import java.io.*;
import java.net.*;
/** Httpプロトコルによるソース表示(HttpURLConnectionクラス利用) **/
public class HttpURL {
public static void main(String args[]) {
String url;
String proxyHost;
int proxyPort;
URL urlObj;
HttpURLConnection urlCon;
BufferedReader urlIn;
String str;
try {
// プロキシの設定
proxyHost = "";
proxyPort = 8080;
// URLオブジェクトの作成
url = "http://www.ash.jp/";
if (proxyHost.equals("")) { // プロキシを使わない場合
urlObj = new URL(url);
} else { // プロキシを使う場合
urlObj = new URL("http", proxyHost, proxyPort, url);
}
// URL接続
urlCon = (HttpURLConnection)urlObj.openConnection();
urlCon.setRequestMethod("GET");
urlIn = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
// HTMLソースの表示
while ((str = urlIn.readLine()) != null) {
System.out.println(str);
}
// URL切断
urlIn.close();
urlCon.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
HttpClient.java、HttpIClient.javaに対して、"Hello World!"という文字列と、123という整数の値を返却するサーブレットのソースです。
| HttpServer.java |
|---|
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** HTTP通信サーブレット **/
public class HttpServer extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
DataOutputStream out;
res.setContentType("application/octet-stream");
out = new DataOutputStream(res.getOutputStream());
out.writeUTF("Hello World!");
out.writeInt(123);
out.close();
}
}
|
HttpServer.javaから、"Hello World!"という文字列と、123という整数の値を受け取り表示するアプレットのソースです。
| HttpClient.java |
|---|
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
/** HTTP通信クライアント(アプレット) **/
public class HttpClient extends Applet {
String msg;
int num;
public void init() {
HttpURLConnection con;
DataInputStream in;
String url = "http://localhost/servlet/HttpServer";
URL urlObj;
try {
// HTTP接続
urlObj = new URL(url);
con = (HttpURLConnection)urlObj.openConnection();
con.setRequestMethod("GET");
con.connect();
in = new DataInputStream(con.getInputStream());
// HTTPデータの設定
msg = in.readUTF();
num = in.readInt();
// URL切断
in.close();
con.disconnect();
} catch (Exception ex) {
msg = ex.getMessage();
}
}
public void paint(Graphics g) {
g.drawString(msg, 10, 30);
g.drawString(Integer.toString(num), 10, 50);
}
}
|
HttpServer.javaから、"Hello World!"という文字列と、123という整数の値を受け取り表示するiアプリのソースです。
| HttpIClient.java |
|---|
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import javax.microedition.io.*;
import java.io.*;
/** HTTP通信クライアント(iモード) **/
public class HttpIClient extends IApplication {
MainCanvas mc; // メインキャンバス
public void start() {
mc = new MainCanvas(); // メインキャンバスの作成
Display.setCurrent(mc); // メインキャンバスを画面に表示
}
}
class MainCanvas extends Canvas {
String msg;
int num;
public MainCanvas() {
HttpConnection con;
DataInputStream in;
String url = "http://localhost/servlet/HttpServer";
try {
// HTTP接続
con = (HttpConnection)Connector.open(url, Connector.READ, true);
con.setRequestMethod("GET");
con.connect();
in = new DataInputStream(con.openInputStream());
// HTTPデータの設定
msg = in.readUTF();
num = in.readInt();
// URL切断
in.close();
con.close();
} catch (Exception ex) {
msg = ex.getMessage();
}
}
public void paint(Graphics g) {
g.drawString(msg, 10, 30);
g.drawString(Integer.toString(num), 10, 50);
}
}
|