diff --git a/src/main/java/org/redkale/net/http/HttpContext.java b/src/main/java/org/redkale/net/http/HttpContext.java index f173273f1..0a62714bc 100644 --- a/src/main/java/org/redkale/net/http/HttpContext.java +++ b/src/main/java/org/redkale/net/http/HttpContext.java @@ -41,7 +41,7 @@ public class HttpContext extends Context { protected final AnyValue rpcAuthenticatorConfig; - //所有Servlet方法都不需要读取http-header且不存在HttpFilter的情况下,lazyHeaders=true + //所有Servlet方法都不需要读取http-header且RestBaseServlet不是自定义HttpServlet且不存在HttpFilter的情况下,lazyHeaders=true protected boolean lazyHeaders; //存在动态改值 Function webSocketWriterIOThreadFunc; diff --git a/src/main/java/org/redkale/net/http/HttpDispatcherServlet.java b/src/main/java/org/redkale/net/http/HttpDispatcherServlet.java index 3ac6caf6e..c8634719d 100644 --- a/src/main/java/org/redkale/net/http/HttpDispatcherServlet.java +++ b/src/main/java/org/redkale/net/http/HttpDispatcherServlet.java @@ -315,6 +315,10 @@ public class HttpDispatcherServlet extends DispatcherServlet { protected static final String KEY_HOST = "Host"; + protected static final String KEY_EXPECT = "Expect"; + public static final String SESSIONID_NAME = "JSESSIONID"; //---------- header 相关参数 开始 ---------- @@ -87,6 +89,8 @@ public class HttpRequest extends Request { private boolean maybews = false; //是否可能是WebSocket + private boolean expect = false; //是否Expect:100-continue + protected boolean rpc; protected int readState = READ_STATE_ROUTE; @@ -257,6 +261,10 @@ public class HttpRequest extends Request { return maybews && "Upgrade".equalsIgnoreCase(getHeader("Connection")) && "GET".equalsIgnoreCase(method); } + protected boolean isExpect() { + return expect; + } + protected void setKeepAlive(boolean keepAlive) { this.keepAlive = keepAlive; } @@ -303,6 +311,7 @@ public class HttpRequest extends Request { this.cookies = httplast.cookies; this.keepAlive = httplast.keepAlive; this.maybews = httplast.maybews; + this.expect = httplast.expect; this.rpc = httplast.rpc; this.traceid = httplast.traceid; this.hashid = httplast.hashid; @@ -736,6 +745,12 @@ public class HttpRequest extends Request { this.maybews = "websocket".equalsIgnoreCase(value); headers.put("Upgrade", value); break; + case "Expect": + case "expect": + value = bytes.toString(true, charset); + this.expect = "100-continue".equalsIgnoreCase(value); + headers.put("Expect", value); + break; case "user-agent": value = bytes.toString(charset); headers.put("User-Agent", value); @@ -824,6 +839,11 @@ public class HttpRequest extends Request { return KEY_COOKIE; } } + } else if (first == 'E' && size == 6) { //Expect + if (bs[1] == 'x' && bs[2] == 'p' && bs[3] == 'e' + && bs[4] == 'c' && bs[5] == 't') { + return KEY_EXPECT; + } } return bytes.toString(latin1, charset); } @@ -844,6 +864,7 @@ public class HttpRequest extends Request { req.cookies = this.cookies; req.keepAlive = this.keepAlive; req.maybews = this.maybews; + req.expect = this.expect; req.rpc = this.rpc; req.traceid = this.traceid; req.hashid = this.hashid; @@ -881,6 +902,7 @@ public class HttpRequest extends Request { this.cookie = null; this.cookies = null; this.maybews = false; + this.expect = false; this.rpc = false; this.readState = READ_STATE_ROUTE; this.currentUserid = CURRUSERID_NIL; diff --git a/src/main/java/org/redkale/net/http/HttpSimpleRequest.java b/src/main/java/org/redkale/net/http/HttpSimpleRequest.java index b208e810a..7268f39ae 100644 --- a/src/main/java/org/redkale/net/http/HttpSimpleRequest.java +++ b/src/main/java/org/redkale/net/http/HttpSimpleRequest.java @@ -227,7 +227,7 @@ public class HttpSimpleRequest implements java.io.Serializable { return this; } - public HttpSimpleRequest header(String key, JsonConvert convert, Object value) { + public HttpSimpleRequest header(String key, TextConvert convert, Object value) { if (value == null) { return this; } @@ -276,7 +276,7 @@ public class HttpSimpleRequest implements java.io.Serializable { return this; } - public HttpSimpleRequest param(String key, JsonConvert convert, Object value) { + public HttpSimpleRequest param(String key, TextConvert convert, Object value) { if (value == null) { return this; } diff --git a/src/main/java/org/redkale/net/http/Rest.java b/src/main/java/org/redkale/net/http/Rest.java index f5c3bc50f..57c97fe4b 100644 --- a/src/main/java/org/redkale/net/http/Rest.java +++ b/src/main/java/org/redkale/net/http/Rest.java @@ -1145,9 +1145,6 @@ public final class Rest { if ("init".equals(method.getName())) { continue; } - if ("stop".equals(method.getName())) { - continue; - } if ("destroy".equals(method.getName())) { continue; } @@ -1597,9 +1594,6 @@ public final class Rest { if ("init".equals(method.getName())) { continue; } - if ("stop".equals(method.getName())) { - continue; - } if ("destroy".equals(method.getName())) { continue; } diff --git a/src/main/java/org/redkale/net/http/WebSocketServlet.java b/src/main/java/org/redkale/net/http/WebSocketServlet.java index 756444687..86eff98d6 100644 --- a/src/main/java/org/redkale/net/http/WebSocketServlet.java +++ b/src/main/java/org/redkale/net/http/WebSocketServlet.java @@ -35,9 +35,9 @@ import org.redkale.util.*; * WebSocketEngine * WebSocketNode * / \ - * / \ - * / \ - * WebSocket1 WebSocket2 + * / \ + * / \ + * WebSocket1 WebSocket2 * * * @@ -78,13 +78,13 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl //同RestWebSocket.liveinterval protected int liveinterval = DEFAILT_LIVEINTERVAL; - //同RestWebSocket.wsMaxConns + //同RestWebSocket.wsmaxconns protected int wsmaxconns = 0; - //同RestWebSocket.wsThreads + //同RestWebSocket.wsthreads protected int wsthreads = 0; - //同RestWebSocket.wsMaxBody + //同RestWebSocket.wsmaxbody protected int wsmaxbody = 32 * 1024; //同RestWebSocket.anyuser diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java index 2e0698e06..97f340dea 100644 --- a/src/main/java/org/redkale/net/sncp/Sncp.java +++ b/src/main/java/org/redkale/net/sncp/Sncp.java @@ -106,7 +106,7 @@ public abstract class Sncp { continue; } if (method.getParameterCount() == 1 && method.getParameterTypes()[0] == AnyValue.class) { - if (method.getName().equals("init") || method.getName().equals("stop") || method.getName().equals("destroy")) { + if (method.getName().equals("init") || method.getName().equals("destroy")) { continue; } } @@ -893,12 +893,6 @@ public abstract class Sncp { mv.visitMaxs(0, 2); mv.visitEnd(); } - { //stop - mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, "stop", "(" + anyValueDesc + ")V", null, null)); - mv.visitInsn(RETURN); - mv.visitMaxs(0, 2); - mv.visitEnd(); - } { //destroy mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, "destroy", "(" + anyValueDesc + ")V", null, null)); mv.visitInsn(RETURN); diff --git a/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java b/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java index 8d45bdb58..29d5e9a7c 100644 --- a/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java +++ b/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java @@ -8,24 +8,7 @@ import java.nio.channels.CompletionHandler; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import org.redkale.asm.*; -import static org.redkale.asm.Opcodes.ACC_FINAL; -import static org.redkale.asm.Opcodes.ACC_PRIVATE; -import static org.redkale.asm.Opcodes.ACC_PUBLIC; -import static org.redkale.asm.Opcodes.ACC_SUPER; -import static org.redkale.asm.Opcodes.ACONST_NULL; -import static org.redkale.asm.Opcodes.ALOAD; -import static org.redkale.asm.Opcodes.ARETURN; -import static org.redkale.asm.Opcodes.DRETURN; -import static org.redkale.asm.Opcodes.FRETURN; -import static org.redkale.asm.Opcodes.GETFIELD; -import static org.redkale.asm.Opcodes.ICONST_0; -import static org.redkale.asm.Opcodes.INVOKEINTERFACE; -import static org.redkale.asm.Opcodes.INVOKESPECIAL; -import static org.redkale.asm.Opcodes.IRETURN; -import static org.redkale.asm.Opcodes.LRETURN; -import static org.redkale.asm.Opcodes.PUTFIELD; -import static org.redkale.asm.Opcodes.RETURN; -import static org.redkale.asm.Opcodes.V11; +import static org.redkale.asm.Opcodes.*; import org.redkale.asm.Type; import org.redkale.util.*; @@ -43,19 +26,19 @@ import org.redkale.util.*; */ public interface SncpAsyncHandler extends CompletionHandler { - public static SncpAsyncHandler createHandler(Class handlerClazz, CompletionHandler realHandler) { + public static SncpAsyncHandler createHandler(Class handlerClazz, CompletionHandler factHandler) { Objects.requireNonNull(handlerClazz); - Objects.requireNonNull(realHandler); + Objects.requireNonNull(factHandler); if (handlerClazz == CompletionHandler.class) { return new SncpAsyncHandler() { @Override public void completed(Object result, Object attachment) { - realHandler.completed(result, attachment); + factHandler.completed(result, attachment); } @Override public void failed(Throwable exc, Object attachment) { - realHandler.failed(exc, attachment); + factHandler.failed(exc, attachment); } }; } @@ -84,7 +67,7 @@ public interface SncpAsyncHandler extends CompletionHandler { cw.visit(V11, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, newDynName, null, handlerInterface ? "java/lang/Object" : handlerClassName, handlerInterface && handlerClass != sncpHandlerClass ? new String[]{handlerClassName, sncpHandlerName} : new String[]{sncpHandlerName}); { //handler 属性 - fv = cw.visitField(ACC_PRIVATE, "realHandler", realHandlerDesc, null, null); + fv = cw.visitField(ACC_PRIVATE, "factHandler", realHandlerDesc, null, null); fv.visitEnd(); } {//构造方法 @@ -94,7 +77,7 @@ public interface SncpAsyncHandler extends CompletionHandler { av0 = mv.visitAnnotation(cpDesc, true); { AnnotationVisitor av1 = av0.visitArray("value"); - av1.visit(null, "realHandler"); + av1.visit(null, "factHandler"); av1.visitEnd(); } av0.visitEnd(); @@ -103,7 +86,7 @@ public interface SncpAsyncHandler extends CompletionHandler { mv.visitMethodInsn(INVOKESPECIAL, handlerInterface ? "java/lang/Object" : handlerClassName, "", "()V", false); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); - mv.visitFieldInsn(PUTFIELD, newDynName, "realHandler", realHandlerDesc); + mv.visitFieldInsn(PUTFIELD, newDynName, "factHandler", realHandlerDesc); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); @@ -114,7 +97,7 @@ public interface SncpAsyncHandler extends CompletionHandler { if (Modifier.isPublic(mod) && "completed".equals(method.getName()) && method.getParameterCount() == 2) { mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, "completed", methodDesc, null, null)); mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, newDynName, "realHandler", realHandlerDesc); + mv.visitFieldInsn(GETFIELD, newDynName, "factHandler", realHandlerDesc); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEINTERFACE, realHandlerName, "completed", "(Ljava/lang/Object;Ljava/lang/Object;)V", true); @@ -136,7 +119,7 @@ public interface SncpAsyncHandler extends CompletionHandler { } else if (Modifier.isPublic(mod) && "failed".equals(method.getName()) && method.getParameterCount() == 2) { mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, "failed", methodDesc, null, null)); mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, newDynName, "realHandler", realHandlerDesc); + mv.visitFieldInsn(GETFIELD, newDynName, "factHandler", realHandlerDesc); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEINTERFACE, realHandlerName, "failed", "(Ljava/lang/Throwable;Ljava/lang/Object;)V", true); @@ -192,7 +175,7 @@ public interface SncpAsyncHandler extends CompletionHandler { }.loadClass(newDynName.replace('/', '.'), bytes); RedkaleClassLoader.putDynClass(newDynName.replace('/', '.'), bytes, newClazz); return (Creator) Creator.create(newClazz); - }).create(realHandler); + }).create(factHandler); } static class HandlerInner {