鈴木ソフトウェア研究所

SSLabにようこそ! 得意とするところ
  • Java Aplication 開発
  • Web Application 開発
  • 装置制御ソフトウェア開発
今までの開発実績 その他

Tips

今まで悩んだものを順不同で書き並べてあります。 何かの参考にでもなれば。

Last Updated 2002.10.15


  • Servlet のセッション管理方法は?

    J2EE Tutorial の Servlet のところに書いてある。 要約すると、cookie が使えれば使うし、使えなければ URL に埋め込む。 ただし、URL を直接書いちゃダメ(あたりまえ)。 encodeURL() が返す値を使うこと。 埋め込むべきかどうか自動判定してくれる。

  • フリーな EJB コンテナは?

    JBoss がある。 ポート 8080 はデフォルトでは空なので、びっくりしないこと。 最初は J2EE 附属のコンテナを使って Tutorial をやってみれば。

  • Mac OS X で J2EE を動かすには?

    動くが、注意する点がいくつかある。

    • deploytool は Metal Look & Feel で動かす。 deploytool 自体は shell script なので、ちょっといじって、-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel が java に渡るようにする。
    • デフォルトの locale が shift-jis なので、jterminal などで動かす場合は、j2ee -verbose |& nkf -u -e などとする。
    • 大量にメモリを使うので、j2ee, deploytool, runclient など同時に動かすにはそれなりのメモリを実装すること。

  • (番外編)パスネットは便利

    パスネットで、横浜から渋谷まで東横線、乗り換えて新玉川線で池尻大橋に行ったら、いったん改札を出たのに、乗り継ぎと見倣された。 賢いね。 同行した友人は、横浜 - 渋谷、渋谷 - 池尻大橋、と切符を買い直したので、高かった。

  • HTML の </FORM> で改行されないコツ

    通常、</FORM> の後は改行が入るブラウザが多い。 <TABLE> の各行に <FORM> を入れると改行されて腹が立つ場合は、 <FORM><TR>...</TR></FORM> とすると改行されない場合がある。

  • Tomcat: JSP で Bean を見つけられない。なぜ?

    Bean を package にする。 Tomcat が生成する Java のソースを見ると、package 宣言が入っている。 そのため、package でない Bean には Tomcat が付ける package 名が付いてしまい、見つけられない。 JSP の先頭の page 指令に import 属性を入れる手もあるが、Bean を package にした方が後々まごつかない。

  • Java の String を XML Parser に渡したい。

    Parser はエンコード済みのバイト列を期待しているので、Java の String は直接は渡せない。 いったん、XML 宣言にある Encoding で byte[] にし、byte[] から ByteArrayInputStream を作って Parser に渡せば良い。

  • Tomcat の web.xml での失敗

    Servlet mapping に "/" を入れるとえらいことに...

  • Display-less マシンで Java での描画ができない。なぜ?

    Unix 系システムでは、描画のための情報を X Window System から得ている Java 処理系が多い。 Java VM が X の client になるわけ。 使わなくても X を動かしておけば良い。 Display Hardware がない場合は vnc が使える。 ただしセキュリティには注意を!

  • Java で JPEG イメージを作るには?

    Sun の J2SDK や JRE に付属する com.sun.image.codec.jpeg パッケージが使える。 ただし、これは全ての J2SE プラットフォームで実装されているわけではない。 また、Batik の JPEGTranscoder も使える。

  • HTML の Anchor タグの中の & について。

    Anchor タグの中の & を &amp; にするのは忘れがち。 たとえば次のように。 詳しくはここを見よ。

    • 誤: <A HREF="submit.html?a=123&b=456">
    • 正: <A HREF="submit.html?a=123&amp;b=456">

  • MHonArc のリソースに ISO-2022-JP 日本語を使う姑息な方法

    MHonArc ではリソースファイル内に $名前$ という文字列を見つけると、変数と見倣して値に展開しようとする。 ISO-2022-JP の日本語には $ が含まれるため、リソースファイルに ISO-2022-JP で日本語を書くのはタブーだった。 変数の展開を抑制できれば、この問題を解決できるが、ISO-2022-JP の shift in/out を追跡せねばならず、そう簡単ではない。 そこで姑息な方法を紹介する。

    <DefineVar> という、ユーザ変数を定義するためのエレメントがある。 これを利用して、日本語の値を持つ変数を作る。

    <DefineVar>
    MyVariableName
    なに
    </DefineVar>
    これで $MyVariableName$ が「なに」と展開されるようになる。 しかし、ISO-2022-JP の「なに」には 3 個の $ が含まれるため、このままではまた変数展開されてしまう。 そこで、MHonArc のソースを一箇所変更する。
    --- mhrcvars.pl.orig	Thu Aug 22 00:13:23 2002
    +++ mhrcvars.pl	Thu Aug 22 00:13:30 2002
    @@ -611,7 +611,7 @@
     	## User defined variable check ##
     	## --------------------------- ##
     	if (defined($CustomRcVars{$var})) {
    -	    $expand = 1;
    +	    $expand = 0;
     	    $tmp = $CustomRcVars{$var};
     	    last REPLACESW;
     	}
    
    ご覧のように、$expand = 1$expand = 0 に変えるだけである。 これは、ユーザ定義変数に限っては、これ以上変数展開をしないようにするという意味である。 これで「なに」の中の $ が展開されることはなくなったので、次のように安心して $MyVariableName$ を使える。
    <IdxTitle>
    Handle $MyVariableName$ safely
    </IdxTitle>
    日本語を使うたびに <DefineVar> するのが面倒だが、MHonArc のソースの変更が最小限(1 バイト、いや 1 ビット(笑))で済むのだから、文句は言えないね。

  • Unix Clone で ISO9660 イメージファイルをマウントする方法
    • Linux など loop device があれば、それを使う。
      mount ファイル名 /mnt/cdrom -t iso9660 -o loop
      
    • BSD 系では vnode disk を使う。
      vnconfig vn0c ファイル名
      mount -t cd9660 -o ro /dev/vn0c /mnt/cdrom
      
  • Jakarta Struts と日本語

    世の中が全て Unicode になるまでは、Web Application プログラマーは日本語エンコード方法にまつわる悩みから逃れることはできないだろう。 Struts も例外ではない。

    • 入力フォームが化ける

      src/share/org/apache/struts/util/RequestUtils.java の populate() で、request の locale の getLanguage() が Locale.JAPANESE.getLanguage() と等しければ、JISAutoDetect を使って変換してやる。100% 確実ではないが、しようがない。

    • 表示で日本語が???になる

      <%@ page で contentType="text/html; charset=euc-jp"> などを忘れていませんか。

    • html:submit のラベルを国際化するには

      <html:submit><bean:message --></html:submit>

  • Java: JTree でダブルクリックを扱うには?

    JTree の Javadoc に説明がある。

  • Java: ウィンドウを前に出すには?

    java.awt.Window.toFront()

  • Java: JTextField などを伸び縮みするようにするには?

    setPreferredSize(null)

  • Java: 文字コード(Encoding)を指定して出力するには?

    OutputStreamWriter を使う。

  • Tomcat: Servlet の path を得るには?

    getServletContext().getRealPath("...")

  • Java: this に注意!

    無名クラス内の this は無名クラスのインスタンスをさす。

このページに関するお問い合わせは まで。