Servlets-annotations

提供:Dev Guides
移動先:案内検索

サーブレット-注釈

これまで、ServletがアプリケーションをWebサーバーにデプロイするためにデプロイメント記述子(web.xmlファイル)を使用する方法を学びました。 サーブレットAPI 3.0では、javax.servlet.annotationという新しいパッケージが導入されました。 サーブレットクラスに注釈を付けるために使用できる注釈タイプを提供します。 注釈を使用する場合、デプロイメント記述子(web.xml)は必要ありません。 ただし、tomcat7またはそれ以降のバージョンのtomcatを使用する必要があります。

アノテーションは、サーブレット宣言やサーブレットマッピングなど、Webデプロイメント記述子ファイル(web.xml)の同等のXML構成を置き換えることができます。 サーブレットコンテナは、デプロイメント時にアノテーション付きクラスを処理します。

サーブレット3.0で導入された注釈タイプは次のとおりです-

Sr.No. Annotation & Description
1

@WebServlet

サーブレットを宣言します。

2

@WebInitParam

初期化パラメーターを指定します。

3

@WebFilter

サーブレットフィルターを宣言します。

4

@WebListener

WebListenerを宣言するには

5

@HandlesTypes

ServletContainerInitializerが処理できるクラスタイプを宣言するため。

6

@HttpConstraint

このアノテーションは、ServletSecurityアノテーション内で使用され、対応するHttpMethodConstraint要素がServletSecurityアノテーション内で発生しないすべてのHTTPプロトコルメソッドに適用されるセキュリティ制約を表します。

7

@HttpMethodConstraint

このアノテーションは、特定のHTTPプロトコルメッセージのセキュリティ制約を表すためにServletSecurityアノテーション内で使用されます。

8

@MultipartConfig

サーブレットのインスタンスがmultipart/form-data MIMEタイプに適合するリクエストを期待していることを示す、サーブレットクラスで指定できる注釈。

9

@ServletSecurity

このアノテーションは、サーブレット実装クラスで使用され、HTTPプロトコルメッセージでサーブレットコンテナによって実施されるセキュリティ制約を指定します。

ここで、いくつかの注釈について詳しく説明しました。

@WebServlet

@WebServletは、コンテナを使用してサーブレットの構成を宣言するために使用されます。 次の表には、WebServletアノテーションに使用される属性のリストが含まれています。

Sr.No. Attribute & Description
1

String name

サーブレットの名前

2

String[] value

URLパターンの配列

3

String[] urlPatterns

このフィルターが適用されるURLパターンの配列

4

Int loadOnStartup

整数値は、起動順序のヒントを提供します

5

WebInitParam[] initParams

このサーブレットの初期化パラメータの配列

6

Boolean asyncSupported

このサーブレットがサポートする非同期操作

7

String smallIcon

このサーブレットの小さなアイコン(存在する場合)

8

String largeIcon

このサーブレットの大きなアイコン(存在する場合)

9

String description

このサーブレットの説明(存在する場合)

10

String displayName

このサーブレットの表示名(存在する場合)

少なくとも1つのURLパターンは、アノテーションの value または urlPattern 属性のいずれかで宣言する必要がありますが、両方ではありません。

*value* 属性は、URLパターンが設定される唯一の属性である場合に使用することをお勧めします。それ以外の場合は、 *urlPattern* 属性を使用する必要があります。

次の例では、@ WebServletアノテーションの使用方法を説明します。 テキスト Hello Servlet を表示する単純なサーブレットです。

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/Simple")
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L;

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.print("<html><body>");
      out.print("<h3>Hello Servlet</h3>");
      out.print("</body></html>");
   }
}

通常の方法で Simple.java をコンパイルし、クラスファイルを<Tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classesに配置します。

_http://localhost:8080/Simple_を実行するだけで、サーブレットの呼び出しを試みます。 Webページに次の出力が表示されます。

Hello servlet

@WebInitParam

@WebInitParamアノテーションは、サーブレットまたはフィルターの初期化パラメーターを指定するために使用されます。 WebFilterまたはWebSevletアノテーション内で使用されます。 以下の表には、WebInitParamアノテーションに使用される属性のリストが含まれています。

