English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet アノテーション

これまで、ServletがアプリケーションをWebサーバーにデプロイするためにデプロイメントディスクリプタ(web.xmlファイル)を使用する方法について学びました。  Servlet API 3バージョン0.0でjavax.servlet.annotationという新しいパッケージが導入されました。 Servletクラスにアノテーションを適用するためのアノテーションタイプを提供します。アノテーションを使用する場合、デプロイメントディスクリプタ(web.xml)は必要ありません。 ただし、tomcatを使用するべきです。7またはそれ以上のバージョンのtomcatです。

アノテーションは、Webデプロイメントディスクリプタ(web.xml)に相当するXML設定、例えばサーバーサイドアプリケーションの宣言やサーバーサイドアプリケーションのマッピングを置き換えることができます。サーバーサイドアプリケーションは、デプロイメント時にアノテーション付きのクラスを処理します。

Servlet 3バージョン0.0で導入されたアノテーションタイプは、

Sr.No.アノテーションと説明
1

@WebServlet

サーバーサイドアプリケーションを宣言します。

2

@WebInitParam

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

3

@WebFilter

サーバーサイドフィルタを宣言します。

4

@WebListener

Webリスナーを宣言します。

5

@HandlesTypes

ServletContainerInitializerが処理できるクラスのタイプを宣言します。

6

@HttpConstraint

この注釈は、すべてのHTTPプロトコルメソッドに適用されるセキュリティ制約を示すためにServletSecurityアノテーションで使用されます。これらのメソッドに対して、ServletSecurityアノテーションには対応するHttpMethodConstraint要素がありません。

7

@HttpMethodConstraint

此注解在ServletSecurity注解中用于表示特定HTTP协议消息的安全约束。

8

@MultipartConfig

可以在 Servlet 类上指定的注解,表示 Servlet 的实例期望符合多部分/表单数据 MIME 类型的请求。

9

@ServletSecurity

此注解用于Servlet实现类,以指定Servlet容器对HTTP协议消息实施的安全约束。

这里我们已经详细讨论了一些注解。

@WebServlet

@WebServlet用于声明带有容器的Servlet的配置。下表包含用于WebServlet注解的属性列表。

Sr.No.属性と説明
1

String name

Servlet 的名称

2

String[] value

URL模式数组

3

String[] urlPatterns

应用此筛选器的 URL 模式数组

4

Int loadOnStartup

整数值给出启动排序提示

5

WebInitParam[] initParams

Servlet初始化数组参数

6

Boolean asyncSupported

Servlet支持的异步操作

7

String smallIcon

Servlet 的小图标,如果有的話

8

String largeIcon

Servlet 的大图标,如果有的话

9

String description

Servlet 的描述,如果存在的话

10

String displayName

显示此Servlet的名称(如果存在)

必须在注解的value或urlPattern属性中声明至少一个URL模式,但不能同时声明这两个属性。

当URL模式是唯一要设置的属性时,建议使用value属性,否则应使用urlPattern属性。

オンラインサンプル

下面的示例描述了如何使用@WebServlet注解。它是一个显示文本Hello servlet的简单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/シンプルな呼び出しは、どのservletでもできます。ウェブページ上に以下の出力が見られます。

Hello servlet

@WebInitParam

@WebInitParam注解用于为Servlet或过滤器指定初始化参数。它在WebFilter或webevlet注解中使用。下表包含用于WebInitParam注解的属性列表。

Sr.No.属性と説明
1

String name

初始化参数的名称

2

String value

初始化参数的值

3

String description

初始化参数的描述

オンラインサンプル

@WebInitParam注解用于为Servlet或过滤器指定初始化参数。它在WebFilter或webevlet注解中使用。下表包含用于WebInitParam注解的属性列表。

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/シンプルな呼び出しは、どのservletでもできます。ウェブページ上に以下の出力が見られます。

Hello Servlet
Hello World!

@Webfilter

これは、サーブレットフィルタを宣言するアノテーションです。デプロイ時にコンテナによって処理され、指定されたURLパターン、サーブレット、ディスパッチャータイプに対応するフィルタが適用されます。

@WebFilterアノテーションは、ウェブアプリケーション内のフィルタを定義します。このアノテーションはクラス上で指定され、宣言されたフィルタのメタデータを含んでいます。アノテーション付きのフィルタは少なくとも1つのURLパターンを指定する必要があります。以下のテーブルには、WebFilterアノテーションに使用される属性が示されています。

Sr.No.属性と説明
1

String filterName

フィルタの名前

2

String[] urlPatterns

アプリケーションフィルタの値またはurlPatterns配列を提供します

3

DispatcherType[] dispatcherTypes

指定されたスケジューラ(リクエスト/のタイプ

4

String[] servletNames

servlet名を提供する配列

5

String displayName

フィルタの名前

6

String description

フィルタの説明

7

WebInitParam[] initParams

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

8

Boolean asyncSupported

フィルタがサポートする非同期操作

9

String smallIcon

フィルタのアイコン(存在する場合)

10

String largeIcon

フィルタのアイコン(存在する場合)

オンラインサンプル

以下の例では、@WebFilterアノテーションの使用方法を説明します。これはシンプルなLogFilterで、 param test paramの値と現在のタイムスタンプを持ちます。これは、フィルタがリクエストとレスポンスの間のインターフェースレイヤーのように動作することを意味します。ここでは、/*”はurlPatternを表します。これは、このフィルタがすべてのservletに適用されることを意味します。

import java.io.IOException; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.*; 
import java.util.*;  
//フィルタクラスを実装
@WebFilter(urlPatterns = {"/*}, initParams = { 
   @WebInitParam(name = "test-param", value = "Initialization Parameter")} 
public class LogFilter implements Filter {
   
   public void init(FilterConfig config) throws ServletException { 
      // 初期化パラメータを取得
      String testParam = config.getInitParameter("test-param");
            
      //initパラメータを印刷
      System.out.println("テストパラメータ: " + testParam);  
   } 
   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException { 
	  
      //現在のタイムスタンプを記録します。
      System.out.println("Time " + new Date().toString());  
         
      //リクエストをフィルタチェーンに戻します
      chain.doFilter(request,response); 
   }
   public void destroy( ) {
      /* フィルタインスタンスを削除する前に呼び出します
      ウェブコンテナから提供されるサービス*/ 
   } 
}

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

今、以下のようにHTTPを通じて実行を試みます://localhost:8080/シンプルな呼び出しは、どのservletでもできます。ウェブページ上に以下の出力が見られます。

Hello Servlet
  
Hello World!

今、servlet コントロールタブを開きます。そこでは、値の初期化パラメータ testparam、現在のタイムスタンプとservletの通知メッセージが一緒に見つかります。