Servlets-annotations
サーブレット-注釈
これまで、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タイムスタンプ*がサーブレット通知メッセージとともに表示されます。