新增註釋是Servlet 3.0中的重大革新之一。通過使用註釋就無需在web.xml文件中對Servlet或者過濾器進行配置。
新增的註釋支持:Servlet 3.0的部署描述文件web.xml的頂層標籤 有一個 metadata-complete 屬性,該屬性指定當前的部署描述文件是否是完全的。
如果設置爲 true,則容器在部署時將只依賴部署描述文件,忽略所有的註解
如果不配置該屬性,或者將其設置爲 false,則表示啓用註解支持
Servlet 3.0新增的註釋有@WebServlet
、@WebFilter
、@WebListener
和@WebInitParam
等。
@WebServlet
@WebServlet註釋定義在Servlet的類聲明之前,用於定義Servlet組件。使用該註釋,就無需在web.xml文件中對Servlet進行配置。@WebServlet主要屬性如下表所示:
屬性名 | 類型 | 描述 |
---|---|---|
name | String | 指定 Servlet 的 name 屬性,等價於 。如果沒有顯式指定,則該 Servlet 的取值即爲類的全限定名 |
value | String[] | 該屬性等價於 urlPatterns 屬性。兩個屬性不能同時使用 |
urlPatterns | String[] | 指定一組 Servlet 的 URL 匹配模式。等價於 標籤 |
loadOnStartup | int | 指定 Servlet 的加載順序,等價於 標籤 |
initParams | WebInitParam[] | 指定一組 Servlet 初始化參數,等價於 標籤 |
asyncSupported | boolean | 聲明 Servlet 是否支持異步操作模式,等價於 標籤 |
description | String | 該 Servlet 的描述信息,等價於 標籤 |
displayName | String | 該 Servlet 的顯示名,通常配合工具使用,等價於 標籤 |
注意:以上所有屬性均爲可選屬性,但
value
和urlPatterns
其中一個必存在,若兩個同時存在,一般忽略value
取值。
例:
SimpleServlet.java
@WebServlet(urlPatterns = {"/simple"}, asyncSupported = true,
loadOnStartup = -1, name = "SimpleServlet", displayName = "ss",
initParams = {@WebInitParam(name = "username", value = "tom")})
public class SimpleServlet extends HttpServlet{ … }
其等價於以下的web.xml文件配置
<servlet>
<display-name>ss</display-name>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>footmark.servlet.SimpleServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
<async-supported>true</async-supported>
<init-param>
<param-name>username</param-name>
<param-value>tom</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/simple</url-pattern>
</servlet-mapping>
@WebFilter
@WebFilter註釋器用於聲明過濾器,該註釋將會在部署時被容器處理,容器根據具體的屬性配置將相應的類部署爲過濾器。
@WebFilter主要屬性如下表所示:
屬性名 | 類型 | 描述 |
---|---|---|
filterName | String | 指定過濾器的 name 屬性,等價於 |
value | String[] | 該屬性等價於 urlPatterns 屬性。但是兩者不應該同時使用 |
urlPatterns | String[] | 指定一組過濾器的 URL 匹配模式。等價於 標籤 |
servletNames | String[] | 指定過濾器將應用於哪些 Servlet。取值是 @WebServlet 中的 name 屬性的取值,或者是 web.xml 中 的取值 |
dispatcherTypes | DispatcherType | 指定過濾器的轉發模式。具體取值包括:ASYNC、ERROR 、FORWARD、INCLUDE、REQUEST |
initParams | WebInitParam[] | 指定一組過濾器初始化參數,等價於 標籤 |
asyncSupported | boolean | 聲明過濾器是否支持異步操作模式,等價於 標籤 |
description | String | 該過濾器的描述信息,等價於 標籤 |
displayName | String | 該過濾器的顯示名,通常配合工具使用,等價於 標籤 |
注意:以上所有屬性均爲可選屬性,但
value
、urlPatterns
和servletNames
三者必須至少包含一個,若value
和urlPatterns
兩個同時存在,一般忽略value
取值。
例:
LessThanSixFilter.java
@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter")
public class LessThanSixFilter implements Filter{...}
其等價於以下的web.xml文件配置
<filter>
<filter-name>SimpleFilter</filter-name>
<filter-class>LessThanSixFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SimpleFilter</filter-name>
<servlet-name>SimpleServlet</servlet-name>
</filter-mapping>
@WebListener
@WebListener註釋器用於聲明監聽器,還可以用於充當給定Web應用上下文中各種Web應用事件的監聽器的類。被@WebListener標註的類必須實現以下至少一個接口:
- ServletContextListener
- ServletContextAttributeListener
- ServletRequestListener
- ServletRequestAttributeListener
- HttpSessionListener
- HttpSessionAttributeListener
@WebListener的常用屬性
屬性名 | 類型 | 是否可選 | 描述 |
---|---|---|---|
value | String | 是 | 該監聽器的描述信息 |
例:
SimpleListener.java
@WebListener("This is only a demo listener")
public class SimpleListener implements ServletContextListener{...}
其等價於以下的web.xml文件配置
<listener>
<listener-class>footmark.servlet.SimpleListener</listener-class>
</listener>
@WebInitParam
@WebInitParam註釋等價於web.xml文件中的和的子標籤,該註釋通常不單獨使用,而是配合@WebServlet和@WebFilter使用。其作用是爲Servlet或者過濾器指定初始化參數。
@WebInitParam主要屬性如下表所示:
屬性名 | 類型 | 是否可選 | 描述 |
---|---|---|---|
name | String | 否 | 指定參數的名字,等價於 |
value | String | 否 | 指定參數的值,等價於 |
description | String | 是 | 關於參數的描述,等價於 |