ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2015年3月14日土曜日

[Android] [Java] 親クラスのクラス名を得る

extendsで親クラス名を書いていますので、それを再び書けばいいのですが、DRYじゃなくなるので以下の書き方を使っています。

2015年3月12日木曜日

[Android] R.string.*から文字列(String)を取得する

XML内では@string/somekeyのように書くことでres/values/strings.xmlに定義した文字列(下例参照)を得られます。



しかし、Javaコードの中では単純にR.string.somekeyはint値であるため、そのままでは指定した文字列を得られません。getResources().getString(int)を使います。




2015年1月15日木曜日

[Java] [Amazon Product Advertising API] ASINを指定して本のタイトルと著者を得るサンプル

Amazon Product Advertising API を使って、ASINを与えることで、当該商品(ITEM)の商品名を得るサンプル(Sample Code & Libraries : Amazon Web ServicesProduct Advertising API Signed Requests Sample Code - Java REST/QUERY)をベースASINを指定した書籍のタイトルと著者を取得するメソッドを作ってみました。

作ってみた(元々のサンプルに手をいれた)サンプル => AWSTest

ビルドにはcommons-codecライブラリ(外部jar)が必要ですのでリンク先から取得してプロジェクトに追加してください。

また、実行にはAmazon Access Key ID、Amazon Secret Access Key、Amazon Affiliate IDの指定が必要です。この3つの値をItemLookupSampleクラスのAWS_ACCESS_KEY_ID、AWS_SECRET_KEY、AWS_AFFILIATE_IDのstatic変数にそれぞれセットします。

mainメソッドはItemLookupSampleにあります。

参考:
 ・Amazon Product Advertising API を利用して世界各国の商品価格差リサーチツールを作ってみる | imagination-i
 ・ISBN、UPC、JAN、EAN、ASINとは?

2014年6月30日月曜日

ServletのFilterで文字コードを統一する

Servletにおいては、リクエストボディの文字コードの指定とレスポンス(出力)の文字コードの指定を

のように指定しますが、各Servletで個別に設定するのは保守の観点からよくないです。 

ですので、システム全体で一カ所で指定したいということになります。
これを行うにはServletのFilterインタフェースで実装することができます。

FilterインタフェースはServletの実行の前後に呼び出され、Servletに渡す種々の値に加工や絞り込み、値による認証等を行ったり、Servletの実行結果を加工してクライアントに送るといった事等を行うことができます(まさにフィルターです)。


initとdestroyの両メソッドは初期化処理と終了処理としてコールされます。マルチスレッド環境(つまりはServlet環境)では、initが最初のスレッドがこのフィルタを使うシステムにアクセスしたタイミングで、destroyがこのフィルタが全てのスレッドからの参照を失って廃棄されるタイミングでそれぞれ一度だけコールされるため、マルチスレッドに対応した仕組みになっています。ここではinitにおいてweb.xmlにキー"encoding"で設定された値をFilterConfigオブジェクトを使って読み出し、privateフィールドのencodingにセットしています。destroyではこの例では何も処理を行っていません。

doFilterメソッドはリクエストの度にコールされるこのフィルターの本体です。
ここで、initメソッドで得たencodingの値を使って文字コードを設定する事で個別のServletに文字コードを指定せず、一元化することができます。
responseのContent-Type="text/html"のcharsetにも指定した文字コードを渡しています。これによって出力の文字コード変換が行われ、同時にサーバ(Servlet)側からクライアント(主にブラウザ?)に使用している文字コードを明示的に伝える事ができます。そんなサーバの指示を無視して勝手に動くクライアントもいますが(^^;;

ちなみに、web.xmlには以下のように記述します(例では文字コードをShift_JISとしています)。


参考)
 ・http://www.ne.jp/asahi/hishidama/home/tech/java/j2ee/filter.html
 ・サーブレットで文字化けに対応する方法
 ・Servlet/JSPで漢字を扱う