サーブレット-アノテーション
これまで、サーブレットがアプリケーションをWebサーバーにデプロイするためにデプロイメント記述子(web.xmlファイル)を使用する方法を学習しました。サーブレットAPI3.0では、javax.servlet.annotationという新しいパッケージが導入されました。サーブレットクラスに注釈を付けるために使用できる注釈タイプを提供します。アノテーションを使用する場合、デプロイメント記述子(web.xml)は必要ありません。ただし、tomcat7以降のバージョンのtomcatを使用する必要があります。
アノテーションは、サーブレット宣言やサーブレットマッピングなどのWebデプロイメント記述子ファイル(web.xml)内の同等のXML構成を置き換えることができます。サーブレットコンテナは、デプロイ時にアノテーション付きクラスを処理します。
サーブレット3.0で導入された注釈タイプは次のとおりです。
シニア番号 | 注釈と説明 |
---|---|
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-dataMIMEタイプに準拠するリクエストを予期していることを示します。 |
9 | @ServletSecurity このアノテーションは、サーブレット実装クラスで使用され、HTTPプロトコルメッセージでサーブレットコンテナによって適用されるセキュリティ制約を指定します。 |
ここでは、いくつかの注釈について詳しく説明しました。
@WebServlet
@WebServletは、コンテナを使用したサーブレットの構成を宣言するために使用されます。次の表に、WebServletアノテーションに使用される属性のリストを示します。
シニア番号 | 属性と説明 |
---|---|
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アノテーションに使用される属性のリストを示します。
シニア番号 | 属性と説明 |
---|---|
1 | String name 初期化パラメータの名前 |
2 | String value 初期化パラメータの値 |
3 | String description 初期化パラメータの説明 |
例
次の例では、@ WeInitParamアノテーションを@WebServletアノテーションと一緒に使用する方法について説明します。テキストを表示するシンプルなサーブレットですHello Servlet および文字列値 Hello World! から取られた init パラメーター。
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アノテーションに使用される属性を示します。
シニア番号 | 属性と説明 |
---|---|
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の値を表示する単純なLogFilterです。test-paramコンソールの現在のタイムスタンプ。つまり、フィルターは要求と応答の間のインターフェース層のように機能します。ここでは、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 timestamp サーブレット通知メッセージとともに。