So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

JavaのHTTPリクエストパラメータの日本語化け [Java]

 またしても、はまってしまいました。
 Javaでサーバー側のアプリを書いていたのですが、クライアントからのHTTPリクエスト中のパラメーターが文字化けしてしまうのです。

 Java では、通常、HTTPリクエスト中のバラメーターは、
  value = request.getParameter( name);
 で取得できるのですが、日本語が入ると文字化けしてしまうのでした。
 おかしいな・・送信はきちんとUTF-8をURLエンコードしているのは確認したし、このメソッドは自動でURLデコードされるはずだし・・・
 しばらく調べていて、次の事実に気がつきました。
 「上記メソッドでは、日本語文字を ISO8859_1 で処理する。」
 送信はUTF-8で送っていますので、そりゃ化けます。Java本体がUTF-8で動作しますので、てっきりUTF-8で処理しているものだと思い込んでいました。

 原因がわかれば対処は簡単。上記コードを次のように変更すれば解決です。
  value = request.getParameter( name);
  value = new String( value.getBytes("ISO8859_1"), "UTF-8"); // 文字コード変換

 丸一日つぶしてしまいました。
 原因がわかるまでが大変なんですよねぇ・・・

-------------
店舗/事務所などでの安価なBGMがご入り用な方は、ぜひ一度ご検討ください。下記ページで営業しております。試聴/問い合わせ/申し込みなども受け付けております。
 湧音 http://www.YouOn.info/ JASRAC許諾第9011941001Y31015号
タグ:Java getParameter

Commons File Upload で AJAX用のファイルアップロードサーブレットを配置 [Java]

 湧音の業務用BGM配信は、普通の有線放送などとは異なり、業者以外の一般の方々からアップされた音楽も配信しています。
 つまり、会員制の音楽投稿サイトの性格も持っており、この投稿された音楽と業者からの音楽が自動的にミックスされて配信されます。
 受信側では、PC画面上(または受信機)に、投稿された音楽のアーティスト名やタイトルが表示されますので、うまくいけばそれなりの宣伝になりますし、もとより自分の作った曲が店舗に流れている、という満足感も得られるのではないか、というわけです。
 業務用配信としては、このような投稿システムとの連動はとても珍しいと思います。個人向けの配信であれば山ほどありますが、業務用の演奏権の包括契約ができるのは他にないのではないでしょうか。

 というわけで、運用を行いつつシステムを改善していっています。
 いままでは、音楽データの投稿はWebサイトの画面上では直接できず、メールやファイル便などを利用していました。しかしいつもでもそれでは格好が悪いので、そろそろWebで直接投稿できるようなシステムの構築を始めました。
 湧音のサイトは、Webサイトと配信サーバーは別になっています。なので、投稿自体はWebサイトで受け付け、音楽データは配信サーバー上に配置することになります。
 そのため、Webサイト上のフォーム/スクリプトと、配信サーバー上のサーブレットが必要になります。
 まず、配信サーバ上のサーブレットを作成してみました。

 サーブレットですので、TOMCAT/JSP で記述します。Apache Commons の FileUpload を使えば簡単にできます。

 適当なところに fileupload.jsp を用意して、jspファイルを新規作成します。
 このjspでファイルアップロードを受け付けます。AJAX で使用しますので、

 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 を一行目に書きましょう。で以下、
 <%@ page language="java" %>
 <%@ page contentType="text/xml; charset=UTF-8" %>
 <%@ page import="java.io.File"%>
 <%@ page import="java.util.Iterator"%>
 <%@ page import="java.util.List"%>
 <%@ page import="org.apache.commons.fileupload.FileItem"%>
 <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
 <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
 <%@ page import="org.apache.commons.fileupload.servlet.ServletRequestContext"%>
  ・
  ・
 というのが続きます。必要なだけ記述します。

 実際の処理はJSPですので、
 <%
で始まります。

 // まず、try で囲っておきます。
 try {
  // どこにファイルを保存するかを決めておきましょう。
  File fileDir = new File( "/tmp" );

  // まずは、ファイルアップロード(マルチパートリクエスト)かどうかを判定しましょう。
  if ( ! ServletFileUpload.isMultipartContent(new ServletRequestContext(request)) ){
   throw( new Exception("ファイルアップロードではありません。") );
  }

  // アップロードらしいので、続いてアップロードオブジェクトを作成します。
  ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());.

  // マルチパートリクエストですので、パートをひとつづつ処理していきます。
  List<FileItem> list = upload.parseRequest(request);
  for (Iterator<FileItem> iter = list.iterator();iter.hasNext();) {
   // パート(FileItem)をひとつ取得します。
   FileItem aItem = (FileItem)iter.next();
   // ファイルデータかどうかを判定します。
   if(aItem.isFormField()){
    // ファイルデータではないので、次のパートに進めます。
    continue;
   }
   // ファイルアップロードをひとつ処理します。
   // ファイル名は、送信されてくるものをそのまま使ってみます。
   String fileName = (new File(aItem.getName())).getName();
   // 保存先のFileを作成します。
   File newFile = new File( fileDir, fileName );
   // ここでアップロードされたファイルを保存します。
   aItem.write(newFile);
   // これで、ファイルデータひとつ分の処理はおしまいです。
  }

  // エラーがなければ、XMLで成功を返します。
  %><response><return>0</return</response><%
 } catch( Exception e ){
  // エラーがあれば、エラーを返します。
  %><response><return>-1</return></response><%
 }

 %>
 これでJSPの処理はおしまいです。
 
 今回は XML で返しましたが、普通のフォームを受け付けるときはではHTMLで返します。HTMLの場合は、最初の<xml>を<html>に変えて、最後のレスポンスを返す代わりになにかHTMLで返すだけです。

