NI-Lab. - blotted-000007 ~ 書き散らかしたメモ ~ 

/*****************************************************************************/
[Tomcat]Invoker Servlet

以下は、Tomcat4の場合。

web.xml 内で、
通常は、ひとつひとつのサーブレットをそれぞれのURLに対応させるが、
invoker サーブレットを利用して、
サーブレットとURLをまとめてマッピングさせることができる。

<web-app>

    <!-- サーブレット名とサーブレットクラスのマッピング -->
    <servlet>
        <servlet-name>
            TestServlet
        </servlet-name>
        <servlet-class>
            TestServlet
        </servlet-class>
    </servlet>

    <!-- 通常のサーブレット名とURLのマッピング -->
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>

    <!-- invokerサーブレットによるマッピング -->
    <servlet-mapping>
         <servlet-name>invoker</servlet-name>
         <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

参考:

http://www.ingrid.org/jajakarta/tomcat/tomcat-4.0/webapps/tomcat-docs-ja/catalina/funcspecs/fs-invoker.html
Catalinaの機能仕様 - Invoker Servlet

http://park15.wakwak.com/~unixlife/java/tomcat-webxml.html
web.xmlの設定によるTomcat Webアプリケーションの制御

>invokerの設定があると、 "http://localhost/test/servlet/Hello"でServletの呼び出しができます。
>本来、Servletへのアクセスは web.xmlの<servlet-mapping>で指定しアクセスさせるべきもので、これは無効にしておくべきです。
>もし、簡易アクセスができる場合は、ユーザーから直接実行されては困るクラスを呼び出される可能性があり、場合によってはセキュリティーホールにもなりかねます。

/*****************************************************************************/
[Tomcat]Invoker Servlet

以下は、Tomcat5の場合。

Tomcat5 では、デフォルトで invoker servlet が使えない。
そのため、web.xml に設定を追加する必要がある。

web.xml にて、
invoker servlet を利用した servlet-mapping の前に、
以下の記述を追加すれば、invoker servlet が利用できるようになる。

    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

この設定内容の原型は ${CATALINA_HOME}/conf/web.xml にあって、
コメントアウトされている。
コメントアウトを解除すると、
Tomcat上の全Webアプリケーションで invoker servlet を利用することができる。
/*****************************************************************************/
[Ant]<java fork="yes">

問題:
以下のような、Antのtargetを作って実行してみたら、
クラスパスが通っているはずなのに、
hoge.jar 内にあるクラス(hoge.Hoge)を読み込めない現象が起きた。

// target
<target name="test">
	<java classname="Test">
		<classpath>
			<pathelement path="../hoge.jar" />
			<pathelement location="." />
		</classpath>
		<arg value="${FRAMEWORK}"/>
	</java>
</target>

// 実行
C:\work>ant test
Buildfile: build.xml

test:
     [java] java.lang.NoClassDefFoundError: hoge/Hoge

解決策:
javaタスクに fork="yes" を追加したら、実行できた。
理由は不明。

<java classname="Test" fork="yes">
/*****************************************************************************/
// Microsoft.XMLHTTPを利用してHTTPにてアクセスして、
// HTMLのソースをダイアログに表示する。
// 以下のソースコードは TransTECH 1行プログラムの達人より。
// get.js というファイルに記述して、実行する。
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("GET", "http://www.google.co.jp/", false);
xmlhttp.Send();
WScript.Echo(xmlhttp.responseText);
/*****************************************************************************/
[Java]TomcatのFORM認証
web.xmlにlogin-config要素を追加する。
<auth-method>FORM<auth-method>
/*****************************************************************************/
[Java]JNDIによるTomcatにおいての実行時パラメータ取得方法

Tomcat の web.xml に以下のような env-entry の記述(web-app内に記述)を追加。
GlobalNamingResources 内に記述する Environment 要素にて、
パラメータの情報を指定すれば、Tomcat上のすべてのWebアプリから参照できるらしい。
---------------------------------------------------------------------
<web-app>

    <env-entry>
      <env-entry-name>Hoge</env-entry-name>
      <env-entry-value>hehehe</env-entry-value>
      <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
---------------------------------------------------------------------