Sr.No. Attribute & Description
1

String name

初期化パラメーターの名前

2

String value

初期化パラメーターの値

3

String description

初期化パラメーターの説明

次の例では、@ WebServletアノテーションとともに@WeInitParamアノテーションを使用する方法を説明します。 これは、 init パラメーターから取得されたテキスト Hello Servlet およびストリング値* Hello World!*を表示する単純なサーブレットです。

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(value = "/Simple", initParams = {
   @WebInitParam(name = "foo", value = "Hello "),
   @WebInitParam(name = "bar", value = " World!")
})
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L;

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.print("<html><body>");
      out.print("<h3>Hello Servlet</h3>");
      out.println(getInitParameter("foo"));
      out.println(getInitParameter("bar"));
      out.print("</body></html>");
   }
}

通常の方法で Simple.java をコンパイルし、クラスファイルを<Tomcat-installationdirectory>;/webapps/ROOT/WEB-INF/classesに配置します。

_http://localhost:8080/Simple_を実行するだけで、サーブレットの呼び出しを試みます。 Webページに次の出力が表示されます。

Hello Servlet

Hello World!

@Webfilter

これは、サーブレットフィルターの宣言に使用される注釈です。 展開時にコンテナによって処理され、対応するフィルターが指定されたURLパターン、サーブレット、およびディスパッチャタイプに適用されます。

*@ WebFilter* 注釈は、Webアプリケーションのフィルターを定義します。 この注釈はクラスで指定され、宣言されているフィルターに関するメタデータを含みます。 注釈付きフィルターは、少なくとも1つのURLパターンを指定する必要があります。 次の表は、WebFilter注釈に使用される属性を示しています。
Sr.No. Attribute & Description
1

String filterName

フィルターの名前

2

String[] urlPatterns

フィルターが適用される値またはurlPatternsの配列を提供します

3

DispatcherType[] dispatcherTypes

フィルターが適用されるディスパッチャーのタイプ(要求/応答)を指定します

4

String[] servletNames

サーブレット名の配列を提供します

5

String displayName

フィルターの名前

6

String description

フィルターの説明

7

WebInitParam[] initParams

このフィルターの初期化パラメーターの配列

8

Boolean asyncSupported

このフィルターでサポートされる非同期操作

9

String smallIcon

このフィルターの小さなアイコン(存在する場合)

10

String largeIcon

このフィルターの大きいアイコン(存在する場合)

次の例では、@ WebFilterアノテーションの使用方法を説明します。 Init-param test-param の値と現在のタイムスタンプをコンソールに表示するシンプルなLogFilterです。 つまり、フィルターは要求と応答の間のインターフェイス層のように機能します。 ここでは、urlPatternに「/*」を使用します。 つまり、このフィルターはすべてのサーブレットに適用できます。

import java.io.IOException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.*;
import java.util.*;

//Implements Filter class

@WebFilter(urlPatterns = {"/*"}, initParams = {
   @WebInitParam(name = "test-param", value = "Initialization Paramter")})
public class LogFilter implements Filter {

   public void init(FilterConfig config) throws ServletException {
     //Get init parameter
      String testParam = config.getInitParameter("test-param");

     //Print the init parameter
      System.out.println("Test Param: " + testParam);
   }

   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {

     //Log the current timestamp.
      System.out.println("Time " + new Date().toString());

     //Pass request back down the filter chain
      chain.doFilter(request,response);
   }

   public void destroy( ) {
     /* Called before the Filter instance is removed
      from service by the web container*/
   }
}

通常の方法で Simple.java をコンパイルし、クラスファイルを<Tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classesに配置します。

_http://localhost:8080/Simple_を実行するだけで、サーブレットの呼び出しを試みます。 Webページに次の出力が表示されます。

Hello Servlet

Hello World!

次に、サーブレットコンソールを開きます。 そこには、 init パラメーターの値 testparam および* currentタイムスタンプ*がサーブレット通知メッセージとともに表示されます。