黑马程序员技术交流社区

标题: 【上海校区】Servlet3.0 新特性之注解支持 [打印本页]

作者: yuchengmin    时间: 2018-7-25 17:45
标题: 【上海校区】Servlet3.0 新特性之注解支持
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中新增的注解有以下几个,其中加粗的注解是开发中较常用的注解:
注解
作用
@WebServlet
修饰Servlet类,用于部署该Servlet
@WebFilter
修饰Filter类,用于部署该Filter
@WebListener
修饰Listener类,用于部署Listener
@WebInitParam
@WebServlet@WebFilter注解连用,为它们配置参数
@MultipartConfig
修饰Servlet类,指定该Servlet类负责处理multipart/form-data类型的请求(主要用于处理上传文件)
@ServletSecurity
修饰Servlet类,与JAAS(Java验证和授权API)有关的注解
@HttpMethodConstrait
@ServletSecurity连用
@HttpConstrait
@ServletSecurity连用
二、Servlet3.0常用注解的应用1@WebServlet
​ @WebServlet注解是帮助我们配置Servlet类的。
1.1 @WebServlet中可以配置的参数
这个注解中可以使用的参数如图1所示:
[attach]241462[/attach]
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所示:
[attach]241463[/attach]
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>,指定Filtername
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 }


作者: 摩西摩西OvO    时间: 2018-7-26 09:11

作者: 不二晨    时间: 2018-7-26 11:30
奈斯,很赞
作者: 吴琼老师    时间: 2018-7-26 15:27





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2