年末でJetty(絶対)にできる Android携帯サーバ活用小山博史のJavaを楽しむ(15)(4/4 ページ)

» 2010年12月27日 00時00分 公開
[小山博史,株式会社ガリレオ]
前のページへ 1|2|3|4       

「i-jetty」で持ち運べるAndroid上Webサーバ

 さて、自作のサーバアプリを作ってみましたが、SeverSocketを使ったプログラミングは、それなりに大変そうです。ここで、HTTPを使うWebアプリでよければ、「i-jetty」というアプリケーションを使う方法があります。

「i-jetty」を使ってみよう

 クライアントはWebブラウザになるので、Android携帯電話やiPhoneなどからでも簡単にアクセスして遊べます。i-jettyは、Android Marketで「i-jetty」と検索すると出てくるので、インストールしてください。

図9 i-jettyの実行画面 図9 i-jettyの実行画面

i-jetty用サーブレット開発

 i-jetty用Webアプリの開発は普通のサーブレット開発とほとんど変わりません。WARファイルを作成するときに、ちょっとだけ手数が必要になるだけです。

 Eclipseで普通にJavaプロジェクトを作成して、次のようなディレクトリ構成を用意します。「bin」フォルダへクラスファイルは生成されるようにし、ビルドパスには「lib\servlet-api.jar」を通します。()内は後で作成するファイルなので、最初は必要ありません。


 servlet-api.jarについては、「Apache Tomcat」のTomcat 7に同梱されている「servlet-api.jar」を使うと良さそうです。「Jetty WebServer」の「Jetty-8 eclipse(jetty-hightide-8.0.0.M2)」に同梱されているServlet APIを定義しているJARファイルを使ってもよさそうです。

 次にサンプルプログラムSimpleServlet.javaを作成します。これは、「Hello i-jetty!」というメッセージを返すだけのサーブレットです。これを作成して、「bin」フォルダへクラスファイルを生成しておきます。

package sample.ijetty;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
 
public class SimpleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)
    throws ServletException,IOException {
        httpServletResponse.setContentType("text/plain");
        PrintWriter out = httpServletResponse.getWriter();
        out.println("Hello i-Jetty!");
        out.close();
    }
}

 web.xmlは、次のようになります。i-jetty 2.1のサンプルを参照にして作成しました。Servlet 3.0 APIをサポートしているようです。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <display-name>hello</display-name>
  <servlet>
    <servlet-name>SimpleServlet</servlet-name>
    <servlet-class>sample.ijetty.SimpleServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SimpleServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

i-jetty用ビルド&デプロイ

 jarコマンドとdxコマンドを使ってi-jetty用のクラスファイルを用意します。

 まず、jarコマンドを使って、クラスファイルからJARファイルを用意します。jarコマンドを使うためには、JDKのbinディレクトリへPATHを通しておく必要があります。次に、dxコマンドでAndroid用のZIPファイルを生成します。dxコマンドを使うためには、Android SDKのdxコマンドが実行できるようにPATHを通しておく必要があります。

cd C:\sample\sample.ijetty.servlet\bin
jar.exe cvf sample.jar sample
dx -JXmx256M --dex --output=classes.zip C:\sample\sample.ijetty.servlet\sample.jar

 ここで生成したclasses.zipには、META-INFディレクトリとclasses.dexファイルが含まれています。できあがったclasses.zipファイルは「WebContent\WEB-INF\lib」へおきます。

 最後に、WAR形式へアーカイブします。次のようなコマンドになります。

cd C:\sample\sample.ijetty.servlet\WebContent
jar.exe cvf ..\sample.war WEB-INF *.*

 用意したWARファイル(ここではsample.war)はWebサイトのどこかに置いて、それをi-jettyでダウンロードして動かします。もしくは、WARファイルにする前のファイルを直接Androidのi-jettyのディレクトリ内にあるwebappsへ置くという方法もあります。

