8.1 サーブレットのアノテーションの概要
Tomcat は、バージョン 7 以降、Servlet API 3.0 Web サーブレット仕様のサポートを開始しました。特に、 と呼ばれるパッケージがその中に登場しましたjavax.servlet.annotation
。これには、サーブレット クラスに注釈を付けるために使用できるさまざまなタイプの注釈が含まれています。注釈を使用する場合、デプロイメント記述子 (web.xml) は必要ありません。
最も役立つ注釈のリスト:
注釈 | 説明 | |
---|---|---|
1 | @WebServlet |
サーブレットを宣言します |
2 | @WebInitParam |
初期化パラメータを指定します |
3 | @WebFilter |
Webフィルターを宣言します |
4 | @WebListener |
Web リスナーを宣言します |
5 | @ServletSecurity |
セキュリティ設定を構成できます |
例:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
サーブレットを宣言し、 で指定された URL に届くすべてのリクエストを処理するようにマッピングするには、1 つのアノテーションで十分です/api/*
。
8.2 サーブレットマッピングの設定
アノテーションには、@WebServlet
記述されるサーブレットの非常に柔軟な構成を可能にする多くのパラメーターがあります。主なものを見てみましょう。
属性 | 説明 | |
---|---|---|
1 | name |
サーブレットの一意の名前 (web.xml など) |
2 | displayName |
人間が判読できるサーブレット名 |
3 | description |
サーブレットの説明 |
4 | value |
マッピング用のURLを設定します |
5 | urlPatterns |
マップする URL のリストを指定します (値の代わりに使用されます) |
6 | initParams |
サーブレットの開始パラメータを設定できます。 |
7 | asyncSupported |
サーブレットが非同期 (HTTP/2) で実行できることを指定します。 |
8 | loadOnStartup |
サーブレットの起動優先順位を制御するシーケンス番号 |
9 | smallIcon |
小さなサーブレットアイコンを設定します |
10 | largeIcon |
大きなサーブレットアイコンを設定します |
ここにはいくつかの興味深い点があります。
まず、value
と はurlPatterns
交換可能な属性であることに注意してください。どちらも、サーブレットのマッピング先となる URL のリストを指定できます。
次に、このパラメータは、asyncSupported
サーブレットが HTTP/2 プロトコルを介して非同期リクエストを正しく処理するかどうかを示します。
3 番目の重要な属性は ですinitParams
。これにより、ServletContext に配置されるパラメーターのリストを設定できます。
例:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 フィルタマッピングの設定
前述したように、フィルターはサーブレットのユーティリティ タイプであり、サーブレットのように構成されます。アノテーションが持つ属性は次のとおりです@WebFilter
。
属性 | 説明 | |
---|---|---|
1 | filterName |
フィルターの一意の名前 (web.xml など) |
2 | displayName |
人間が読めるフィルター名 |
3 | description |
フィルターの説明 |
4 | value / urlPatterns |
マップする URL のリストを設定します |
5 | dispatcherTypes |
DispatcherType のリストを指定します |
6 | servletNames |
適用するサーブレットのリストを指定します |
7 | initParams |
フィルタの開始パラメータを設定できます。 |
8 | asyncSupported |
フィルターが非同期 (HTTP/2) で実行できることを指定します。 |
9 | smallIcon |
小さなフィルターアイコンを設定します |
10 | largeIcon |
大きなフィルターアイコンを設定します |
特定のサーブレットへのすべてのリクエストをインターセプトするフィルターの例:
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
複数のパラメーターを指定したフィルターの例:
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
RequestDispatcher のタイプを指定したフィルターの例:
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
フィルタとサーブレットの目的については、次の講義で詳しく学びます。
GO TO FULL VERSION