可定制DispatcherServlet
This commit is contained in:
@@ -57,7 +57,7 @@ public abstract class Server<K extends Serializable, C extends Context, R extend
|
||||
protected final ResourceFactory resourceFactory;
|
||||
|
||||
//服务的根Servlet
|
||||
protected final DispatcherServlet<K, C, R, P, S> dispatcher;
|
||||
protected DispatcherServlet<K, C, R, P, S> dispatcher;
|
||||
|
||||
//ClassLoader
|
||||
protected RedkaleClassLoader serverClassLoader;
|
||||
@@ -138,6 +138,14 @@ public abstract class Server<K extends Serializable, C extends Context, R extend
|
||||
if (!this.name.matches("^[a-zA-Z][\\w_-]{1,64}$")) {
|
||||
throw new RedkaleException("server.name (" + this.name + ") is illegal");
|
||||
}
|
||||
String dispatcherImpl = config.getValue("dispatcher");
|
||||
if (Utility.isNotBlank(dispatcherImpl)) {
|
||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
||||
Class dispatcherImplClass = classLoader.loadClass(dispatcherImpl);
|
||||
RedkaleClassLoader.putReflectionDeclaredConstructors(dispatcherImplClass, dispatcherImplClass.getName());
|
||||
this.dispatcher = (DispatcherServlet) dispatcherImplClass.getConstructors()[0].newInstance();
|
||||
this.dispatcher.application = application;
|
||||
}
|
||||
AnyValue sslConf = config.getAnyValue("ssl");
|
||||
if (sslConf != null) {
|
||||
String builderClass = sslConf.getValue("builder", SSLBuilder.class.getName());
|
||||
|
||||
@@ -113,14 +113,14 @@ public class HttpDispatcherServlet extends DispatcherServlet<String, HttpContext
|
||||
}
|
||||
|
||||
public HttpServlet removeHttpServlet(final HttpServlet servlet) {
|
||||
Predicate<MappingEntry> predicateEntry = (t) -> t.servlet == servlet;
|
||||
Predicate<Map.Entry<String, WebSocketServlet>> predicateFilter = (t) -> t.getValue() == servlet;
|
||||
Predicate<MappingEntry> predicateEntry = t -> t.servlet == servlet;
|
||||
Predicate<Map.Entry<String, WebSocketServlet>> predicateFilter = t -> t.getValue() == servlet;
|
||||
removeHttpServlet(predicateEntry, predicateFilter);
|
||||
return servlet;
|
||||
}
|
||||
|
||||
public <T extends HttpServlet> HttpServlet removeHttpServlet(Service service) {
|
||||
Predicate<MappingEntry> predicateEntry = (t) -> {
|
||||
public HttpServlet removeHttpServlet(Service service) {
|
||||
Predicate<MappingEntry> predicateEntry = t -> {
|
||||
if (!Rest.isRestDyn(t.servlet)) {
|
||||
return false;
|
||||
}
|
||||
@@ -161,7 +161,7 @@ public class HttpDispatcherServlet extends DispatcherServlet<String, HttpContext
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends WebSocket> HttpServlet removeHttpServlet(Class<T> websocketOrServletType) {
|
||||
Predicate<MappingEntry> predicateEntry = (t) -> {
|
||||
Predicate<MappingEntry> predicateEntry = t -> {
|
||||
Class type = t.servlet.getClass();
|
||||
if (type == websocketOrServletType) {
|
||||
return true;
|
||||
@@ -169,7 +169,7 @@ public class HttpDispatcherServlet extends DispatcherServlet<String, HttpContext
|
||||
RestDynSourceType rdt = (RestDynSourceType) type.getAnnotation(RestDynSourceType.class);
|
||||
return (rdt != null && rdt.value() == websocketOrServletType);
|
||||
};
|
||||
Predicate<Map.Entry<String, WebSocketServlet>> predicateFilter = (t) -> {
|
||||
Predicate<Map.Entry<String, WebSocketServlet>> predicateFilter = t -> {
|
||||
Class type = t.getValue().getClass();
|
||||
if (type == websocketOrServletType) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user