i-jetty用サーブレットの実行

 i-jettyを起動したら、[Download]を押してURLなどを指定します。「http://www.example.jp/android/sample.war」にWARファイルを置いたとして、i-jetty上でのパスを「/sample」としたい場合には次のように指定します。

図10 i-jettyのWebアプリダウンロード 図10 i-jettyのWebアプリダウンロード
  • Enter URL:http://www.example.jp/android/sample.war
  • Context Path:/sample

 Webアプリをダウンロードして、用意ができたら、Galaxy Tabでi-jettyを開始します。[Start Jetty]をクリックすると開始します、WebブラウザでWebアプリへアクセスします。Galaxy TabのIPアドレスが192.168.1.2で、contextに「/sample」を指定してダウンロードしてあったとしたら、「http://192.168.1.2:8080/sample」へアクセスすると、Webアプリが動いて結果が表示されます。

図11 i-jettyのサンプル 図11 i-jettyのサンプル

サーバサイドJavaが好きな人こそ

 さて、今回軽く調べてみましたが、Galaxy Tabでサーバアプリを稼働させることは十分可能なようです。ハードルは若干高いかもしれませんが、開発者でGalaxy Tabを入手したなら、一度はサーバアプリにチャレンジしてみたいと思うに違いありません。スマートフォンでは非力であきらめていた処理を実装することもできそうです。

 Androidはローカルでいろいろと自由にできて、遊ぶことができるという点が魅力です。「サーバサイドには興味があるけど、Androidのようなクライアントサイドはあまり興味がないなぁ」という開発者こそ、限られたリソースを使ってマシン性能を使いきるプログラミングの世界も知ってほしい気がします。

 年末年始は、持ち運べるAndroidサーバ開発で楽しんでみたらいかがでしょうか。

 本稿で作成したサンプルは、こちらからダウンロードできます

@IT関連リンク

はじめまして。Androidアプリ開発&デザイン
@ITスマソ開設記念! 女子部部長に聞くAndroid 年末も大注目のAndroidのアプリについて。制作のコツ、注意点、アイデア、ソーシャルサービスの生かし方などを探った
Smart & Social」フォーラム 2010/12/7

今日から始める! Androidケータイアプリ作成の基礎
デザイナも知っておきたい「Androidアプリ」とは 日に日に国内でのニュースが増えているAndroidケータイ。その特徴を押さえてアプリ作成を始めるための基礎を紹介します
Smart & Social」フォーラム 2009/11/19

Androidはオタクとオシャレのハイブリッドで流行る!
日本Androidの会 女子部に聞く 「女子部」の成り立ちや活動内容を中心に、Androidマーケットの問題点、UIデザインの重要性、ライバルであるiPhoneについて、など
Smart & Social」フォーラム 2010/1/21

HTML+JavaScriptでiPhone/Androidアプリを作る
Web技術でネイティブアプリを作れるTitanium(1) iPad/iPhone VS Androidに戸惑っているWebデザイナ/開発者のためにオープンソースの開発ツールを紹介します
Smart & Social」フォーラム 2010/2/18

Androidアプリはビジネスになるのか
ものになるモノ、ならないモノ(38) 「iPhoneアプリの次はAndroid?!」NECビッグローブのAndroidアプリ販売サイト「andronavi」を通して、その可能性に迫る
Master of IP Network」フォーラム 2010/2/12

Androidアプリで高速描画チューニングをするコツ
インタビュー特集:Google直伝!(1) Googleのさまざまなサービスを使いこなすコツをグーグル担当者に聞くインタビュー。初回は日本で端末販売がせまるAndroidについて
リッチクライアント & 帳票」フ ォーラム 2009/4/21

Smart&Social」フォーラム

スマートでソーシャルなアプリ開発のための総合技術情報フォーラム
Androidアプリ開発や携帯アプリ・モバイルFelica開発の情報はこちらへ、どうぞ

MONOist > 組み込み開発 > Android

ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします!

筆者プロフィール

小山博史(こやま ひろし)

情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)bugs(J)の活動へも参加している。

著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。