package com.mossle.core.servlet; import java.io.IOException; import java.util.Collections; import java.util.Map; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ProxyServlet implements Servlet { private static Logger logger = LoggerFactory.getLogger(ProxyServlet.class); private final String name; private final Servlet servlet; private final Map<String, String> map; private final boolean enable; public ProxyServlet(String name, Servlet servlet) { this(name, servlet, Collections.EMPTY_MAP, true); } public ProxyServlet(String name, Servlet servlet, Map<String, String> map) { this(name, servlet, map, true); } public ProxyServlet(String name, Servlet servlet, boolean enable) { this(name, servlet, Collections.EMPTY_MAP, enable); } public ProxyServlet(String name, Servlet servlet, Map<String, String> map, boolean enable) { this.name = name; this.servlet = servlet; this.map = map; this.enable = enable; } public void init(ServletConfig config) throws ServletException { if (enable) { ProxyServletConfig proxyServletConfig = new ProxyServletConfig( config.getServletContext()); proxyServletConfig.setServletName(name); proxyServletConfig.setMap(map); servlet.init(proxyServletConfig); } } public ServletConfig getServletConfig() { return servlet.getServletConfig(); } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { logger.trace("{}", name); if (enable) { servlet.service(req, res); } else { logger.trace("skip"); ((HttpServletResponse) res) .sendError(HttpServletResponse.SC_NOT_FOUND); } } public String getServletInfo() { return name; } public void destroy() { if (enable) { servlet.destroy(); } } // ~ ================================================== public String getName() { return name; } }