5.
Servletの基本
Servlet
Servletとは
Java Servlet(Servlet)は、Webサーバで動作するJavaプログラムで 「HttpServlet」クラスを継承して作成します。
Servletの役割
JSPはHTMLを出力する(View)には便利ですが、データ処理(Model)や複雑なロジック処理(Controller、Service)には向いていません。HTTPリクエスト処理はServletで処理する、MVCで設計するのが良いとされています。
- JSP:結果表示処理(View)
- Servlet:HTTPリクエスト処理(Controller)
JavaのMVC
MVCでは、Servletは「Controller」、JSPは「View」として設計します。また、JavaでMVC開発するには、Webフレームワークを利用するのが一般的です。

HttpServlet
「HttpServlet」クラス継承
「HttpServlet」クラスを継承すると、Webのリクエスト&レスポンスに関する処理が利用できます。

HTTPリクエストメソッド
「HttpServlet」を利用すると、HTTPメソッド(GETやPOST)によるデータ取得ができるようになります。HTTPリクエストのメソッドは以下の種類があり、「do」ではじまるメソッド名になっています。
HTTPメソッド | Servletメソッド |
---|---|
GET | doGet() |
POST | doPost() |
DELETE | doDelete() |
PUT | doPut() |
HEAD | doHead() |
TRACE | doTrace() |
OPTIONS | doOptions() |
GET/POSTリクエストメソッド
GETリクエストはdoGet() 、POSTリクエストはdoPost()で処理します。
public class クラス名 extends HttpServlet {
//GETリクエスト
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//GETリクエストの処理
}
//POSTリクエスト
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//POSTリクエストの処理
}
}
Servlet作成
Servletファイルを作成してみましょう。
Servletファイル作成
「ファイル > 新規 > その他...」を選択します。
ショートカットキー
新規ファイル作成は、ショートカットキーを利用すると便利です。
- Windows:Ctrl + N
- Mac:Cmd + N
サーブレット選択
「Web > サーブレット」を選択して【次へ】を選択します。ウィザード欄に「サーブレット」を入力して絞り込みむとよいでしょう。

サーブレットファイル設定
Javaパッケージ「sample」、クラス名「Hello」を入力して、【次へ】をクリックします。
【次へ】をクリックします。
そのまま【次へ】をクリックします。
この画面では自動挿入するHTTPメソッドを選択できますが、「doGet」「doPost」をチェックしたまま【完了】をクリックします。
「Hello」クラスが作成されました。doGet()、doPost()メソッドが自動挿入されています。
マッピング
サーブレットマッピングとは
サーブレットマッピングは、クライアントからのリクエストからServletを動かすための設定です。サーブレットマッピングは、ルーティングとも呼ばれ、2つの設定方法があります。
- web.xmlで設定
- WebServletアノテーション
URLとサーブレットマッピング(ルーティング)
クライアントがリクエストしたURLは、WebルートとURLパターンで構成されます。
ルーティングURL
http://ホスト名:ポート番号/コンテキストルート/URLパターン
web.xmlマッピング
「web.xml」でのマッピングは、XMLフォーマットでServletの設定をします。
サーブレットの設定
サーブレット全体は、servletタグに記述します。servlet-nameタグに「サーブレット名」、servlet-classタグにServletファイルの「クラスパス」を設定します。
<servlet>
<servlet-name>サーブレット名</servlet-name>
<servlet-class>クラスファイルパス</servlet-class>
</servlet>
マッピングの設定
マッピングはservlet-mappingタグに記述します。url-patternタグに「URLパターン」を設定し、「サーブレット名」と紐づけます。
<servlet-mapping>
<servlet-name>サーブレット名</servlet-name>
<url-pattern>URLパス</url-pattern>
</servlet-mapping>
URLパターンの設定例
「Hello」サーブレットにURLパターン「/hello」でアクセスする場合です。
ルーティングURL
http://localhost:8080/SampleJSP/hello
- コンテキストルート:SampleJSP
- URLパターン:/hello
サーブレットクラス
サーブレットクラスは「Hello」とします。

マッピング(XML)
「web.xml」で、Servletファイル「Hello」をURLパターン「/hello」でマッピングします。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>SampleJSP</display-name>
<servlet>
<servlet-name>hello-servlet</servlet-name>
<servlet-class>sample.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello-servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
- サーブレット名:hello-servlet
- サーブレットクラス:sample.Hello
アノテーションマッピング
各サーブレットファイルにアノテーションを指定してマッピングができます。アノテーションを使うと「web.xml」の設定なしで、Servletをマッピングできるのでシンプルです。
WebServletアノテーション
アノテーションでのマッピングは、@WebServletにURLパターンなどを設定します。
@WebServlet(URLパターン)
URLパターンの設定例
「Hello」サーブレットにURLパターン「/hello」でアクセスする場合です。
ルーティングURL
http://localhost:8080/SampleJSP/hello
- コンテキストルート:SampleJSP
- URLパターン:/hello
アノテーションの指定
@WebServletに「/hello」を指定します。
Hello.java
@WebServlet("/hello")
public class Hello extends HttpServlet {
...
}
GETリクエスト
Servletによる、GETリクエスト処理を実装してみましょう。URLパターン「/hello」でリクエストされた場合です。
http://localhost:8080/SampleJSP/hello
アノテーションの設定
「Hello」サーブレットの、WebServletアノテーションを「/hello」に修正します。
Hello.java
@WebServlet("/hello")
public class Hello extends HttpServlet {
}
GETリクエスト処理
doGet()で文字出力
GETリクエストされたときに「Hello, servlet」を表示するよう修正します。
Hello.java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//responseオブジェクトで処理
response.getWriter().append("Hello, servlet");
}
responseオブジェクト
「response」は、サーバレスポンス用のオブジェクトです。response.getWriter() はブラウザに文字列を出力するメソッドです。
response.getWriter().append(値);
ブラウザで確認
ブラウザで「/hello」にアクセスして確認してみましょう。

演習
問題1
クライアントからのリクエストとServletを紐づける設定をなんといいますか?
1)GETリクエスト
2)POSTリクエスト
3)マッピング
4)サーブレットクラス
問題2
Tomcatサーバーで、コンテキストルート「Shop」、URLパターン「item」のURLはどれですか?
1)http://localhost:8080/item/Shop
2)http://localhost:8080/Shop/item
3)http://localhost:8080/item/Shop/
4)http://localhost:8080/Shop/item/
問題3
ServletでPOSTリクエストのメソッドはどれですか?
1)protected void doGet(HttpServletRequest request, HttpServletResponse response) { }
2)protected void doPost(HttpServletRequest request, HttpServletResponse response) { }
3)protected void post(HttpServletRequest request, HttpServletResponse response) { }
4)protected void get(HttpServletRequest request, HttpServletResponse response) { }
問題4
HttpServletで、URLパターンを指定するアノテーションはどれですか?
1)@Override("list")
1)@URL("list")
1)@Pattern("list")
4)@HttpServlet("list")