Java Servletで開発をしようと決めたのはいいが、これがなかなか進まない。この連載ではJava
Servletの基礎知識となりそうである。楽しみにしている方、ごめんなさい。Java Servletを習得するにはもう少し時間がかかりそうである。
先月10/25、26にInpriseのDeveloper Conferenceが開催された。10/26にDelphi、C++Builder、Jbuilderのセッションに参加することができたので、少し紹介しておこう。
Delphi5の新しい機能、
Delphi5でのデータベース接続の新しい機能として、
ADO(Active Data Object)を使えることができるようになった。したがって
Boland
Database Engineを使わなくても
OLEや
ODBCで接続できるようになった。それによって
パフォーマンスが低下するのか向上するのかの検証はまだ行われてはいないらしいが、開発者の選択肢が増えたことは喜ばしいことであろう。Oracleを利用して開発を行っている場合、
OO4O(Oracle
Object For OLE)を使いたい人が結構いるようで、その人たちの多くは
ODBCを信じていない(オラクル社が提供しているODBCの性能の問題もあるが。。。)。なおかつ、
BDEなんか(「なんか」というとインプライズ社に怒られるかもしれないが)知らない人もいる。僕は個人的に
BDEを信用している。今後、機会があれば性能比較など試みてみたい。
分散?てなあに
「Javaを使った開発なんて当たり前、Servlet、まだ使ってないの?」という勢いのJavaのあるセッションでは、数年前から言われている分散について語られていた。
CORBAをつかった分散処理である。
「分散処理はJavaの必然である」と主張していた。目的は
「軽量クライアントをつくることである」と。3層よりも多くの多層環境において、いかにクライアント側で処理を少なくするかが課題となる。軽量にすることでそれぞれのオブジェクトを変更しようというときの作業も他に影響を及ぼさないようにすることもできる。しかしながら、ここですべてを説明しきれないし、僕の理解も中途半端である。これも何か別の時に改めて考えたい内容である。
カンファレンスの話はとりあえずこの辺で。。。
SSI
って何?
Java ServletってHTMLを生成するものなのかと思ってしまいそうになったが、
SSI(Server Side
Include)というもの見つけた。見つけたというかAppletでできるのにServletでできないのはヘンだなと思っていたのだ。簡単に言うとHTMLの間にServletの出力結果を埋め込むものだ。Appletと同じように
<Servlet code="Servlet1">
</Servlet>
のようにしてつかうものだ。
決まりごととして
Java Web Server では、ファイルの拡張子を
.html ではなく
.shtml
にする必要がある。
SSI.shtml
<HTML>
<Head><Title> Server Side Include Sample </Title></Head>
<Body>
Server Side Includeのサンプルです。<BR>
ここにServletを埋め込みます。<BR>
<HR>
<Servlet code=jp.tomo.FirstServlet>
</Servlet>
<HR>
</Body>
</HTML>
HTMLからServletに変数を渡すには。。。
HTMLからServletに
変数を渡す場合はどうしたらいいか。Appletの場合は
paramタグを使ってあげるだけだが、さて、Servletでは。。。
結論から言うと
同じだ。
paramタグを使うのである。
まずは、HTMLとJavaのソースを見ていただきたい。
Paramssi.shtml
<HTML>
<Head>
<Title>Server Side Include Sample
</Title>
</Head>
<Body>
Server Side Includeのサンプルです。<BR>
ここにServletを埋め込みます。<BR>
変数としてServletに渡します。<BR>
<HR>
<Servlet code=jp.tomo.ParamServlet>
<Param name=mess Value="Flower Box よろしくね!">
</Servlet>
<HR>
</Body>
</HTML>
ParamServlet.java
/*
* ParamServlet.java 99/11/02
*
*/
package jp.tomo;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
public class ParamServlet extends GenericServlet {
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException {
String mes = request.getParameter("mess");
response.setContentType("text/html; charset=iso-2022-jp");
PrintWriter pw = response.getWriter();
pw.println("<h1><center>");
pw.println(
getP(mes));
pw.println("</center></H1>");
pw.flush();
pw.close();
}
private String getP(String str)
throws IOException {
String data = new String(str.
getBytes("8859_1"),"JISAutoDetect");
return data;
}
}
最初、
getP関数を作らずにそのまま表示させたら、日本語が出力されないのだ。これには困った。もちろん英数半角は問題ないのであるが。。。
いろいろ、参考書をあたって見ると変換には
getBytes("8859_1"),"JISAutoDetect"を使えば良いことが判明した。そこで
getP関数を作ることにした。きた文字をSJISに変えてしまえば良いのだから。。。と。久しぶりにプログラマー心が顔をのぞかせた。そういえば、マジにプログラムを最近書いていないからなー。
みなさんもやってみてください。わかってしまうとどうってことないですけど。
開発環境:JDK1.2.2 JSDK2.0 JWS2.0
次回はJavaServerPageでも紹介しようかなと考えています。ASPではなくJSPですよ。これからは。(^^Y
※なお、文中のタグはソースを表示するために全角の
<になっています。
そのままコピーして使う場合には注意してください。
今週の花言葉:ストック・紫(おおらかな愛情)