メインコンテンツまでスキップ

「Java」タグの記事が35件件あります

全てのタグを見る

Java: 複数クライアントでの自動Web(HTTP GET)レスポンス計測ツール

· 約4分
Yu Sasaki
Enterprise Security Manager / Advisor

これは何?

  • 少数(1〜数台)のクライアント環境から多数のWebアクセスのエミュレート及びそのレスポンスを計測する際に活用するコード。
  • 指定のURLにGETリクエストを送出し、そのレスポンス(ボディ)データと処理時間(リクエスト送出からレスポンス受信まで)を算出。 ※一般のブラウザのようにレスポンス取得からデータの描画までの処理時間は含まれない。
  • main()内でスレッドプール(Webクライアント数)とタスク(合計アクセス数)を生成。仮にクライアントが応答無しになった場合は、最大awaitTime秒待って強制終了する。
  • このツールを使用した際の評価の書き方としては「XクライアントからのY時間あたりZアクセス数が発生した時のAAA(サーバ負荷|クライアントのレスポンス時間[最大|平均|最小])」の用になる見込みだが、Yを計測するコードは入れていない。。。(若干わかりにくいので、もっと簡潔な表現に落とす必要があるかも)
  • URLの指定はコマンドラインパラメータからできるように修正した方が良かったが、時間の関係で割愛している。(URLの修正にいちいち再コンパイルは手間ではある)

使い方は?

  • 下記のソースをJavaでコンパイルし、java Mainコマンドで実行する。(Eclipseがあればそれを使用すると手間が省ける)
  • アクセスURLとパラメータには気をつけること(外部サイトを指定してDOS攻撃に間違えられないように、自分のサーバか、localサーバなどを使用すること)
  • 現状実行結果を標準出力している。スレッドセーフな整形ログ出力を追加で書き込むのも良いし、標準出力内容を簡易的にして、プログラムの実行結果をファイルにリダイレクトするのも良い。

Java: Quick JUnit (Eclipseプラグイン) のインストールとユニットテストのチュートリアル

· 約4分
Yu Sasaki
Enterprise Security Manager / Advisor

本記事はEclipseとJUnitによるコーディング・ユニットテストサイクルを便利にするQuick JUnitプラグインのインストール方法と基本的なテストコード・テスト実行のチュートリアルを記載している。

本記事の実行環境

Mac OS, Java7, Eclipse 4.32, JUnit4, Quick JUnit v0.7となる。仮にOSがWindows版だとしても内容の大筋は大差ない。

Linux: Oracle Javeのインストール方法

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

Oracle(旧Sun) Javaは下記サイトからダウンロードする。 Java SE Downloads RedHat系のデストリビューションであればrpmパッケージが簡単。ダウンロード後にroot権限で下記コマンドを実行。

# rpm -ivh jdk-7u10-linux-x64.rpm
(100%)########################################### [100%]
Unpacking JAR files...
rt.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_10/jre/lib/rt.pack
jsse.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_10/jre/lib/jsse.pack
charsets.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_10/jre/lib/charsets.pack
tools.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_10/lib/tools.pack
localedata.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_10/jre/lib/ext/localedata.pack

上記のエラーが出力されるが後述の参考サイトを確認する限り特に問題ないようだ。

# javac -version;java -version
javac 1.7.0_10
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

参考サイト

Java: TCP Socket Echo Server/Client サンプル

· 約3分
Yu Sasaki
Enterprise Security Manager / Advisor

以下の2つのサンプルコードはローカルでTCP Socketを用いたEchoサーバ/クライアントを走らせるもの。Javaのネットワークプログラミングで基本となるクラスとメソッドの使いどころを確認しておきたくて作成。まぁ今はnioがデファクトですけど。

サーバ

