年末でJetty(絶対)にできる Android携帯サーバ活用:小山博史のJavaを楽しむ(15)(4/4 ページ)
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集部)
「i-jetty」で持ち運べるAndroid上Webサーバ
さて、自作のサーバアプリを作ってみましたが、SeverSocketを使ったプログラミングは、それなりに大変そうです。ここで、HTTPを使うWebアプリでよければ、「i-jetty」というアプリケーションを使う方法があります。
「i-jetty」を使ってみよう
クライアントはWebブラウザになるので、Android携帯電話やiPhoneなどからでも簡単にアクセスして遊べます。i-jettyは、Android Marketで「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」としたい場合には次のように指定します。
- 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アプリが動いて結果が表示されます。
サーバサイド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開発の情報はこちらへ、どうぞ
ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします!
筆者プロフィール
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
- ビルドツールGradleのインストールと使い方、Jenkins/Git連携
- JBoss Forgeでアジャイルな対話式開発をやってみた
- JavaとJavaScriptの良いとこ取り? 「Dart」超入門
- 年末でJetty(絶対)にできる Android携帯サーバ活用
- UNIX/Linuxも楽しむ Java開発者になるための学習法
- Subversionならできる! NetBook最強バックアップ術
- 「Javaは遅い」から「Javaは楽しい」に至る歴史
- Javaはクラウドのプラットフォームになり得るのか
- 【新人なるプログラマーへ】ソースコードを読みましょう
- Google Android用携帯アプリ作成のための基礎知識
- デスクトップをJava製ウィジェットでにぎやかに
- そろそろブログ+RSSアプリでも作ってみませんか?
- JavaFXでJava RIA開発はどれくらい変わるの?
- 【新人研修向け特別企画】JavaでPHPを使ってみた
- (Java+Derby)* Ruby on Rails プログラミング
- 待望のJava SE 6 でパーシステンス
- いろいろなJavaを使ってみよう
- JavaとJavaScriptの親しい関係
Copyright © ITmedia, Inc. All Rights Reserved.