Hogeをキーとして、heheheを取得するJSPの例。
heheheと表示される。
---------------------------------------------------------------------
<%@ page import="javax.naming.*" %>
<%
    String message;
    try{
        Context ctx = new InitialContext();
        message = (String)ctx.lookup("java:/comp/env/Hoge");
    }catch(Exception e){
        message = e.getMessage();
    }
%>
<html>
    <head>
        <title>JNDI Test</title>
    </head>
<body>
<%= message %>
</body>
</html>
---------------------------------------------------------------------

/*****************************************************************************/
http://www.oreilly.co.jp/BOOK/cjkv/
CJKV日中韓越情報処理
Ken Lunde著
小松 章、逆井 克己 訳
2002年12月発行
1172ページ
定価13,440円(本体価格12,800円+税5%)
ISBN4-87311-108-0
原書:CJKV Information Processing

http://www.cbook24.com/bm_detail.asp?sku=99901986
タイトル:  	 	日本語情報処理
サブタイトル: 		Understanding Japanese Information Processing
訳: 		春遍雀來, 鈴木武生
ISBN: 		4-89052-708-7
サイズ: 		A5判
ページ数: 		497
当社在庫: 		品切
発売日: 		1995/08/10
●  	Ken Lunde  (著)
● 	ソフトバンクパブリッシング (発売)
● 	\4,700 (本体価格) 


/*****************************************************************************/
[Java]Graphicsオブジェクトを生成できない

BufferedImage#createGraphics() で、以下の例外が発生。

java.lang.NoClassDefFoundError
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:141)
	at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)

違うタイプの例外が出ることも。

java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
	at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
	at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:134)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:141)
	at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
	at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)

行番号はバージョンによって違うと思う。

Tomcatで動作させていたアプリだったので、
catalina.shに以下のようにパラメータを追加することで対処。

JAVA_OPTS="-Djava.awt.headless=true"

以下、参考資料。

http://www.tripwire.co.jp/resources/tech_library/ans_tfs_tm.html#9
Tripwire Manager 2.4 をインストールしようとすると、次のようなエラーが発生します。これはどういう意味ですか ?

>Stack Trace:
>java.lang.NoClassDefFoundError
>     at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:120)
>         at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment
>(GraphicsEnvironment.java:58)

>Tripwire Manager 2.4 のインストールには GUI が必要になります。( キャラクタベースのコンソールでインストールすることはできません ) X Window システムか、CDE 上でインストーラを起動して下さい。

http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/TinyTips/HeadlessSupport/HeadlessSupport.html
J2SE, v1.4 の新機能 New I/O SocketChannel と Selector - Headless サポート

>v1.4 からはヘッドレスモードがサポートされ、X11 がなくても OK になりました。
>
>使い方は簡単。引数に -Djava.awt.headless=true を加えればいいだけです。例えば Sample クラスをヘッドレスで起動する場合は
>
>    java -Djava.awt.headless=true Sample
>
>とします。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=8200
@IT会議室 > Java Solution 会議室 > DefaultToolkitがとれない?

http://www.tsuhtan.net/java/pja/
PJA Toolkit

>PJA (Pure Java AWT) ToolkitはeTeksが開発したグラフィクス描画用Java ライブラリです。 PJA Toolkitは100% Pure Java でJVMが稼動するシステムのネイティブなグラフィクス資源を使用しません。
/*****************************************************************************/
[Base64]=?iso-2022-jp?B?XXXX?=

http://www.kumei.ne.jp/c_lang/sdk3/sdk_235.htm
第235章 base64の基礎

http://www.kumei.ne.jp/c_lang/sdk3/sdk_236.htm
第236章 base64をデコードする

http://www.kumei.ne.jp/c_lang/sdk3/sdk_237.htm
第237章 base64をエンコードする

http://jakarta.apache.org/commons/codec/
Jakarta Commons Codec

JavaでBase64エンコード・デコードが可能。
/*****************************************************************************/
[Unicode]文字の名前一覧

http://www.unicode.org/Public/3.0-Update/NamesList-3.0.0.txt

\円記号は0x00A5.

>0x00A5
>YEN SIGN

バックスラッシュは005C.

>005C
>REVERSE SOLIDUS = BACKSLASH

http://java-house.jp/ml/archive/j-h-b/016030.html#body
[JavaHouse-Brewers:16030] Re: エスケープシーケンスの入力