--------------
店舗/事務所などでの安価なBGMがご入り用な方は、ぜひ一度ご検討ください。下記ページで営業しております。(鋭意構築中です。試聴/問い合わせ/申し込みなども受け付けております)
 湧音 http://www.YouOn.info/

axis2->phpでのオブジェクトの引渡しができない・・・ [Java]

 湧音のBGMサーバーは、その管理用に TOMCAT による管理画面を持っています。
 で、これを外部のサイトより直接コントロールするために、axis2を使ってSOAPによるWebサービスを構築しようとしています。
 サーバー上に、Javaクラスを配置し、特定のクラスを Webサービスとして axis2で公開するのですが、

 ・SOAPサーバーからPHPクライアントにJavaデータクラスオブジェクトを渡す方法が・・・わからない。

 で詰まっております。
 PHPクライアントからは、普通に SoapClient で呼び出し、結果を取得することはできます。
 TOMCAT/axis2で定義されたJavaの型なら問題なく受け取ることができるのですが、JavaのデータクラスのオブジェクトをPHPクライアント側に渡す方法が・・・まだちょっと理解できていないのです。
 なので、仕方なく、定義された基本型に変換して渡しています。でもそれはすごく不恰好ですし、美しくないです。

 Webサービス以外の管理画面は、TOMCAT/JSPで動作しています。そちらでは、JavaのデータクラスをXMLドキュメント化してクライアントに渡しています。同様のことをSOAP/PHPクライアントでやりたかったのですが・・・・なかなか資料が見つかりません。
 
 こういう開発では、方法さえわかれば何とかなります。どうも私の知識不足と英語力不足もあり、なかなか資料を読み解くことができず方法がわからないと、いつまでも詰まってしまいます。困ったものです。
 もっと資料を集めなければ・・・・

--------------
店舗/事務所などでの安価なBGMがご入り用な方は、ぜひ一度ご検討ください。下記ページで営業しております。(鋭意構築中です。試聴/問い合わせ/申し込みなども受け付けております)
 湧音 http://www.YouOn.info/

Eclipse 3.4 Ganymede で Visual Editor を使う [Java]

 Javaでの開発では Eclipse を使用しているのですが、GUI開発で必要な Visual Editor がしばらく提供されていません。
 とっても古い Eclipse 用のものはありましたが、Eclipse 3.4 Ganymede でも標準では入っていないようです。なので、特に入れてみました。
 通常、Eclipse の AddOn は、Help->Software Updates->Available Software からインストールしますが、素の Eclipse 3.4 ganymede では Visual Editor がリストアップされません。なので、
 Add Site で、以下の Visual Editor のサイトを登録します。
  http://update.soyatec.org/Ganymede/ve/1.4
 すると、Visual Editor がリストアップされますので、後は通常通りインストールするだけです。
 Java の Visual Class を開くときに Visual Editor を使うことができます。

----------
 最近確認したら、上記アドレスではだめで、http://download.eclipse.org/tools/ve/updates/1.4/ だとうまくいきました。(2009/11/16)

javax.mail で POP before SMTP [Java]

JSP で SMTPメールを送信していましたが、POP before SMTP のサーバに送信する必要ができましたので、対応してみました。

通常は、
 Session session = Session.getDefaultInstance( props, null );
 MimeMessage mimeMessage = new MimeMessage( session );
となりますが、POP brefore SMTP の場合はこの間に処理を挟みます。
 Session session = Session.getDefaultInstance( props, null );
 Store store = session.getStore( "pop3" );
 store.connect( popServerAddress, popPort, popAccount, popPassword );
 MimeMessage mimeMessage = new MimeMessage( session );
これで、POP before SMTP で送信できます。

以下、営業です
--------------
店舗/事務所などでの安価なBGMがご入り用な方は、ぜひ一度ご検討ください。下記ページで営業しております。(鋭意構築中ですが、視聴/問い合わせ/申し込みなどは受け付けております)
 http://www.YouOn.info/
タグ:Java

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は180日以上新しい記事の更新がないブログに表示されております。