或者 web应用顺序的类文件是否针对指定布置信息的注释而进行检查,如果该属性被设置为 true则布置工具必需忽略类文件中所存在任何 servlet注释,并只使用描述符中所提及的配置细节。否则,如果没有指定该值或者该值被设置为 fals容器必需针对注释而扫描应用顺序的所有类文件。这个属性提供了应用顺序启动阶段启用或者禁用注释扫描以及对注释的处置。
Servlet3.0中所引入的所有注释都可以在javax.servlet.http.annot和 javax.servlet.http.annotation.jaxr软件包中找到以下章节论述 Servlet注释的完整集合:确认经过注释的类为一个 servlet并保管关于所声明的servlet元数据。urlMap属性是指定 URL模式(调用该 servlet@Servlet强制属性。当接收到一个请求时,@Servletjavax.servlet.http.annotation.Servlet一个类级别的注释。容器将请求中的URL与 servleturlMap进行匹配,且如果 URL模式匹配,则调用相应的servlet以响应该项请求。该注释的所有其他属性都是可选的并带有合理的默认值。Servlet类中必需有一种使用像 GETPUTPOSTHEA D或者 DELETE这样的HttpMethod注释进行注释的方法。这些方法应将 HttpServletRequest和 HttpServletRespons作为方法参数。与以前的版本相反,servlet3.0版本可以作为简单保守 Java对象(PlainOldJavaObjectPOJO而实现;也就是servlet不必再扩展像 HTTPServlet或者 GenericServlet这样的基础 servlet实现类。
此给出了使用保守 Servlet2.5API编写的Javaservlet代码片段,为了进行比拟。如下所示。Servlet2.5中,只要在布置描述符中配置了servlet详细信息,web容器就将初始化 servlet
publicclassMyServletextendHttpServlet{
publicvoiddoGetHttpServletRequestreq.
HttpServletResponsre{
....
}
}
Deploydescriptorweb.xml
<web-app>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>samples.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyA pp</url-pattern>
</servlet-mapping>
...
</web-app>
则在web容器的启动期间对其初始化。注意,这里给出的使用 Servlet3.0API编写的较为简化的版本。当 MyServlet使用 @Servlet注释而被注释为一个 servlet时。这种情况下部署描述符是可选的
@ServleturlMappings={"/MyA pp"}
publicclassMyServlet{
@GET
publicvoidhandleGetHttpServletRequestreq.
HttpServletResponsre{
....
}
}
Deploydescriptorweb.xml
从而轻松创建一个 servlet过滤器。该注释封装正被声明的过滤器的有关元数据。过滤器类上具有 @FilterMap注释也是强制性的@FilterMap注释定义用于过滤器的URL模式。@ServletFilt所有其他属性都是可选的并带有合理的默认值。V3.0过滤器类现在类似 POJO类,@ServletFilt和 @FilterMap您可以使用 javax.servlet.http.annotation.ServletFilt注释来注释过滤器类。并且没有用于这些类所需的Filter接口或者非参数公用构造器。以下给出了使用 Servletv2.5API过滤器类的代码片段:
publicclassMyFiltimplementFilter{
publicvoiddoFiltServletRequestreq.
ServletResponsres.
FilterChainchain
ServletExcept{ throwIOException.
......
}
}
Deploydescriptorweb.xml
<web-app>
<filter>
<filter-name>MiFilter</filter-name>
<filter-class>samples.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MiFilter</filter-name>
<url-pattern>/foo</url-pattern>
</filter-mapping>
...
</web-app>
所以容器将 MyFilt标志为一个过滤器类。MyFilt截取所有收到请求,使用 Servlet3.0编写的一个示例过滤器类如下所示。因为该类使用 ServletFilt注释。其中该请求的URL匹配模式 /fooServlet3.0为过滤器配置提供了可选的布置描述符。
@ServletFilter
@FilterMap"/foo"
publicclassMyFilt{
publicvoiddoFiltHttpServletRequestreq.
HttpServletResponsre{
.....
}
}
Deploydescriptorweb.xml
@InitParam该注释可以用来定义必需传送给 servlet或者过滤器类的任意初始化参数。@Servlet和 @ServletFilt注释的一个属性。以下代码示例解释了如何将具有 english值、称作 lang初始化参数传送给一个 servlet类。
initParam={@InitParam
value="english"} name="lang".
publicclassMyServlet{
@GET
publicvoidhandleGetHttpServletRequestreq.
HttpServletResponsre{
....
}
上下文侦听器是一个 POJO类,@ServletContextListenjavax.servlet.http.annotation.ServletContextListen注释将该类声明为一个 servlet上下文侦听器。当 web容器创建或者销毁 ServletContext时。且不必实现 ServletContextListen接口。使用 Servlet2.5API编写的侦听器类如下所示。当且仅当您在布置描述符中配置了该侦听器类,容器才识别它
publicclassMyListenimplementServletContextListen{
publicvoidcontextInitiServletContextEvsce{
}
.....
}
DeployDescriptorweb.xml
<web-app>
<listener>
<listener-class>samples.MyListener</listener-class>
</listener>
....
</web-app>
如下所示。使用 Servlet3.0API编写的一个得到极大简化的侦听器类。
@ServletContextListener
publicclassMyListen{
publicvoidcontextInitiServletContextEvsce{
}