>それで,Unicodeでは円記号とバックスラッシュが区別されています.でも,
>Unicodeと相互変換する際に,Shift-JISの1バイトの円記号を円記号にするか,
>バックスラッシュに変換するか,一意に決定できません.これは非常に有名な
>問題で「¥問題」(Yen Sign Problem)と呼びます.同じ問題は韓国語でも発生
>します.
>
>ただし,エンコーディングの相互変換に使われるコンバータと,フォントエン
>コーディングへの変換に使われるコンバータは別ですし,フォントの指定もあ
>りますので,Unicode中のバックスラッシュの表示は場合に応じて円記号だっ
>たり,バックスラッシュだったりします.
>
>それで,たいていの日本語関連のコンバータは,円記号をUnicodeのバックス
>ラッシュにマップします…,そうしないとコンパイラが動作しないですけど,
>そうすると逆に困るアプリケーションもありますよね.
/*****************************************************************************/
Java と MySQL と SJIS と 文字化け。

神―~∥-¢£¬能

髙

http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html
文字化け“???”の法則とその防止策

http://www.d2.dion.ne.jp/~imady/charset/index.html
いまでぃのホームページ - 文字コードの解説

http://internet.watch.impress.co.jp/www/column/ogata/part3_07.htm
小形克宏の「文字の海、ビットの舟」――文字コードが私たちに問いかけるもの
第3部 JIS X 0213は世界になにを発信したのか?
第7回 日本IBM代替案からうかがえる“メーカーの論理”(2)

http://www.ingrid.org/java/i18n/encoding/shift_jis.html
Shift_JISのエイリアスの変更について

http://www.mysql.gr.jp/mysqlml/msg.cgi?ml=mysql&id=5224
[mysql 05224] MySQL + JDBC で SJIS 処理

http://www.atmarkit.co.jp/flinux/rensai/mysql08/mysql08b.html
Servlet/JSP+MySQLでアプリケーションサーバ その1(2/3)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6729&forum=12&6
データベースへのバイナリデータの挿入について

http://javaalmanac.com/egs/java.sql/InsertPs.html
The Java Developers Almanac 1.4

http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Att_09.htm
MySQLとそのJDBCドライバ(MM.MySQL)のダウンロード法

http://www.kent-web.com/pubc/jcode/
文字化けについて

以下のような、2バイト目に5Cのコードが使われている文字が化けることの説明。

―ソЫⅨ噂浬欺圭構蚕十申曾箪貼能表暴予禄
兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡

http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/programming/mojibake.html
Servlet Garden: How to get rid of the "Oh! Moji Bake !".

http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
MySQLのインストール/動作確認手順

http://www.mysql.gr.jp/mysqlml/msg.cgi?ml=mysql&id=8949
[mysql 08949] sjis & BLOB

http://www.mysql.gr.jp/mysqlml/msg.cgi?ml=mysql&id=8542
[mysql 08542] MySQL + JDBC での文字エスケープ

http://www.javareading.com/jdbc/
Download gwe JDBC Driver for MYSQL

>この「JDBC Driver for MySQL」は、「GWE Technologies Limited.社」が製作する
>「gweMysqlJDBC driver」を独自に改良・拡張したものです。

http://www.mysql.com/doc/ja/Contributors.html
MySQL Manual | C.2 MySQL へのの貢献者

http://www.rfs.jp/server/mysql/
MySQL講座 [SMART!]

http://www.mysql.com/doc/ja/
MySQL Manual

