検索

キーワード


【Java】サーブレットの作成(基本的なコーディング)

  • 公開日:2020-10-29 17:57:57
  • 最終更新日:2020-12-16 20:56:45
【Java】サーブレットの作成(基本的なコーディング)

こんにちは。エンジニアの新田です!

ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。

今回は、主にJavaサーブレット/JSPについて触れていきます。

Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!

関連記事:【Java】Webアプリケーションからデータベースへの接続


サーブレットの作成の前に

サーブレットを作成する前に、前提知識として必要な部分について説明します。


HttpServletの継承

一般的にサーブレットを作成する場合は、javax.servlet.http.HttpServletクラスを継承します。

import javax.servlet.http.HttpServlet;

public class SampleServlet extends HttpServlet {

}


Javaのライブラリで、サーブレットに必要な機能(HTTP通信に特化した機能)を実装したクラスが提供されているので、開発者はHttpServletを継承し、メソッドをオーバーライドすることで、 自分たちのサーブレットを作成することができます。


【javax.servlet.http.HttpServlet】
GenericServletを継承した、HTTP通信に特化したサーブ レットクラス
【javax.servlet.GenericServlet】
Servletインターフェースを実装した一般的なサーブレットクラス



javax.servlet.http.HttpServletの構造

HttpServletの構造



HttpServletクラスの主なメソッド

init()メソッド

  • サーブレットの初期化処理をおこなうメソッド
  • 初期化パラメータの取得(後述)
  • サーブレットのインスタンス生成時に、一度だけ呼び出される。

service ()メソッド

  • リクエストを受け付け、レスポンスを返すメソッド
  • クライアントからリクエストがあるたびに実行される。
  • HttpServletクラスのservice()メソッドは、クライアントのリクエストの種類に応じて、以下の分岐をおこなう。
  •  ⇒ HTTP GET METHOD → doGet ()メソッドを実行
  •  ⇒ HTTP POST METHOD → doPost ()メソッドを実行

doGet()メソッド ※

  • HTTP GET METHODでリクエストを受け付け、レスポンスを返すメソッド

doPost()メソッド ※

  • HTTP POST METHODでリクエストを受け付け、レスポンスを 返すメソッド

destroy()メソッド

  • サーブレットの終了時に必要な処理を記述するメソッド
  • サーブレットのインスタンスが破棄されるときに呼び出される。

※ service()メソッドから分岐して実行される。



【service ()メソッドからの分岐イメージ

メソッドの呼び出し順



サーブレット(GET)の作成

それでは、実際にサーブレットを作成していきたいと思います。

1.doGetメソッドの宣言

2.java.io.PrintWriterの取得

3.出力内容(レスポンス)の作成

4.サーブレットの公開


doGetメソッドの宣言

HttpServletを継承したクラスを作成し、doGet()メソッドをオーバーライドします。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        // 処理を記入
    }
}



java.io.PrintWriterの取得

java.io.PrintWriterは、レスポンス情報を出力するためのオブジェクトで、getWriter()メソッドで取得します。

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
・
・
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
    }
}



出力内容(レスポンス)の作成

出力ストリームオブジェクトからレスポンスを出力します。

今回は、PrintWriterの持つprintlnメソッドを利用します。

public void println(String s);


ブラウザへ出力する文字列をHTML形式で指定します。

・・・
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
    ServletException, IOException {
    PrintWriter out = resp.getWriter();
    out.println("<html>");
    out.println("<head></head>");
    out.println("<body>");
    out.println("<h1>Hello Servlet!</h1>");
    out.println("</body>");
    out.println("</html>");
}



サーブレットの公開

サーブレットの公開とは、サーブレットをWebに公開して、ユーザーが利用可能な状態にする事です。

URLで指定されるパス(サーブレット名)と実際に実行されるサーブレットの紐づけを行います。

web.xmlに対して公開したいサーブレットとURLの対応 関係を記述します。

サーブレットの公開


web.xmlとは?

Webアプリケーションの定義ファイルのこと。Servletコンテナがこのファイルを解析し、必要な情報を取得したり、定義に従いアプリケーションを動作させる。

デプロイメント・ディスクリプタ(配備記述子)とも呼ばれる。


記述する内容

【サーブレットの情報

  • サーブレットの名前・クラス名の指定
  • 初期化パラメータ

【サーブレットのマッピング情報

  • サーブレットとサーブレット・パスのマッピングなど、様々な情報


web.xmlの例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID"
    version="2.5">
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>



web.xmlの主な要素

<web-app>
  ルート要素
  <servlet>
     サーブレットの情報を記述する。
    <servlet-name>
      サーブレットの別名を定義する。
    <servlet-class>
      サーブレットの(パッケージ名も含めた)クラス名を指定する。
      完全修飾名で指定する。
  <servlet-mapping>
    サーブレットとサーブレットパスの関連を記述する。
    <servlet-name>
      <servlet>で定義したサーブレットの別名を指定する。
    <url-pattern>
      サーブレットにアクセスするためのサーブレットパスを定義する。


各要素の関係は以下のようになります。

web.xml 要素の説明



ここまでの設定で、以下のURLパターンでサーブレットを起動することが可能になります。

http://localhost:8080/[※コンテキストルート]/hello

※コンテキストルートは実行環境に合わせてください。





今回は文字列を出力するだけの簡単なサンプルを例にサーブレットの作成方法を紹介しましたが、webアプリケーションにはパラメータの受け渡しやセッション管理、データベースアクセスなど様々な要素があります。次回以降の記事では、更に踏み込んでサーブレットの実装について紹介していきたいと思います。


関連記事:【Java】Webアプリケーションからデータベースへの接続


【著者】

新田

JavaメインのWebアプリケーション開発に多く携わっています。
Javaの基本的な部分の紹介や、これまで経験したシステム開発手法、新しい技術についても紹介していこうと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様