1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.acme;
20
21 import java.util.ArrayList;
22 import java.util.Set;
23
24 import javax.servlet.ServletContainerInitializer;
25 import javax.servlet.ServletContext;
26 import javax.servlet.ServletContextEvent;
27 import javax.servlet.ServletContextListener;
28 import javax.servlet.ServletRegistration;
29 import javax.servlet.annotation.HandlesTypes;
30
31 @HandlesTypes ({javax.servlet.Servlet.class, Foo.class})
32 public class FooInitializer implements ServletContainerInitializer
33 {
34 public static class BarListener implements ServletContextListener
35 {
36
37
38
39
40 @Override
41 public void contextInitialized(ServletContextEvent sce)
42 {
43 throw new IllegalStateException("BAR LISTENER CALLED!");
44 }
45
46
47
48
49 @Override
50 public void contextDestroyed(ServletContextEvent sce)
51 {
52
53 }
54
55 }
56
57 public static class FooListener implements ServletContextListener
58 {
59
60
61
62
63 @Override
64 public void contextInitialized(ServletContextEvent sce)
65 {
66
67 sce.getServletContext().setAttribute("com.acme.AnnotationTest.listenerTest", Boolean.TRUE);
68
69
70 try
71 {
72 sce.getServletContext().addListener(new BarListener());
73 sce.getServletContext().setAttribute("com.acme.AnnotationTest.listenerRegoTest", Boolean.FALSE);
74 }
75 catch (UnsupportedOperationException e)
76 {
77 sce.getServletContext().setAttribute("com.acme.AnnotationTest.listenerRegoTest", Boolean.TRUE);
78 }
79 catch (Exception e)
80 {
81 sce.getServletContext().setAttribute("com.acme.AnnotationTest.listenerRegoTest", Boolean.FALSE);
82 }
83 }
84
85
86
87
88 @Override
89 public void contextDestroyed(ServletContextEvent sce)
90 {
91
92 }
93
94 }
95 public void onStartup(Set<Class<?>> classes, ServletContext context)
96 {
97 context.setAttribute("com.acme.Foo", new ArrayList<Class>(classes));
98 ServletRegistration.Dynamic reg = context.addServlet("AnnotationTest", "com.acme.AnnotationTest");
99 context.setAttribute("com.acme.AnnotationTest.complete", (reg == null));
100 context.addListener(new FooListener());
101 }
102 }