http://www.mysql.com/doc/ja/Option_files.html
MySQL Manual | 4.1.2 `my.cnf' オプション設定ファイル

my.ini
my.cnf

http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_toc.html#Tutorial
MySQL Reference Manual for version 3.23.48. - 3 Introduction to MySQL: MySQL チュートリアル

http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_toc.html#Literals
MySQL Reference Manual for version 3.23.48. - 6 MySQL Language Reference
6.1.1 文字列と数値をどのように書くか?

http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_toc.html#Functions
MySQL Reference Manual for version 3.23.48. - 6 MySQL Language Reference
6.3 SELECT と WHERE 節で使用する関数

MySQLへの接続
mysql -h hostname -u username -p dbname

テーブル一覧を表示
SHOW TABLES;

テーブルを削除
DROP TABLE IF EXISTS test;
DROP TABLE test;

ファイルに記述したSQL文を実行する
mysql [-t -N] データベース名 < ファイル名

テーブルを作成
mysql> create table test (name varchar(255));

管理者権限を持つユーザを登録する
mysql> GRANT ALL PRIVILEGES ON *.* TO username@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

あいかわらずJavaで化けやすい文字: ―~∥-¢£¬

MySQLのクエリーログを設定する
設定ファイルの
[mysqld]セクションに
log=クエリログファイル名
というエントリを追加。

(例)
[mysqld]
basedir=c:/mysql
datadir=c:/mysql/data
default-character-set=sjis
log=c:/mysql/query.log


	Connection createJdbcOdbcConnection(String dbname, String user, String password) {
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			final String url = "jdbc:odbc:" + dbname;
			Connection con = DriverManager.getConnection(url, user, password);
			return con;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	Connection createConnection(String host, String dbname, String user, String password) {
		try {
			Class.forName("org.gjt.mm.mysql.Driver");
			Class.forName("gwe.sql.gweMysqlDriver");
			final String url =
				"jdbc:mysql://" + host + "/" + dbname +
				"?useUnicode=true&characterEncoding=SJIS";
			java.util.Properties info = new java.util.Properties();
			info.put("user", user);
			info.put("password", password);
			Connection con = DriverManager.getConnection(url, info);
			return con;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

/*****************************************************************************/
[Java]正規表現整数値マッチングパターンのテスト

public class RegexTest {

	public static void main(String[] args) {

		{
			String[] ok =
				{
					"1",
					"10",
					"0100",
					"15265",
					"810000",
					"-1",
					"-10",
					"-0100",
					"-15265",
					"-810000" };
			for (int i = 0; i < ok.length; i++) {
				System.out.println(ok[i] + "=" + isInteger(ok[i]));
				if (!isInteger(ok[i])) {
					System.out.println(ok[i]);
				}
			}
		}

		{
			String[] ng =
				{
					"1a",
					"a10",
					"a-100",
					"-a15265",
					"810000a",
					"1a",
					"a",
					"\\10000",
					"100,000",
					"\\100,000",
					"\\810,000",
					"-\\810,000",
					"\\-810,000" };
			for (int i = 0; i < ng.length; i++) {
				System.out.println(ng[i] + "=" + isInteger(ng[i]));
				if (isInteger(ng[i])) {
					System.out.println(ng[i]);
				}
			}
		}
	}

	private static boolean isInteger(String x) {
		String pat = "^-?[0-9]+";
		return x.matches(pat);
	}

}
/*****************************************************************************/
/usr/share/dict/words
代表的な単語の綴りがアルファベット順に並んでいるファイル

>$ head /usr/share/dict/words
>Aarhus
>Aaron
>Ababa
>aback
>abaft
>abandon
>abandoned
>abandoning
>abandonment
>abandons
/*****************************************************************************/
[Java]サーブレットからWEB-INFディレクトリの位置を求める

// サーブレトの初期化処理用メソッドをオーバーライド
public void init(ServletConfig config)
{
	super.init(config);

	// Servlet#getServletConfig() を利用しても
	// initメソッドの引数と同じオブジェクトを取得できる

	ServletContext context = config.getServletContext();

	// 指定された仮想パスに対応する実際のパス
	String webinfPath = context.getRealPath("WEB-INF");
}

/*****************************************************************************/
[Tomcat]ログファイル

conf/server.xml に 以下の設定を追加。

	<Context path="/hoge" docBase="hoge" debug="0" reloadable="false">
		<Logger
			className="org.apache.catalina.logger.FileLogger"
			prefix="hoge."
			suffix=".txt"
			timestamp="true"
		/>
	</Context>

ServletContext#log で logs/hoge.YYYY-MM-DD.txt に出力される。
/*****************************************************************************/
[Java]デフォルトロケールの取得
java.util.Locale.getDefault();

[Java]デフォルトエンコーディング名の取得
System.getProperty("file.encoding");

http://java-house.jp/ml/archive/j-h-b/037955.html
[JavaHouse-Brewers:37955] Re: デフォルトエンコードについて

>デフォルトエンコーディングは,一番最初にデフォルトエンコーディングを取
>得した時のfile.encodingプロパティの値から決められます.一度決定したら,
>変更されません(できません).

// サンプルコード
import java.util.Locale;

public class DefaultLocaleTest {

	public static void main(String[] args) {

		// デフォルトロケール
		Locale dl = Locale.getDefault();
		System.out.println("デフォルトロケール: " + dl.toString());

		// デフォルトエンコーディング
		String de = System.getProperty("file.encoding");
		System.out.println("デフォルトエンコーディング: " + de);

	}

}

// Java1.4.1_02, Windows2000SP4 による 出力結果
デフォルトロケール: ja_JP
デフォルトエンコーディング: MS932
/*****************************************************************************/
http://www.mobster.jp/wiki/index.jsp?pid=MobTaskTray
MobTaskTray  - MobTaskTray(Win32 TaskTray for Java)のページ

native native native...
/*****************************************************************************/
http://search.luky.org/linux-users.9/msg09162.html
[linux-users:99774] Re: proftpdにログインできない

>standaloneでの起動で
>#/usr/local/sbin/proftpd を実行したときの
>/var/log/messagesで気になるのが

>Jun 24 08:17:34 tomoko proftpd[10237]: tomoko.redirectme.net - Failed
>binding to 0.0.0.0, port 21: Address already in use ←ここ

/usr/local/etc/proftpd.conf
/usr/local/sbin/proftpd

netstat -a で ftp が すでに Listen になっているかも。
他にFTPDが起動しているかも。
/*****************************************************************************/
[Java]アプリケーション独自の例外を作るメリット
インターフェイスや抽象クラスの派生クラスが、IOExceptionとかSQLExceptionとか、リソースごとに違う例外を吐いても、アプリ独自例外でラッピングできる。というか、抽象化したら、そうなるしかない?
/*****************************************************************************/
http://www.nurs.or.jp/~telnet/http.html
Use telnet [telnetでWeb siteを見る]

// telnetでwebサーバへアクセスする例
// 最後に空行が必要
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /test/servlet/TestServlet?key=aaa&val=bbb HTTP/1.0
/*****************************************************************************/
[Java]javax.servlet.http.HttpServletResponse#setHeader の挙動

Tomcat4にて検証した結果

	HttpServletResponse#setHeader(key, val);

		・key が null のとき java.lang.NullPointerException が発生する。

		・val が null のとき ヘッダは出力されるが、値は空文字列となる。

		・key が 空文字列のときには java.lang.StringIndexOutOfBoundsException が発生する。
		(java.lang.StringIndexOutOfBoundsException: String index out of range: 0)

// 動作検証用ソースコード
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet {

	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, java.io.IOException {

		String key = req.getParameter("key");
		String val = req.getParameter("val");

		System.out.println("begin setHeader");
		resp.setHeader(key, val);
		System.out.println("end setHeader");

		PrintWriter out = resp.getWriter();
		out.print("test");
	}

}

/*****************************************************************************/
http://www.seraphyware.jp/dev/tips/java.tips.concurrent.html
JAVAにおけるマルチスレッドと同期の使い方

したがって、下記のようなメンバ変数をポーリングするコードは、まったくのデタラメで動作する保証がない。


	public boolean _stopFlag;
	
	public void run() {
		while( ! _stopFlah ) {
			....
		}
	}
				

このコードの意図するところは、メンバ変数_stopFlagがtrueになるまで何らかの処理を永久に繰り返すものである。

おそらく、他のスレッドが停止を要求するときに、このフラグをtrueにするのであろう。

ところが、_stopFlagはスレッドのワーク用コピーを見ているため、永久にtrueになることはない。

※ この例では、フラグ用のbooleanメンバをvolatile修飾すれば正しく動作する。

/*****************************************************************************/
地図に関する書籍

地図の歴史 世界篇
http://www.amazon.co.jp/exec/obidos/ASIN/406115768X/nilab-22/ref=nosim/

地図の歴史 日本篇
http://www.amazon.co.jp/exec/obidos/ASIN/4061157698/nilab-22/ref=nosim/

三省堂地理小辞典
http://www.amazon.co.jp/exec/obidos/ASIN/4385240647/nilab-22/ref=nosim/

地図を作った人びと
http://www.amazon.co.jp/exec/obidos/ASIN/4309223664/nilab-22/ref=nosim/

地図学用語辞典
http://www.amazon.co.jp/exec/obidos/ASIN/4765540022/nilab-22/ref=nosim/

地理的情報の分析手法
http://www.amazon.co.jp/exec/obidos/ASIN/4772212280/nilab-22/ref=nosim/

教程 地図編集と投影
http://www.amazon.co.jp/exec/obidos/ASIN/4381001958/nilab-22/ref=nosim/
/*****************************************************************************/
http://java.sun.com/products/java-media/jai/
Java Advanced Imaging API
JAI

http://java.sun.com/j2se/1.4/ja/docs/ja/guide/imageio/
Java Image I/O

http://yamaguch.sytes.net/~tora/java/image.html
イメージの読み書きメモ

http://www.cobalt.co.jp/writing/java_press/java2d_2.html
JAVA press Vol.3 Java2DとThe WALLシステム

http://cappuccino.jp/keisuken/java/com_sun_image_jpeg.html
JPEG を書き出してみよう (com.sun.image.codec.jpeg)
/*****************************************************************************/
http://www.servlets.com/cos/index.html
Servlets.com | com.oreilly.servlet

> There's no sense in reinventing the wheel--here are some servlet support classes I wrote that you can use. Most famous is the file upload package MultipartRequest and MultipartParser. Please read the license before use.
/*****************************************************************************/
WebLogicServer 7.0.2.0(7.0 SP2)のインストール

http://edocs.beasys.co.jp/e-docs/wls/docs70/adminguide/startstop.html#41101
WebLogic Server の起動と停止

http://edocs.beasys.co.jp/e-docs/wls/docs70/admin_domain/configwiz.html
コンフィグレーション ウィザードを使用した新しいドメインの作成

myserverの起動
[Windowsのスタートメニュー] -> [プログラム] -> [BEA Weblogic Platform 7.0] -> [User Projects] -> [mydomain] -> [Start Server]
(%SystemRoot%\system32\cmd.exe /k"C:\bea\user_projects\mydomain\startWebLogic.cmd")

Webアプリケーションのセットアップ
	C:\bea\user_projects\mydomain\applicationsにディレクトリをコピー

/*****************************************************************************/
http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)
Java 2 Platform EE 1.3.1: インタフェース HttpServletResponse:

sendRedirect
public void sendRedirect(java.lang.String location)
                  throws java.io.IOException

    指定されたリダイレクト先の URL を使用して、一時的なリダイレクト応答をクライアントに送信します。このメソッドは、相対 URL を受け入れることができます。サーブレットコンテナは、応答をクライアントに送信する前に、相対 URL を絶対 URL へ変換する必要があります。先行「/」のない相対 URL の場合、コンテナは現在の要求 URL に対する相対位置としてその URL を解釈します。先行「/」付きの相対 URL の場合は、コンテナはサーブレットコンテナのルートに対する相対位置としてその URL を解釈します。

    応答がすでにコミットされていた場合、このメソッドは IllegalStateException をスローします。このメソッドを使用した後は、応答はコミットされたものと見なされるので、以後応答への書き出しを行ってはいけません。

/*****************************************************************************/
http://www.zdnet.co.jp/developer/java/jspprog/01/03.html
ZDNet デベロッパー: 第1回:JSPによる入出力の基礎 (3/3)

>クエリー文字列は、URLの書式として容認される形式にエンコードされる。このエンコードを「URLエンコード」と呼ぶ。URLエンコードでは、URLに表記する文字として認められていない文字(非英数字)は、「%xx」(xxは文字の16進数表記)に変換される。URLエンコードでは、空白文字は文字コードが16進数で0x20なため、「%20」とも記述できる。しかし、「+」に変換されることが多いのも事実だ。「+」はURLエンコードで空白を示す特別な文字列である。

>GETメソッドを使って送信する場合、送信できるデータの量は、URLの長さにより制限される。URLの最大長は、規格で明確に定められているわけではなく、利用しているWebブラウザやWebサーバに依存する。しかし一般には、1Kバイト程度が限界である。それに対して、POSTメソッドでは、送信するデータ量の制限はない。

>GETメソッドの場合にはキャッシュされるが、POSTメソッドの場合にはキャッシュしない。そのため、GETメソッドの場合には、Webブラウザの「戻る」や「進む」のボタンを押してページを行き来できるが、POSTメソッドの場合には、「戻る」や「進む」ボタンを押して、プログラムを呼び出した際の結果を再参照することはできない。

>■GETメソッドを使う場合
>
>・少量のデータ送信であること。数百~1Kバイト以下でなければ、WebブラウザやWebサーバによっては、URLの最大長の制限の問題から、末尾が切り取られてしまい、正しく送信できないことがある。
>
>・Webブラウザにプログラムを呼び出した際の結果をキャッシュさせたい場合
>
>・プログラムを呼び出した際の結果をブックマーク(お気に入り)として登録許可させたい時
>
>■POSTメソッドを使う場合
>
>・大量のデータを送信する場合。
>
>・Webブラウザにプログラムを呼び出したときの結果をキャッシュさせたくない場合。
>
>・プログラムを呼び出したときの結果をブックマーク(お気に入り)として登録することを許したくない場合。

>この記事内では、おもにPOSTメソッドを使うが、たとえば、何か検索をして、その結果を表示させたい場合ではGETメソッドを利用する方が好ましいこともある。その理由は、検索結果によってヒット件数が多い場合、複数ページに分けて表示するユーザーインターフェイスを採用することが多いためだ。この際、 POSTメソッドを使ってしまうと、Webブラウザの「戻る」や「進む」などのボタンを使い、ユーザーが検索結果ページを次々とたどることができなくなる。
/*****************************************************************************/
http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)

>1.1) PostgreSQL とは何ですか? 何と読みますか?
>Post-Gres-Q-L.(ポスト - グレス - キュー - エル) と発音します。
/*****************************************************************************/
http://hp.vector.co.jp/authors/VA010341/conditional.html
三項演算子?:の正しい書き方

>condition ? true-expression : false-expression

>condition ? true-expression
>          : false-expression
/*****************************************************************************/
http://www.rubyist.net/~matz/slides/oscon2003/index.html
The Power and Philosophy of Ruby
~ or, how to create babel-17s ~
/*****************************************************************************/
C:>type RBTest.java

import java.util.ResourceBundle;

public class RBTest{

	public static void main(String[] args){

		String name = "rb";
		String key = "age";

		RBTest rbt = new RBTest(name);
		System.out.println(rbt.getString(key));
	}

	private ResourceBundle resource;

	public RBTest(String name){
		resource = ResourceBundle.getBundle(name);
	}

	public String getString(String key){
		return resource.getString(key);
	}

}

C:>type rb.properties
age=25

C:>javac RBTest
C:>java RBTest
25

/*****************************************************************************/
http://www-6.ibm.com/jp/developerworks/java/030704/j_j-jsp04293.html
dW : Java technology : JSPベスト・プラクティス: jsp:includeを使用して動的コンテンツを操作する

>jsp:include は、include ディレクティブとはまったく異なるディレクティブです。jsp:include の利点は、インクルードするファイルの変更が常に確認されることです。

>jsp:include は、インクルードするURI自体ではなく、そのURIからの応答をインクルードします。つまり、指定されたURIが解釈され、その結果の応答がインクルードされるということです。インクルードする対象がHTMLの場合は、本質的にそのままのHTMLを受け取ります。しかし、インクルード対象がPerlスクリプト、Javaサーブレット、またはCGIプログラムの場合には、そのプログラムが解釈された結果を受け取ります。通常、この結果はHTMLであり、実際のプログラムは目的達成のための1つの手段ということになります。解釈はページを要求するたびに発生するため、include ディレクティブのときのように結果がキャッシュされることはありません。このように非常に小さな変更ではありますが、動作の外観には大きな違いがあります。

>jsp:include のサンプル・コードに flush という属性があることにお気づきでしょうか。flush は、その名前から想像できるように、インクルードするコンテンツを読み込む前に、存在する任意のバッファーをフラッシュするかどうかを指示します。JSP 1.1では flush 属性が必須であるため、コードからこの属性を外すとエラーになります。しかし、JSP 1.2では、flush 属性はデフォルトでfalseになっています。フラッシュが重要な問題になることはあまりないため、JSP 1.1では flush をtrueに設定し、JSP 1.2以降ではfalseのままにしておくことをお勧めします。

>たとえば、ごくまれにしか変更されないヘッダー、フッター、およびナビゲーション用ファイルをサイトでインクルードする場合、このようなコンポーネントに適した選択肢は基本的な include ディレクティブです。include ディレクティブにはキャッシュが伴うため、インクルードするファイルは一度しか読み込む必要がありません。読み込んだコンテンツはキャッシュされるため、結果としてサイトのパフォーマンスが良くなります。
/*****************************************************************************/