diff --git a/src/main/java/org/redkale/net/Context.java b/src/main/java/org/redkale/net/Context.java index b1023eeb9..1cac4bf03 100644 --- a/src/main/java/org/redkale/net/Context.java +++ b/src/main/java/org/redkale/net/Context.java @@ -42,7 +42,7 @@ public class Context { protected final int bufferCapacity; //服务的根Servlet - protected final DispatcherServlet prepare; + protected final DispatcherServlet dispatcher; //日志Logger protected final Logger logger; @@ -80,12 +80,12 @@ public class Context { public Context(ContextConfig config) { this(config.serverStartTime, config.logger, config.workExecutor, config.sslBuilder, config.sslContext, config.bufferCapacity, config.maxConns, config.maxBody, config.charset, config.serverAddress, config.resourceFactory, - config.prepare, config.aliveTimeoutSeconds, config.readTimeoutSeconds, config.writeTimeoutSeconds); + config.dispatcher, config.aliveTimeoutSeconds, config.readTimeoutSeconds, config.writeTimeoutSeconds); } public Context(long serverStartTime, Logger logger, ExecutorService workExecutor, SSLBuilder sslBuilder, SSLContext sslContext, int bufferCapacity, final int maxConns, final int maxBody, Charset charset, InetSocketAddress address, - ResourceFactory resourceFactory, DispatcherServlet prepare, int aliveTimeoutSeconds, int readTimeoutSeconds, int writeTimeoutSeconds) { + ResourceFactory resourceFactory, DispatcherServlet dispatcher, int aliveTimeoutSeconds, int readTimeoutSeconds, int writeTimeoutSeconds) { this.serverStartTime = serverStartTime; this.logger = logger; this.workExecutor = workExecutor; @@ -96,7 +96,7 @@ public class Context { this.maxBody = maxBody; this.charset = StandardCharsets.UTF_8.equals(charset) ? null : charset; this.serverAddress = address; - this.prepare = prepare; + this.dispatcher = dispatcher; this.resourceFactory = resourceFactory; this.aliveTimeoutSeconds = aliveTimeoutSeconds; this.readTimeoutSeconds = readTimeoutSeconds; @@ -112,11 +112,11 @@ public class Context { protected void executeDispatch(Request request, Response response) { if (workHashExecutor != null) { - workHashExecutor.execute(request.getHashid(), () -> prepare.prepare(request, response)); + workHashExecutor.execute(request.getHashid(), () -> dispatcher.dispatch(request, response)); } else if (workExecutor != null) { - workExecutor.execute(() -> prepare.prepare(request, response)); + workExecutor.execute(() -> dispatcher.dispatch(request, response)); } else { - prepare.prepare(request, response); + dispatcher.dispatch(request, response); } } @@ -245,7 +245,7 @@ public class Context { public int bufferCapacity; //服务的根Servlet - public DispatcherServlet prepare; + public DispatcherServlet dispatcher; //服务的监听地址 public InetSocketAddress serverAddress; diff --git a/src/main/java/org/redkale/net/DispatcherServlet.java b/src/main/java/org/redkale/net/DispatcherServlet.java index 0dcb86829..e5426bffc 100644 --- a/src/main/java/org/redkale/net/DispatcherServlet.java +++ b/src/main/java/org/redkale/net/DispatcherServlet.java @@ -11,6 +11,7 @@ import java.util.concurrent.atomic.LongAdder; import java.util.function.Predicate; import java.util.logging.Level; import java.util.stream.Stream; +import org.redkale.annotation.Async; import org.redkale.boot.Application; import org.redkale.util.*; @@ -43,6 +44,8 @@ public abstract class DispatcherServlet mappings = new HashMap<>(); + private volatile boolean allFilterAsync = true; + private final List> filters = new ArrayList<>(); protected Application application; @@ -176,10 +179,16 @@ public abstract class DispatcherServlet> T removeFilter(Class filterClass) { return removeFilter(f -> filterClass.equals(f.getClass())); } @@ -232,6 +241,14 @@ public abstract class DispatcherServlet { final Request request = response.request; final int rs = request.readHeader(buffer, lastReq); if (rs < 0) { //表示数据格式不正确 - final DispatcherServlet preparer = context.prepare; + final DispatcherServlet preparer = context.dispatcher; preparer.incrExecuteCounter(); channel.offerReadBuffer(buffer); if (rs != Integer.MIN_VALUE) { @@ -155,7 +155,7 @@ class ProtocolCodec implements CompletionHandler { context.logger.log(Level.FINEST, "request.readHeader erroneous (" + rs + "), force to close channel "); } } else if (rs == 0) { - context.prepare.incrExecuteCounter(); + context.dispatcher.incrExecuteCounter(); int pindex = pipelineIndex; boolean pipeline = false; Request hreq = lastReq; @@ -223,7 +223,7 @@ class ProtocolCodec implements CompletionHandler { @Override public void failed(Throwable exc, ByteBuffer attachment) { - context.prepare.incrIllegalRequestCounter(); + context.dispatcher.incrIllegalRequestCounter(); channel.offerReadBuffer(attachment); response.error(exc); if (exc != null) { diff --git a/src/main/java/org/redkale/net/Server.java b/src/main/java/org/redkale/net/Server.java index 67767292b..31e2c9149 100644 --- a/src/main/java/org/redkale/net/Server.java +++ b/src/main/java/org/redkale/net/Server.java @@ -417,7 +417,7 @@ public abstract class Server= '0' && ch <= '9') { continue; } - if (ch >= 'a' && ch <= 'a') { + if (ch >= 'a' && ch <= 'z') { continue; } if (ch >= 'A' && ch <= 'Z') { @@ -3586,7 +3586,7 @@ public final class Rest { } } this.existsPound = pound; - this.newMethodName = formatMappingName(this.name.replace('/', '$').replace('.', '_')); + this.newMethodName = formatMappingName(this.name.replace('/', '$').replace('.', '_').replace('-', '_')); this.newActionClassName = "_Dyn_" + this.newMethodName + "_ActionHttpServlet"; }