サーバサイドJavaとかで使えるガラケー向けの便利機能集
まず、本家から主要なファイルをダウンロードする。 mobylet(モビレット) | 過去のダウンロード | 携帯Webアプリケーションを開発するためのJavaオープンソースフレームワーク
今回はバージョン1.0.5を使う。なんだか1.0.6はJSPのtiles周りの処理に問題があるのかちゃんと動かなかったので・・・とにかく1.0.5の以下5つのファイルをダウンロードする。
mobylet-charset | 携帯の絵文字などを処理する文字コードライブラリ |
mobylet-core | mobyletのコアとなるライブラリ |
mobylet-taglibs | mobyletの便利なtaglibを利用するためのライブラリ |
mobylet-mail | 絵文字入りメール、デコメール等を送るためのライブラリ |
mobylet-s2extension | S2のフレームワークに適用するための拡張ライブラリ |
そして以下のようなライブラリ置き場に設置
/hoge/src/main/webapp/WEB-INF/lib
Eclipseとか使っているのなら、プロジェクトのプロパティーのJavaビルドパスからJarの追加で5つを追加しておく
これで設置完了
mobyletにはフィルターが実装されていて、これによりデバイス判定や、出力の変換を行ってくれる。 これをweb.xmlに記述することで機能させる。
自分はこうしてみた、mobyletfilterの記述は処理のかなり早い段階で行わないといけないようなので前のほうに書いてある。 これは環境によりけりなのでどうともいえないがまず一番先頭に書いてみて調整してみるといいと思う。
もうひとつポイントはSAStrutsの場合、それ向けの専用のS2MobyletFilterというフィルタがあるのでそっちを使うといいみたい。
通常普通にSAStrutsのプロジェクトを作るとencodingfilterがもうすでに設定されていると思うがmobyletfilterが肩代わりしてくれるのでこいつは設定から外す。
mobyletfilterへのURLのマッピングを記述する。特定のURLだけ処理を効かせたい場合はここに記述するとよいだろう。
<?xml version="1.0"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <context-param> <param-name>sastruts.VIEW_PREFIX</param-name> <param-value>/WEB-INF/view</param-value> </context-param> <filter> <filter-name>mobyletfilter</filter-name> <filter-class>org.seasar.mobylet.http.S2MobyletFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 以下省略 --> <!-- <filter> <filter-name>encodingfilter</filter-name> <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> --> <filter-mapping> <filter-name>mobyletfilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
mobyletは設定なしでもデフォルトである程度それっぽく動作するのだが、設定ファイルを設置して挙動を変更することができる。まったく指定しないということは無いので設定デフォルトでいいから設置しておこう
ファイルはこの位置に設置する
/hoge/src/main/resources/mobylet.xml
内容はこんな感じにしてみた。throughの項目でotherが指定されているのは、主要3キャリア以外が来た場合はmobyletの処理を通さないことを意味している。
<?xml version="1.0" encoding="UTF-8"?> <mobylet> <initializers> <chain>org.mobylet.core.initializer.impl.MobyletInitializerImpl</chain> <!-- <chain>org.mobylet.mail.initializer.MobyletMailInitializer</chain> --> </initializers> <through> <carrier>OTHER</carrier> <!-- <carrier>DOCOMO</carrier> <carrier>AU</carrier> <carrier>SOFTBANK</carrier> --> </through> <default> <contentType>XHTML</contentType> </default> <!-- --> <device> <basedir>device/</basedir> </device> <emoji> <basedir>emoji/</basedir> <!-- <imagePath>/images/emoji/</imagePath> --> </emoji> <!-- <secureGateway>NONE</secureGateway> --> <!-- <cssExpand>true</cssExpand> --> <!-- <proxy> <host>proxy.mobylet.org</host> <port>8080</port> </proxy> --> </mobylet>
株式会社バリューエンジンから端末ごとの情報がダウンロードできるようになっているので、こいつをダウンロードする。
株式会社バリューエンジン|ケータイ端末プロファイルダウンロード
ダウンロードして解凍。CSVファイルが3つでてくるのでそのファイル名の日付部分を除去する。そしてdeviceディレクトリ(無いなら作る)にコピーする。
/hoge/src/main/resources/device/
モバイルの各種情報をMobyletオブジェクトから取得できる。こいつをDIコンテナからインジェクションしてもらうために
app.dicon
ファイルに↓こう書いておくと
<include path="mobylet.dicon" />
Actionでこのように書くことで自動的にインジェクションされる。
public class IndexAction { @Resource protected Mobylet mobylet;
設定ファイルのmobylet.xmlに
<secureGateway>SECURE_CARRIER</secureGateway>
を追記する。これはキャリアのIPアドレスリスト(mobyletに内臓されている)とリクエスト元のIPアドレスを比較して一致しなければPCからのアクセスとみなすという記述。
これだと開発がやりにくいので
/hoge/src/main/resources/ip
ディレクトリ以下(無ければ作る)に
EXTENSION.txt
を作って中に無条件で許可するIPアドレスを記述する。こんな感じでローカルを指定すればいいだろ。
127.0.0.1