SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

軽量・高速・安価で、安定性と信頼性も兼ね備えたWebSphere Application Serverの「Liberty Core」を使ってみた

  • このエントリーをはてなブックマークに追加

ダウンロード PostalCodeJSF.zip (2.1 MB)
ダウンロード PostalCodeService.zip (2.1 MB)
ダウンロード PostalCodeServlet.zip (2.1 MB)

4. Servletアプリケーションの作成と実行

 環境の準備ができたので、まずは基本的なServletのプログラムを作って動かしてみよう。通常通りプロジェクトマネージャーから「動的Webプロジェクト」を作成し、ランタイムおよび構成にLiberty Profileを選択する。本稿では、郵便番号から住所を取得するアプリケーションを、「PostalCodeServlet」という名称で作成した(図4.1)。

図4.1
図4.1

 まず、郵便番号を指定して住所を取得するためのクラスとして「com.example.postcode.PostalCode.java」を用意した。郵便番号データは、日本郵便が公開しているCSVデータから郵便番号と住所の部分を抜粋したファイルを用意し、クラスの初期化時にMapに読み込むようにしている。実際に検索を行うのはget()メソッドである。

リスト4.2 PostalCode.java(importなどを省略)
public class PostalCode {

    private Map<String, String> postalCodeMap = new HashMap<>();
        
    public PostalCode() {
        try (BufferedReader reader = 
             new BufferedReader(new InputStreamReader
                                (this.getClass().getResourceAsStream("postalcode.csv"), "UTF-8"))) {
                
                String line;
                StringTokenizer token;
                while ((line = reader.readLine()) != null) {
                    token = new StringTokenizer(line, ",");
                    String code = token.nextToken();
                    String address = token.nextToken();
                    this.postalCodeMap.put(code, address);
                }
            } catch(IOException ex) {
            ex.printStackTrace();
        }
    }
        
    public String get(String postalcode) {
        String address = this.postalCodeMap.get(postalcode);
        if (address == null) {
            address = "NoData";
        }       
        return address;
    }
    
}

 Servletクラスは次のようにした。init()でPostalCodeの初期化を行い、doGet()ではパラメータとして郵便番号を受け取り、PostalCode.get()メソッドで住所を検索して画面に結果を返す。

リスト4.3 PostalCodeServlet.java(importなどを省略)
@WebServlet("/PostalCodeServlet")
public class PostalCodeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    private PostalCode postalCode;
       
    public PostalCodeServlet() {
        super();
    }

    public void init() throws ServletException {
        this.postalCode = new PostalCode();
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {

        String postalcode = request.getParameter("postalcode");
        
        String address = this.postalCode.get(postalcode);
        String result;
        if (!address.equals("NoData")) {
            result = "<p style='font-size:large'>〒" + postalcode + " の住所は</p>"
                + "<p style='font-size:x-large'>" + address + "</p>"
                + "<p style='font-size:large'>です。</p>";
        } else {
            result = "<p style='font-size:x-large'>〒" + postalcode + " は存在しません。";
        }
        
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Sample Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println(result);
        out.println("</body>");
        out.println("</html>");
        out.flush();
        out.close();
    }
        
}

 Webページ側は次のようになる。

リスト4.4 index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample Servlet</title>
</head>
<body>

  <p style='font-size:large'>郵便番号を入力してください。</p>

  <form action="PostalCodeServlet">
    <input type="text" name="postalcode" size="50"/>
    <input type="submit" value="送信"/>
  </form>

</body>
</html>

 アプリケーションが準備できたら、サーバー上で実行してみる。単純なServletであれば特別な設定は必要ない。プロジェクトマネージャーから[実行]-[サーバーで実行]を選び、使用するサーバーとしてLiberty Profileを選択すればよい。

図4.5
図4.5

 起動に成功すれば、EclipseのWebプレビューでServletの動作を確認できる。

図4.6
図4.6
図4.7
図4.7

 注目すべきはサーバーの起動時間だ。初回でも、ものの数秒で起動およびアプリケーションのデプロイが完了する。また、ホットデプロイの仕組みが組み込まれているため、ソースコードや設定を書き換えた場合でも、サーバーを再起動することなく自動で変更が反映される。反映にかかる時間も、ものの1~2秒といったところだ。

図4.8
図4.8

 軽量という謡い文句のとおり、極めてスムーズな動作が実現されており、コーディングとプレビューの繰り返しをストレスなく行うことができる。

次のページ
5. JSF+Facelets+CDIを利用する

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

杉山 貴章(スギヤマ タカアキ)

有限会社オングスにて、Javaを中心としたソフトウェア開発や、プログラミング関連書籍の執筆、IT系の解説記事やニュース記事の執筆などを手がけている。そのかたわら、専門学校の非常勤講師としてプログラミングやソフトウェア開発の基礎などを教えている。著書に『Javaアルゴリズム+データ構造完全制覇』『Ja...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7697 2014/04/01 13:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング