Servlet - 注释


到目前为止,您已经了解了 Servlet 如何使用部署描述符(web.xml 文件)将应用程序部署到 Web 服务器中。Servlet API 3.0 引入了一个名为 javax.servlet.annotation 的新包。它提供可用于注释 servlet 类的注释类型。如果您使用注释,则不需要部署描述符 (web.xml)。但您应该使用 tomcat7 或任何更高版本的 tomcat。

注释可以替换 Web 部署描述符文件 (web.xml) 中的等效 XML 配置,例如 servlet 声明和 servlet 映射。Servlet 容器将在部署时处理带注释的类。

Servlet 3.0 中引入的注释类型是 -

先生。 注释和描述
1

@WebServlet

声明一个servlet。

2

@WebInitParam

指定初始化参数。

3

@WebFilter

声明 servlet 过滤器。

4

@WebListener

声明 WebListener

5

@HandlesTypes

声明 ServletContainerInitializer 可以处理的类类型。

6

@HttpConstraint

此注释在 ServletSecurity 注释中使用,表示要应用于所有 HTTP 协议方法的安全约束,对于这些方法,ServletSecurity 注释中未出现相应的 HttpMethodConstraint 元素。

7

@HttpMethodConstraint

此注释在 ServletSecurity 注释中使用,表示对特定 HTTP 协议消息的安全约束。

8

@MultipartConfig

可以在 Servlet 类上指定的注释,指示 Servlet 实例期望符合 multipart/form-data MIME 类型的请求。

9

@ServletSecurity

此注释用在 Servlet 实现类上,以指定 Servlet 容器对 HTTP 协议消息强制执行的安全约束。

在这里我们详细讨论了一些注释。

@WebServlet

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

先生。 属性及描述
1

字符串名称

Servlet 的名称

2

字符串值

URL 模式数组

3

字符串[] urlPatterns

此过滤器适用的 URL 模式数组

4

启动时加载

整数值为您提供启动排序提示

5

WebInitParam[] initParams

该 Servlet 的初始化参数数组

6

布尔异步支持

该Servlet支持的异步操作

7

字符串小图标

此 Servlet 的小图标(如果存在)

8

字符串大图标

此 Servlet 的大图标(如果存在)

9

字符串描述

此 Servlet 的描述(如果存在)

10

字符串显示名称

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

必须在注释的valueurlPattern属性中声明至少一种 URL 模式 ,但不能同时声明两者。

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

例子

下面的例子介绍了如何使用@WebServlet注解。它是一个简单的 servlet,显示文本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来调用任何 servlet 。您将在网页上看到以下输出。

Hello servlet

@WebInitParam

@WebInitParam 注释用于指定 Servlet 或 Filter 的初始化参数。它在 WebFilter 或 WebSevlet 注释中使用。下表包含用于 WebInitParam 注释的属性列表。

先生。 属性及描述
1

字符串名称

初始化参数名称

2

字符串值

初始化参数的值

3

字符串描述

初始化参数说明

例子

以下示例描述了如何将 @WeInitParam 注释与 @WebServlet 注释一起使用。它是一个简单的 servlet,显示文本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来调用任何 servlet 。您将在网页上看到以下输出。

Hello Servlet

Hello World! 

@Webfilter

这是用于声明 servlet 过滤器的注释。它由容器在部署时处理,并将相应的过滤器应用于指定的 URL 模式、Servlet 和调度程序类型。

@WebFilter注释定义 Web 应用程序中的过滤器此注释在类上指定,并包含有关所声明的过滤器的元数据。带注释的过滤器必须至少指定一种 URL 模式。下表列出了用于 WebFilter 注释的属性。

先生。 属性及描述
1

字符串过滤器名称

过滤器名称

2

字符串[] urlPatterns

提供过滤器应用的值或 urlPatterns 数组

3

DispatcherType[] 调度程序类型

指定过滤器应用的调度程序类型(请求/响应)

4

String[] servletNames

提供 Servlet 名称数组

5

字符串显示名称

过滤器名称

6

字符串描述

过滤器说明

7

WebInitParam[] initParams

该过滤器的初始化参数数组

8

布尔异步支持

该过滤器支持的异步操作

9

字符串小图标

此过滤器的小图标(如果有)

10

字符串大图标

此过滤器的大图标(如果存在)

例子

以下示例介绍如何使用@WebFilter注解。它是一个简单的 LogFilter,在控制台上显示 Init-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.*;  

// 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来调用任何 servlet 。您将在网页上看到以下输出。

Hello Servlet
  
Hello World!

现在,打开 servlet 控制台。在那里,您将找到初始化参数testparam的值和当前时间戳以及 servlet 通知消息。