目录

Servlets - 注释( Annotations)

到目前为止,您已经了解了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中引入的注释类型是 -

Sr.No. 注释和说明
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批注的属性列表。

Sr.No. 属性和描述
1

String name

Servlet的名称

2

String[] value

URL模式的数组

3

String[] urlPatterns

此Filter应用的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的名称(如果存在)

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

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

例子 (Example)

以下示例描述了如何使用@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/Simple来调用任何servlet。 您将在网页上看到以下输出。

Hello servlet

@WebInitParam

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

Sr.No. 属性和描述
1

String name

初始化参数的名称

2

String value

初始化参数的值

3

String description

初始化参数的描述

例子 (Example)

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

Hello Servlet
Hello World! 

@Webfilter

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

@WebFilter注释定义了Web应用程序中的过滤器。 此批注在类上指定,并包含有关正在声明的过滤器的元数据。 带注释的过滤器必须至少指定一个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

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

例子 (Example)

以下示例描述了如何使用@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控制台。 在那里,您将找到init参数testparam的值以及current timestamp以及servlet通知消息。

↑回到顶部↑
WIKI教程 @2018