package tcpechoserver;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
public class Main {
private static final int BUFSIZE = 32; // 受信バッファサイズ
public static void main(String[] args) throws IOException {
int servPort = 5000;
// サーバソケットの作成
ServerSocket servSock = new ServerSocket(servPort);
int recvMsgSize; // 受信メッセージサイズ
byte[] receiveBuf = new byte[BUFSIZE]; // 受信バッファ
// クライアントからの接続を待ち受けるループ
while (true) {
Socket clntSock = servSock.accept(); // クライアントの接続を取得
SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
System.out.println("接続中:" + clientAddress);
InputStream in = clntSock.getInputStream();
OutputStream out = clntSock.getOutputStream();
while ((recvMsgSize = in.read(receiveBuf)) != -1) {
out.write(receiveBuf, 0, recvMsgSize);
}
clntSock.close();
}
// 到達不能コード
}
}

Java: インターフェースとローカルのIPv6, IPv4アドレスの取得 - NetworkInterfaceクラス

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

下記のコードはネットワークインターフェース情報取得し、IPv6とIPv4のアドレスを取得、表示するサンプルコードです。

ソースコード

import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
/**
* ネットワークインターフェースの取得
*/
public class InetAddressesInfo {
private HashMap<networkInterface, ArrayList<inetAddress>> interfaceMap;
public InetAddressesInfo() {
interfaceMap = new HashMap<networkInterface, ArrayList<inetAddress>>();
}
public void getInterfaces() {
interfaceMap.clear();
try {
Enumeration<networkInterface> interfaceList = NetworkInterface.getNetworkInterfaces();
if (interfaceList == null) {
System.out.println("Message: No interfaces found");
} else {
while (interfaceList.hasMoreElements()) {
NetworkInterface iface = interfaceList.nextElement();
Enumeration<inetAddress> addrList = iface.getInetAddresses();
if (!addrList.hasMoreElements()) continue;
ArrayList<inetAddress> iaddress = new ArrayList<inetAddress>();
while (addrList.hasMoreElements())
iaddress.add(addrList.nextElement());
interfaceMap.put(iface, iaddress);
}
}
} catch (SocketException se) {
System.out.println("Error getting network interfaces: " + se.getMessage());
}
}
public void show() {
for (NetworkInterface n : interfaceMap.keySet()) {
System.out.println("Interface " + n.getName() + ": ");
for (InetAddress a : interfaceMap.get(n)) {
System.out.print("\tAddress " + ((a instanceof Inet4Address ? "(IPv4)"
: (a instanceof Inet6Address ? "(IPv6)" : "(?)"))));
System.out.println(": " + a.getHostAddress());
}
}
}
public HashMap<networkInterface, ArrayList<inetAddress>> getInterfaceMap() {
return interfaceMap;
}
public void setInterfaceMap(
HashMap<networkInterface, ArrayList<inetAddress>> interfaceMap) {
this.interfaceMap = interfaceMap;
}
public static void main(String[] args) {
InetAddressesInfo i = new InetAddressesInfo();
i.getInterfaces();
i.show();
}
}

実行結果

Interface lo:
Address (IPv6): 0:0:0:0:0:0:0:1
Address (IPv4): 127.0.0.1
Interface net4:
Address (IPv6): fe80:0:0:0:0:5efe:c0a8:10a%12
Interface net5:
Address (IPv6): 2001:0:4137:9e76:8ae:1cf7:3f57:fef5
Address (IPv6): fe80:0:0:0:8ae:1cf7:3f57:fef5%13
Interface eth3:
Address (IPv6): 2001:c90:33d:21d4:919c:836b:2d1a:cf33
Address (IPv6): 2001:c90:33d:21d4:8856:aef1:d0bd:db64
Address (IPv6): fe80:0:0:0:919c:836b:2d1a:cf33%11
Address (IPv4): 192.168.1.10

ドキュメント

NetworkInterface (Java Platform SE 6)

Windows7 64bitにEclipseでAndroid開発環境をセットアップ

· 約4分
Yu Sasaki
Enterprise Security Manager / Advisor

