English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
これまで、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用于声明带有容器的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注解用于为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!
これは、サーブレットフィルタを宣言するアノテーションです。デプロイ時にコンテナによって処理され、指定された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の通知メッセージが一緒に見つかります。