• SAStrutsとmultipart/form-data

    2012年05月19日 16時38分
    SAStrutsを使っていて、formをsubmitしたら何故か404エラーという現象で困ったのでメモって置きます。

    RoutingFilterがHttpServletRequestのパラメータ名とActionのMethod名との一致をチェックしていますが、
    formがmultipart/form-dataだとHttpServletRequestのパラメータが空なので
    <s:submit/>で指定したMethod名が見つからずNot foundとなるようです。

    「index」というメソッドを実装しておくと、これがデフォルトで選ばれてforwardされるので、
    multipart/form-dataのフォームを受け取るActionには「index」という名前のメソッドを作って置こう。
  • Windows7のタスクバーにファイルをドロップしてアプリを起動

    2012年04月20日 19時41分
    前回の方法も間違いというほどではなく、
    あれはあれで使い道も有りそうですが少々手順が複雑です。

    そこで、もっと簡単な方法があったのでメモっておきます。


    Shiftキー押しながらドロップ


    ものすごく遠回りした気がします。

    さらに、Shiftキーを押さずにドロップを可能にするソフトもありました。
    ただ、常駐するタイプなのであまり好みではありません。

    レジストリを変更すればShiftキーの有り/無しをトグルに出来そうな気がして調べたのですが、該当のキーは見つかりませんでした。
    無いことは無いと思うのですが・・・
  • Windows7のタスクバーにドロップ可能なアイコンを置く

    2012年04月18日 20時31分
    Windows7の話です。

    プログラムのアイコンをタスクバー表示すると、開きたいファイルをドロップ出来ません。
    いや出来るのですが、「いつも表示」というわけのわからん物として登録されます。

    そうなると、ファイルをドロップする系のプログラム(テキストエディタとか圧縮プログラムとか)は
    デスクトップに置くことになるわけですが、これもウィンドウが上に被さったりして使いにくいです。

    そこで、タスクバーにアイコンを表示しつつファイルをドロップ出来るようにする方法を調べました。

    「Windows 8がそろそろ出ようかという時期に7の話かよ!」と思わなくもないですが、
    8がでても7はそれなりに使うと思いますのでメモっておこうと思います。


    1. タスクバーの固定を解除しておきます


    2. 適当にフォルダを作ります(仮にShortcutとします)
    スクリーンショット


    3. 作ったフォルダにタスクバーに置きたいショートカットを入れます
    スクリーンショット


    4. タスクバー上で右クリック → ツールバー → 新規ツールバー → 作ったフォルダを選択
    スクリーンショット

    選択するとこうなります
    スクリーンショット


    5. フォルダ左のブツブツを右クリック → アイコンを大きくして、ボタン名の表示とタイトルの表示をOFF
    スクリーンショット


    6. タスクバーに表示されるので、好みの位置に移動など
    スクリーンショット
  • D言語用 DirectX モジュール version 1.0.4

    2012年04月05日 20時36分
    winuserとimmを同時にインポートした際に名前が重複する定数を修正しました。

    directx_1_0_4.zip
  • HttpURLConnectionのタイムアウト

    2012年03月31日 12時09分
    JavaでHTTP接続が必要になったので、HttpURLConnectionを使おうと思ったのですが、
    connect timeoutとread timeoutの意味がよくわからなかったので調べました。

    調べた環境はjdk1.7.0_02 (Windows 64bit)です。

    connect timeout

    connect timeoutは接続にかかった時間で、setConnectTimeoutで設定します。

    引数はミリ秒で指定し、0を指定すると無限になります。
    デフォルト値はJavadocに書いてないのですが、0になっています。


    connect timeoutが発生するのはconnectメソッド内です。
    接続にかかった時間がtimeout値を超えるとSocketTimeoutExceptionが発生します。


    read timeout

    read timeoutはデータ取得にかかった時間で、setReadTimeoutで設定します。
    (リクエストを投げてレスポンスが帰ってくるまでの時間)

    引数はミリ秒で指定し、0を指定すると無限になります。
    デフォルト値はJavadocに書いてないのですが、0になっています。


    read timeoutが発生するのは、レスポンスデータを参照するメソッドです。
    • getContent
    • getHeaderFields
    • getInputStream
    • getResponseCode
    • getResponseMessage
    • getContentEncoding
    • getContentLength
    • getContentLengthLong
    • getContentType
    • getDate
    • getExpiration
    • getHeaderField
    • getHeaderFieldDate
    • getHeaderFieldInt
    • getHeaderFieldKey
    • getLastModified

    ただ、上記の内、SocketTimeoutExceptionが発生するのは次のメソッドだけです。
    • getContent
    • getHeaderFields
    • getInputStream
    • getResponseCode
    • getResponseMessage

    他のメソッドはnullとか0とかエラー値を返すだけです。
    SocketTimeoutExceptionが発生しないメソッドだけを使うと、
    timeoutが起こったことがわからないので注意が必要です。

    どのメソッドが例外を投げるかはJavadocに書いてないので実際の動作からしか読み取れません。
    (getInputStreamだけは書いてあったりしてますますよくわかりません。)
    実際に使用する環境でも念のため調べておいた方が無難でしょう。