実は今までMac Bookに外部ディスプレイとキーボードを接続してデスクトップで開発していたのですが、Androidのエミュレータを起動していると地味に負荷が連続的にかかって発熱がひどくなってきたので、この度、Windows7 64bitのデスクトップPCを買いました。その際のAndroid開発環境のセットアップ(32bitと64bit環境)手順を以下に紹介します。

Java 環境のインストール

下記サイトよりJDKをダウンロード&インストール。 Java SE Downloads JDK Download 画面 ダウンロードするファイルはWindows x64 と Windows の二つ。それぞれインストールする。 64bit版 はProgram Filesフォルダに、32bit版はProgram Files (x86) フォルダにインストールされる。

C:\>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)

Android SDK のインストール

下記サイトよりダウンロードする。 Android SDK | Android Developers 解凍後 SDK Setup.exe を実行する。その際に下記のようなエラーが発生した場合は、 画面左部のSettingsからチェックボックス Force https://... sources to be fetched using http;//... をチェックし、使用したいSDK Versionをインストールする。

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml, reason: HTTPS SSL error. You might want to force download through HTTP in the settings.

Eclipse 64bit版のインストール

下記サイトよりダウンロードする。 Eclipse Project Downloads 現在の最新バージョンのリンクをクリックし「Windows (x86_64)」が64bit版Eclipseなので、クリックしてダウンロード。 追記(2010-04-26):上記の手順の中で32bit版のJDK(with JRE)をインストールしているならば、下記の日本語版Eclipse(32bit版)を使用(pathも設定)してもOK(ちなみに私は結局この方法を採りました^^;)。 Pleiades - Eclipse プラグイン日本語化プラグイン

Android Development Tools のインストール

Android Development Tools Eclipse のプラグインインストール画面で下記のURLを追加し、インストールする。 追記(2012-06-01):目にやさしいコードの配色は下記のXMLテーマを使用する。 Eclipse Color Themes 設定方法は、上部のメーニューバーより、 ウィンドウ > 設定 > 一般 > 外観 > 色テーマ > テーマのインポート よりダウンロードしたXMLファイルをインポート。 追記:上述は3.6想定でしたが、以下の手順でEclipse 3.7, Pleiades v1.3.3での日本語化ができましたので、ご参考下さい。 ■前提 Windows 7 64bit , java version “1.6.0_24″ ■ダウンロード ・http://www.eclipse.org/downloads/ のEclipse Classic 3.7の64bitをダウンロード。 ・http://mergedoc.sourceforge.jp/index.html のPleiades 1.3.3 本体ダウンロード。 ■インストール手順 1. eclipse-SDK-3.7-win32-x86_64.zipを適当なフォルダに解凍→eclipseフォルダが作成される。 2. pleiades_1.3.3.zipの中身を全てeclipseフォルダへ移動→移動中にポップアップ表示される「フォルダを統合しますか?」は「はい」で進める。 3. eclipseフォルダ内のeclipse.iniファイルの最終行に以下の文字列と最後に空行を追加(pleiadesのreadmeに記載のインストール手順)。 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 4. eclipse.exeをダブルクリック (-cleanオプションなしで初回起動) 5. workspaceディレクトリを設定後、日本語化されたEclipseが起動。使用されているjavaw.exeプロセスも64bit版が使用されていることを確認。

Java: ServletからJSPへリクエストをフォワード

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

目的

Servletで処理した結果をJSPファイルに転送し、HTMLを生成する。これによって、MVCモデルにおけるViewの分離ができる。

方法

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
ArrayList<string[]> table = new ArrayList<string[]>(); // 転送データ
<中略>
req.setAttribute("table", table);
req.getRequestDispatcher("jsp/view.jsp").forward(req, res);

上記のServletコード上のtableという変数をview.jspに渡したす場合、HttpServletRequest #setAttributeで変数を登録し、getRequestDispatcherとforwardでリクエストをフォワードする。 JSP側で登録した変数を取り出すには、下記のコードを用いる。

<% ArrayList<string[]> table = (ArrayList<string[]>)request.getAttribute("table"); %>