【servlet3.0新特性】Annotation注解配置
servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为JavaEE6规范体系中一员,随着JavaEE6规范一起发布。
1.Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置;
2.模块化编程,即将各个Servlet模块化,将配置文件也分开配置。
3.Servlet异步处理,应对复杂业务处理;
4.异步Listener,对于异步处理的创建、完成等进行监听;
5. 文件上传API简化;
Annotation支持
servlet3.0不需要在web.xml中配置跳转的servlet而是采用注解的方法:
@WebServlet 用于将一个类声明为 Servlet该注解将会在部署时被容器处理容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性以下所有属性均为可选属性但是 vlaue 或者 urlPatterns 通常是必需的且二者不能共存如果同时指定通常是忽略 value 的取值
@WebServlet 主要属性列表属性名 类型 描述
name String 指定 Servlet 的 name 属性等价于 <servlet-name>。如果没有显式指定则该 Servlet 的取值即为类的全限定名。
value String[] 该属性等价于 urlPatterns 属性。两个属性不能同时使用。
urlPatterns String[] 指定一组 Servlet 的 URL 匹配模式。等价于 <url-pattern> 标签。
loadOnStartup int 指定 Servlet 的加载顺序等价于 <load-on-startup> 标签。
initParams WebInitParam[] 指定一组 Servlet 初始化参数等价于 <init-param> 标签。
asyncSupported boolean 声明 Servlet 是否支持异步操作模式等价于 <async-supported> 标签。
description String 该 Servlet 的描述信息等价于 <description> 标签。
displayName String 该 Servlet 的显示名通常配合工具使用等价于 <display-name> 标签。
实例代码如下:
1 import java.io.IOException; 2 import java.io.PrintWriter; 3 4 import javax.servlet.ServletConfig; 5 import javax.servlet.ServletException; 6 import javax.servlet.annotation.WebInitParam; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 /** 13 * 14 * Descriptions 15 */ 16 @WebServlet(name = "/HelloServlet", urlPatterns = {"/HelloServlet"}, loadOnStartup = 1, initParams = { 17 @WebInitParam(name = "name", value = "jsjtt"), @WebInitParam(name = "age", value = "20")}) 18 public class HelloServlet extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 public HelloServlet() { 22 super(); 23 } 24 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 26 doPost(request, response); 27 } 28 29 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, 30 IOException { 31 request.setCharacterEncoding("UTF-8"); 32 ServletConfig config = getServletConfig(); 33 PrintWriter out = response.getWriter(); 34 out.println("<html>"); 35 out.println("<body>"); 36 out.println("Hello world"+"<br />"); 37 out.println(config.getInitParameter("name")); 38 out.println("</body>"); 39 out.println("</html>"); 40 } 41 42 }
filter接口定义和servlet是类似的
下面是一个简单的示例
@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter") public class LessThanSixFilter implements Filter{...}
如此配置之后就可以不必在 web.xml
中配置相应的 <filter> 和 <filter-mapping> 元素了
容器会在部署时根据指定的属性将该类发布为过滤器。
它等价的 web.xml 中的配置形式为
<filter>
<filter-name>SimpleFilter</filter-name>
<filter-class>xxx</filter-class>
</filter> <filter-mapping>
<filter-name>SimpleFilter</filter-name>
<servlet-name>SimpleServlet</servlet-name>
</filter-mapping>
listener配置方法:
@WebListener
该注解用于将类声明为监听器被 @WebListener 标注的类必须实现以下至少一个接口
ServletContextListener
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionListener
HttpSessionAttributeListener
该注解使用非常简单其属性如下
@WebListener 的常用属性属性名 类型 是否可选 描述 value String 是 该监听器的描述信息。
一个简单示例如下
@WebListener("This is only a demo listener")
public class SimpleListener implements ServletContextListener{...}