33import com .lts .core .constant .Constants ;
44import org .h2 .server .web .WebServlet ;
55
6+ import javax .servlet .ServletConfig ;
67import javax .servlet .ServletContext ;
8+ import javax .servlet .ServletException ;
9+ import java .util .Collections ;
10+ import java .util .Enumeration ;
11+ import java .util .HashMap ;
12+ import java .util .Map ;
713
814/**
915 * H2 Console 的 servlet
16+ *
1017 * @author Robert HG ([email protected] ) on 9/26/15. 1118 */
1219public class H2ConsoleWebServlet extends WebServlet {
1320
1421 @ Override
15- public void init () {
22+ public void init (ServletConfig config ) throws ServletException {
23+ ServletConfigFacade servletConfigFacade = new ServletConfigFacade (config );
1624
17- ServletContext servletContext = this .getServletConfig ().getServletContext ();
1825 String monitorDBPath = AppConfigurer .getProperties ("lts.admin.data.path" ,
1926 Constants .USER_HOME ) + "/.lts/h2/lts-admin" ;
2027 // http://h2database.com/html/features.html#connection_modes
2128 // http://h2database.com/html/features.html#auto_mixed_mode
22- String url = "jdbc:h2:" + monitorDBPath +";AUTO_SERVER=TRUE" ;
23- servletContext .setInitParameter ("url" , url );
24- servletContext .setInitParameter ("user" , "lts" );
25- servletContext .setInitParameter ("password" , "" );
29+ String url = "jdbc:h2:" + monitorDBPath + ";AUTO_SERVER=TRUE" ;
30+ servletConfigFacade .setInitParameter ("url" , url );
31+ servletConfigFacade .setInitParameter ("user" , "lts" );
32+ servletConfigFacade .setInitParameter ("password" , "" );
33+ servletConfigFacade .setInitParameter ("webAllowOthers" , "true" );
2634
27- super .init ();
35+ super .init (servletConfigFacade );
2836 }
2937}
38+
39+ /**
40+ * 主要为解决 jetty embedded 的问题
41+ */
42+ class ServletConfigFacade implements ServletConfig {
43+
44+ private ServletConfig servletConfig ;
45+
46+ private Map <String , String > initParams ;
47+
48+ public ServletConfigFacade (ServletConfig servletConfig ) {
49+ this .servletConfig = servletConfig ;
50+ this .initParams = new HashMap <String , String >();
51+
52+ initParams ();
53+ }
54+
55+ private void initParams () {
56+ Enumeration <?> en = servletConfig .getInitParameterNames ();
57+ while (en .hasMoreElements ()) {
58+ String name = en .nextElement ().toString ();
59+ String value = servletConfig .getInitParameter (name );
60+ initParams .put (name , value );
61+ }
62+ }
63+
64+ @ Override
65+ public String getServletName () {
66+ return servletConfig .getServletName ();
67+ }
68+
69+ @ Override
70+ public ServletContext getServletContext () {
71+ return servletConfig .getServletContext ();
72+ }
73+
74+ @ Override
75+ public String getInitParameter (String name ) {
76+ return initParams .get (name );
77+ }
78+
79+ @ Override
80+ public Enumeration <String > getInitParameterNames () {
81+ return Collections .enumeration (initParams .keySet ());
82+ }
83+
84+ public void setInitParameter (String name , String value ) {
85+ initParams .put (name , value );
86+ }
87+ }
0 commit comments