package com.github.ltsopensource.admin.web.support;
import org.h2.server.web.WebServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* H2 Console 的 servlet
*
* @author Robert HG (254963746@qq.com) on 9/26/15.
*/
public class H2ConsoleWebServlet extends WebServlet {
private static final long serialVersionUID = 7664716645859452731L;
@Override
public void init(ServletConfig config) throws ServletException {
ServletConfigFacade servletConfigFacade = new ServletConfigFacade(config);
// http://h2database.com/html/features.html#connection_modes
// http://h2database.com/html/features.html#auto_mixed_mode
servletConfigFacade.setInitParameter("url", "jdbc:h2:mem:lts_admin;DB_CLOSE_DELAY=-1");
servletConfigFacade.setInitParameter("user", "lts");
servletConfigFacade.setInitParameter("password", "lts");
servletConfigFacade.setInitParameter("webAllowOthers", "true");
super.init(servletConfigFacade);
}
}
/**
* 主要为解决 jetty embedded 的问题
*/
class ServletConfigFacade implements ServletConfig {
private ServletConfig servletConfig;
private Map<String, String> initParams;
public ServletConfigFacade(ServletConfig servletConfig) {
this.servletConfig = servletConfig;
this.initParams = new HashMap<String, String>();
initParams();
}
private void initParams() {
Enumeration<?> en = servletConfig.getInitParameterNames();
while (en.hasMoreElements()) {
String name = en.nextElement().toString();
String value = servletConfig.getInitParameter(name);
initParams.put(name, value);
}
}
@Override
public String getServletName() {
return servletConfig.getServletName();
}
@Override
public ServletContext getServletContext() {
return servletConfig.getServletContext();
}
@Override
public String getInitParameter(String name) {
return initParams.get(name);
}
@Override
public Enumeration<String> getInitParameterNames() {
return Collections.enumeration(initParams.keySet());
}
public void setInitParameter(String name, String value) {
initParams.put(name, value);
}
}