Servlet 3.0的部署描述文件web.xml的頂層標簽<web-app>有一個metadata-complete屬性,該屬性指定當前的部署描述文件是否是完全的。如果設置為true,則容器在部署時將只依賴部署描述文件,忽略所有的注解(同時也會跳過web-fragment.XML的掃描,亦即禁用可插性支持,具體請看後文關於可插性支持的講解);如果不配置該屬性,或者將其設置為false,則表示啟用注解支持(和可插性支持)。
@WebServlet
@WebServlet用於將一個類聲明為Servlet,該注解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為Servlet。該注解具有下表給出的一些常用屬性(以下所有屬性均為可選屬性,但是vlaue或者urlPatterns通常是必需的,且二者不能共存,如果同時指定,通常是忽略value的取值):
屬性名類型描述
1.nameString指定Servlet的name屬性,等價於<servlet-name>。如果沒有顯式指定,則該Servlet的取值即為類的全限定名。
2.valueString[]該屬性等價於urlPatterns屬性。兩個屬性不能同時使用。
3.urlPatternsString[]指定一組Servlet的URL匹配模式。等價於<url-pattern>標簽。
4.loadOnStartupint指定Servlet的加載順序,等價於<load-on-startup>標簽。
5.initParamsWebInitParam[]指定一組Servlet初始化參數,等價於<init-param>標簽。
6.asyncSupportedboolean聲明Servlet是否支持異步操作模式,等價於<async-supported>標簽。
7.descriptionString該Servlet的描述信息,等價於<description>標簽。
8.displayNameString該Servlet的顯示名,通常配合工具使用,等價於<display-name>標簽。
下面是一個簡單的示例:
- @WebServlet(urlPatterns={"/simple"},asyncSupported=true,
- loadOnStartup=-1,name="SimpleServlet",displayName="ss",
- initParams={@WebInitParam(name="username",value="tom")}
- )
- publicclassSimpleServletextendsHttpServlet{…}
如此配置之後,就可以不必在web.xml中配置相應的<servlet>和<servlet-mapping>元素了,容器會在部署時根據指定的屬性將該類發布為Servlet。它的等價的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>
@WebInitParam
該注解通常不單獨使用,而是配合@WebServlet或者@WebFilter使用。它的作用是為Servlet或者過濾器指定初始化參數,這等價於web.XML中<servlet>和<filter>的<init-param>子標簽。@WebInitParam具有下表給出的一些常用屬性:
屬性名類型是否可選描述
◆nameString否指定參數的名字,等價於<param-name>。
◆valueString否指定參數的值,等價於<param-value>。
◆descriptionString是關於參數的描述,等價於<description>。
@WebFilter
@WebFilter用於將一個類聲明為過濾器,該注解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為過濾器。該注解具有下表給出的一些常用屬性(以下所有屬性均為可選屬性,但是value、urlPatterns、servletNames三者必需至少包含一個,且value和urlPatterns不能共存,如果同時指定,通常忽略value的取值):