1 package com.foxinmy.weixin4j.listener;
2
3 import javax.servlet.ServletContext;
4 import javax.servlet.ServletContextEvent;
5 import javax.servlet.ServletContextListener;
6
7 import com.foxinmy.weixin4j.dispatcher.BeanFactory;
8 import com.foxinmy.weixin4j.handler.DebugMessageHandler;
9 import com.foxinmy.weixin4j.startup.WeixinServerBootstrap;
10 import com.foxinmy.weixin4j.util.AesToken;
11
12
13
14
15
16
17
18
19
20
21 public abstract class AbstractWeixinServerStartupListener implements ServletContextListener {
22
23
24
25
26
27 protected int getPort() {
28 return 30000;
29 }
30
31
32
33
34
35 protected AesToken getToken() {
36 return new AesToken("weixin4j");
37 }
38
39
40
41
42 abstract String[] getHandlerToScan();
43
44
45
46
47
48
49 public String[] getInterceptorToScan() {
50 return null;
51 }
52
53
54
55
56
57
58
59
60 abstract BeanFactory getBeanFactory(ServletContext sc);
61
62
63
64
65
66
67 protected boolean getOpenAlwaysResponse() {
68 return true;
69 }
70
71
72
73
74
75
76 protected boolean getOpenDebugResponse() {
77 return true;
78 }
79
80
81
82
83 private WeixinServerBootstrap bootstrap;
84
85 @Override
86 public void contextInitialized(ServletContextEvent sce) {
87 final int port = getPort();
88 final AesToken aesToken = getToken();
89 final String[] handlerPackage = getHandlerToScan();
90 final String[] interceptorPackage = getInterceptorToScan();
91 final BeanFactory beanFactory = getBeanFactory(sce.getServletContext());
92 final boolean openAlwaysResponse = getOpenAlwaysResponse();
93 final boolean openDebugResponse = getOpenDebugResponse();
94
95
96
97 new Thread(new Runnable() {
98 @Override
99 public void run() {
100 bootstrap = new WeixinServerBootstrap(aesToken)
101 .handlerPackagesToScan(handlerPackage);
102 if (interceptorPackage != null)
103 bootstrap.interceptorPackagesToScan(interceptorPackage);
104 if (beanFactory != null)
105 bootstrap.resolveBeanFactory(beanFactory);
106 if (openDebugResponse)
107 bootstrap.addHandler(DebugMessageHandler.global);
108 if (openAlwaysResponse)
109 bootstrap.openAlwaysResponse();
110 bootstrap.startup(port);
111 }
112 }).start();
113 }
114
115 @Override
116 public void contextDestroyed(ServletContextEvent sce) {
117
118
119
120 bootstrap.shutdown(true);
121 }
122 }