|
Servlet3.0 新特性之注解支持 Servlet3.0作为JavaEE6规范体系中的一员,随着JavaEE6规范一起发布。该版本较前一个版本(Servlet2.5)增加了一下新特性:注解支持,Servlet异步处理,文件上传API简化和支持WEB模块。本章主要对Servlet3.0的注解支持作详细讲解。 一、Servlet3.0注解简介 Servlet2.5版本中Servlet的映射配置,Filter的配置以及Listener的配置都是在web.xml中配置完成。如果web.xml中配置了很多Servlet的信息则不便于管理。使用Servlet3.0提供的注解之后能大大简化Servlet开发,提高开发效率。Servlet3.0中新增的注解有以下几个,其中加粗的注解是开发中较常用的注解: 注解 | | | | | | | 修饰Listener类,用于部署Listener类 | | 与@WebServlet或@WebFilter注解连用,为它们配置参数 | | 修饰Servlet类,指定该Servlet类负责处理multipart/form-data类型的请求(主要用于处理上传文件) | | 修饰Servlet类,与JAAS(Java验证和授权API)有关的注解 | | | | |
二、Servlet3.0常用注解的应用1、@WebServlet @WebServlet注解是帮助我们配置Servlet类的。 1.1 @WebServlet中可以配置的参数这个注解中可以使用的参数如图1所示: 图1:@WebServlet中使用的参数 1.2 应用实例 1 package com.heima.servlet; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.ServletOutputStream; 5 import javax.servlet.annotation.WebInitParam; 6 import javax.servlet.annotation.WebServlet; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 12 /** 13 * @author buguniao 14 * @date 2018-06-24 21:16 15 * 16 * name:相当于<servlet-name>,配置当前Servlet的名字 17 * 18 * urlPatterns:相当于<url-pattern></url-pattern>,这个参数可以配置一个或者多个映射路径; 19 * 配置一个:urlPatterns = ("/servlet3") 20 * 配置多个:urlPatterns = {"/servlet3","/demo3"} 21 * 22 * loadOnStartup:相当于 <load-on-startup>,配置的是Servlet对象的创建时机。 23 * 值越小创建时机的优先级越高,loadOnStartup = 1表示tomcat容器启动后Servlet对象立即创建。 24 * 25 *initParams:相当于<init-param>,配置的是这个Servlet在创建的时候配置的参数,可以设置多个参数, 26 * 使用注解@WebInitParam来做具体配置 27 * 28 * 29 */ 30 @WebServlet(name = "Servlet3Demo",urlPatterns = {"/servlet3","/demo3"},loadOnStartup = 1,initParams = { 31 @WebInitParam(name = "encoding",value = "UTF-8") 32 }) 33 public class Servlet3Demo extends HttpServlet { 34 @Override 35 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 36 37 } 38 @Override 39 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 System.out.println("get请求进来了........................"); 41 } 42 43 @Override 44 public void init() throws ServletException { 45 String encoding = getInitParameter("encoding"); 46 System.out.println("初始化参数 encoding:"+encoding); 47 48 } 49 } 2、@WebFilter@WebFilter是一个用来帮助我们配置Filter类的注解 2.1 @WebFilter中可以配置的参数 @WebFilter中可配置的参数如图2所示: 图2:@WebFilter中可配置的参数 2.2 应用实例 50 package com.heima.filter; 51 52 import javax.servlet.*; 53 import javax.servlet.annotation.WebFilter; 54 import javax.servlet.annotation.WebInitParam; 55 import java.io.IOException; 56 57 /** 58 * @author buguniao 59 * @date 2018-06-25 10:17 60 * 61 * filterName:相当于<filter-name>,指定Filter的name 62 * urlPatterns:相当于<url-pattern>,指定这个过滤器的URL匹配模式 63 * dispatcherTypes:指定过滤器的转发模式 64 * initParams:指定过滤器初始化时的参数 65 * 66 */ 67 68 @WebFilter(filterName = "MyFilter", urlPatterns="/*", 69 dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}, 70 initParams={@WebInitParam(name="encoding",value="UTF-8"),@WebInitParam(name="defaultPage",value="login.jsp")} 71 ) 72 73 public class MyFilter implements Filter { 74 75 @Override 76 public void init(FilterConfig filterConfig) throws ServletException { 77 String encoding = filterConfig.getInitParameter("encoding"); 78 String defaultPage = filterConfig.getInitParameter("defaultPage"); 79 System.out.println("编码:"+encoding); 80 System.out.println("defaultPage:"+defaultPage); 81 } 82 83 @Override 84 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 85 chain.doFilter(request,response); 86 } 87 88 @Override 89 public void destroy() { 90 System.out.println("Filter销毁了................."); 91 } 92 } 3、@WebListener@WebListener注解是帮助我们配置监听器的。 3.1 @WebListener中可配置的参数 @WebListener注解中只提供了一个参数value,如下: 93 @Target(ElementType.TYPE) 94 @Retention(RetentionPolicy.RUNTIME) 95 @Documented 96 public @interface WebListener { 97 98 /** 99 * @return description of the listener, if present 100 */ 101 String value() default ""; 102 } value属性是配置这个监听器的描述信息的,可以不添加; 3.2 应用实例 103 package com.heima.listener; 104 105 import javax.servlet.ServletContextEvent; 106 import javax.servlet.ServletContextListener; 107 import javax.servlet.annotation.WebListener; 108 109 /** 110 * @author buguniao 111 * @date 2018-06-25 10:25 112 */ 113 @WebListener("我是监听tomcat容器启动的监听器") 114 public class MyListener implements ServletContextListener { 115 @Override 116 public void contextInitialized(ServletContextEvent sce) { 117 System.out.println("tomcat容器启动了....................."); 118 } 119 120 @Override 121 public void contextDestroyed(ServletContextEvent sce) { 122 System.out.println("tomcat容器销毁了........."); 123 } 124 }
|