2009年8月23日日曜日

サーブレットからのパラメータ解析

Apache上のサーブレットに対して、getやpostでパラメータを指定した場合には、以下のようにget/postのhttpServletRequest型パラメータ変数のgetParameterメソッドを呼び出してその値を取り出します。

[例] String p = req.getParameter("パラメータ名");

しかし、このAPIでは、まず、パラメータ名文字列を引数に指定するため、ブラウザからどのようなパラメータ名が存在するか予め知っておく必要があります。

Yawdbaでは、ブラウザから指示された多様なパラメータを知るために、ブラウザで指示されたパラメータを自動的に調べる必要があります。そこで、私は、次のようなロジックでパラメータの自動取り出しを行っています。

Enumeration e;
int c;
for(e = req.getParameterNames(); e.hasMoreElements();) {
String name = (String)e.nextElement();
String p =  req.getParameter(name);
}

すなわち、httpServletRequest型のreqを用いて、req.getParameterNames()で列挙型のeを取得し、e.nextElement()で名前を取り出しながら、e.hasMoreElements()になるまで繰り返し処理を行います。あとは、ルール内でパラメータ名文字列が取り出されましたので、あとは、getParameterでその値を取り出します。上の例では、そのまま文字列を取り出していますが、ArrayListなどを用いれば、全てのパラメータを取り出すことが可能です。

使ってみては如何でしょうか?

2009年8月22日土曜日

Yawdba開発談(1)

Yawdbaは、ApacheのサーブレットプログラムをJavaで開発しています。
ブラウザからの要求をgetあるいはpostメソッドで受けてらからの動作に関するコーディングを終了しました。現在、インプリ終了しているのは、以下の部分となります。
 パラメータを取得し、パラメータで渡されたODBCソースとテーブル名から対応する動作記述をデータベースから取得する。

現在は、動作記述のルールを解析して、Yawdbaが処理しやすい内部形式に変換する部分をコーディングしています。変換に際しては、文章の構文を解析するコンパイラコンパイラを利用して、以後のルール変更が容易になるようにしています。

コンパイラコンパイラとして有名なものとしては、Yacc/lexがありますが、java用のコンパイラコンパイラであるjavaccを使っています。開発の途中で得たノウハウを、今後載せていきたいと思います。

2009年8月17日月曜日

ASP.NETでAutoPostBackにより画面ちらつきを行わない方法

ASP.NETの基本は、サーバーサイドのプログラミングにより、発行されるWebページの内容を表示するものです。
例えば、Webページのメニューなどの選択結果により、Webページ上のチェックボックスにチェックを入れたり外したりする場合には、ASP.NETサーバー上で動作する必要がり、AutoPostBackを使用します。即ち、AutoPostBackでは、Webページ上のチェックボックスやテキスト領域が変更されるとともに、制御がASP.NETにも戻り、ASP.NET側でのロジックを動作させることになります。
しかし、この方法だと、制御がASP.NETに戻ることから、画面のちらつきが発生する。
このちらつきを起こさないようにするには、JavaScriptによりクライアント側でロジックを組み込み、制御がASP.NETに戻らないようにする必要があります。ASP.NET2005からは、ASP.NETのオブジェクトから、イベント発生時起動するJavaScriptプログラムを定義することが可能になったので、この機能を利用することで、ちらつきの無い表示が可能となります。

2009年8月16日日曜日

UCSD-Pascalの思い出(1)

1980年に、米国サンディエゴでUCSD-Pascalというシステムのメンテナンスができるように半年出張したことがあります。UCDS-Pascalは、コンピュータ科学でよく利用されるパスカル言語をパソコンで動作するようにした最初のシステムです。
このシステムは、現在のJava言語につながることが書かれてます。(http://ja.wikipedia.org/wiki/UCSD_p-System
それまで、PL/Iコンパイラのソースコードを見ていましたが、パスカルコンパイラーのソースコード量が非常に少なくて出来ている事に驚いたことを覚えています。

また、米国でのプログラミングの書き方に、大いに影響を受けました。まるで、言葉を書いているようにプログラミングされていました。これは、その後、UnixコンパイラーのソースコードやSunViewのソースコードでも感じた事です。

例えば、IF文の条件で、英字であることをチェックする関数を作る場合に、
日本では、「CHECK_EIJI」などとなりますが、米国では、「is_alphabetic」と書きます。
ソースコードでは、「if is_alphabetic」となり、まるで、文章を書いているようです。

Webデータベースシステムを開発中です

従来のWebブラウザを通じて、データベースを操作する開発キットとしては、ASP.NETやStrutsなどがありますが、VisualBasicやjavaなどの知見が必要となっています。
現在、このような知識がなくて、SQLコマンドによる命令を、Webブラウザから入力することで動作するアプリケーションの開発を開始しました。
ご期待ください。