From f7196dbff45a0276fb8652e2c3f5e1681b6c9226 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Mon, 10 Oct 2016 20:51:26 +0800 Subject: [PATCH] --- convert.html | 2 +- net.html | 214 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 156 insertions(+), 60 deletions(-) diff --git a/convert.html b/convert.html index fb3b9fab4..9fd0d9346 100644 --- a/convert.html +++ b/convert.html @@ -160,7 +160,7 @@ -public class UserInfoServlet extends BasedHttpServlet { +public class UserInfoServlet extends HttpBaseServlet { @Resource private UserSerice service; diff --git a/net.html b/net.html index 1bc9ae057..c2a702f53 100644 --- a/net.html +++ b/net.html @@ -37,16 +37,16 @@                 7、内置WebSocket的集群与组功能,且提供伪WebSocket连接功能。
                8、HttpResponse只能异步输出。

-

        编写Redkale的HttpServlet与 JSR 340中的javax.servlet.http.HttpServlet 基本相同,只需继承 org.redkale.net.http.HttpServlet, Redkale也提供了更友好的基类 org.redkale.net.http.BasedHttpServlet, 比较好的习惯是一个项目先定义一个项目级的BaseServlet类,这样方便以后加入类似javax.servlet.Filter的功能。

+

        编写Redkale的HttpServlet与 JSR 340中的javax.servlet.http.HttpServlet 基本相同,只需继承 org.redkale.net.http.HttpServlet, Redkale也提供了更友好的基类 org.redkale.net.http.HttpBaseServlet, 比较好的习惯是一个项目先定义一个项目级的BaseServlet类,这样方便以后加入类似javax.servlet.Filter的功能。

        一个典型的BaseSerlvet实现:

-
public class BaseSerlvet extends org.redkale.net.http.BasedHttpServlet {
+            
public class BaseSerlvet extends org.redkale.net.http.HttpBaseServlet {
 
     protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName());
 
     protected final boolean fine = logger.isLoggable(Level.FINE);
 
-    @Resource //[Redkale内置资源]  进程的启动时间
+    @Resource(name = "APP_TIME") //[Redkale内置资源]  进程的启动时间
     protected long serverCreateTime;
 
     @Resource //[Redkale内置资源]
@@ -99,7 +99,7 @@
     }
 }
-

        继承BasedHttpServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作用户HttpServlet:

+

        继承HttpBaseServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作用户HttpServlet:

@WebServlet({"/user/*"})  //拦截所有 /user/ 开头的请求
 public class UserServlet extends BaseSerlvet {
 
@@ -128,7 +128,7 @@
 
     //获取指定用户ID的用户信息, 请求如: /user/username/43565443
     @AuthIgnore
-    // 默认缓存时间是15秒,BasedHttpServlet会将每个进入该方法的请求的响应结果缓存15秒,缓存命中时不会再进入该方法,过期会清空。
+    // 默认缓存时间是15秒,HttpBaseServlet会将每个进入该方法的请求的响应结果缓存15秒,缓存命中时不会再进入该方法,过期会清空。
     // @HttpCacheable 必须配合  @AuthIgnore 使用, 因为跟当前用户有关的请求一般不适合所有用户请求。 
     // 翻页查询想缓存就需要将翻页信息带进url: /user/query/page:2/size:50 。
     @HttpCacheable(timeout = 30)  //有效期30秒
@@ -247,28 +247,10 @@
             

  . HttpRequest 对象

public class HttpRequest {
 
-    //获取请求方法 GET、POST等
-    public String getMethod();
-
-    //获取协议名 http、https、ws、wss等
-    public String getProtocol();
-
-    //获取Host的Header值
-    public String getHost();
-
-    //获取请求内容的长度, 为-1表示内容长度不确定
-    public long getContentLength();
-
-    //获取Content-Type的header值
-    public String getContentType();
-
-    //获取Connection的Header值
-    public String getConnection();
-
     //获取客户端地址IP
     public SocketAddress getRemoteAddress();
 
-    //获取客户端地址IP, 与getRemoteAddres() 的区别在于:本方法优先取header中指定为RemoteAddress名的值,没有则返回getRemoteAddres()。
+    //获取客户端地址IP, 与getRemoteAddres() 的区别在于:本方法优先取header中指定为RemoteAddress名的值,没有则返回getRemoteAddres()的getHostAddress()。
     //本方法适用于服务前端有如nginx的代理服务器进行中转,通过getRemoteAddres()是获取不到客户端的真实IP。
     public String getRemoteAddr();
 
@@ -296,11 +278,29 @@
     //获取所有Cookie对象
     public java.net.HttpCookie[] getCookies();
 
+    //获取Cookie值
+    public String getCookie(String name);
+
     //获取Cookie值, 没有返回默认值
     public String getCookie(String name, String defaultValue);
 
-    //获取Cookie值
-    public String getCookie(String name);
+    //获取协议名 http、https、ws、wss等
+    public String getProtocol();
+
+    //获取请求方法 GET、POST等
+    public String getMethod();
+
+    //获取Content-Type的header值
+    public String getContentType();
+
+    //获取请求内容的长度, 为-1表示内容长度不确定
+    public long getContentLength();
+
+    //获取Connection的Header值
+    public String getConnection();
+
+    //获取Host的Header值
+    public String getHost();
 
     //获取请求的URL
     public String getRequestURI();
@@ -311,20 +311,9 @@
     //从prefix之后截取getRequestURI再对"/"进行分隔
     public String[] getRequstURIPaths(String prefix);
 
-    //获取请求URL分段中含prefix段的long值
-    // 例如请求URL /pipes/record/query/time:1453104341363/id:40
-    // 获取time参数: long time = request.getRequstURIPath("time:", 0L);
-    public long getRequstURIPath(String prefix, long defaultValue);
-
-    //获取请求URL分段中含prefix段的int值
-    // 例如请求URL /pipes/record/query/page:2/size:50
-    // 获取page参数: int page = request.getRequstURIPath("page:", 1);
-    // 获取size参数: int size = request.getRequstURIPath("size:", 20);
-    public int getRequstURIPath(String prefix, int defaultValue);
-
-    //获取请求URL分段中含prefix段的值
-    //例如请求URL /pipes/record/query/name:hello
-    //获取name参数: String name = request.getRequstURIPath("name:", "none");
+    // 获取请求URL分段中含prefix段的值
+    // 例如请求URL /pipes/record/query/name:hello
+    // 获取name参数: String name = request.getRequstURIPath("name:", "none");
     public String getRequstURIPath(String prefix, String defaultValue);
 
     // 获取请求URL分段中含prefix段的short值
@@ -332,6 +321,43 @@
     // 获取type参数: short type = request.getRequstURIPath("type:", (short)0);
     public short getRequstURIPath(String prefix, short defaultValue);
 
+    // 获取请求URL分段中含prefix段的short值
+    // 例如请求URL /pipes/record/query/type:a
+    // 获取type参数: short type = request.getRequstURIPath(16, "type:", (short)0); type = 10
+    public short getRequstURIPath(int radix, String prefix, short defvalue);
+
+    // 获取请求URL分段中含prefix段的int值
+    // 例如请求URL /pipes/record/query/offset:2/limit:50
+    // 获取offset参数: int offset = request.getRequstURIPath("offset:", 1);
+    // 获取limit参数: int limit = request.getRequstURIPath("limit:", 20);
+    public int getRequstURIPath(String prefix, int defaultValue);
+
+    // 获取请求URL分段中含prefix段的int值
+    // 例如请求URL /pipes/record/query/offset:2/limit:10
+    // 获取offset参数: int offset = request.getRequstURIPath("offset:", 1);
+    // 获取limit参数: int limit = request.getRequstURIPath(16, "limit:", 20); // limit = 16
+    public int getRequstURIPath(int radix, String prefix, int defaultValue);
+
+    // 获取请求URL分段中含prefix段的float值   
+    // 例如请求URL /pipes/record/query/point:40.0  
+    // 获取time参数: float point = request.getRequstURIPath("point:", 0.0f);
+    public float getRequstURIPath(String prefix, float defvalue);
+
+    // 获取请求URL分段中含prefix段的long值
+    // 例如请求URL /pipes/record/query/time:1453104341363/id:40
+    // 获取time参数: long time = request.getRequstURIPath("time:", 0L);
+    public long getRequstURIPath(String prefix, long defaultValue);
+
+    // 获取请求URL分段中含prefix段的long值
+    // 例如请求URL /pipes/record/query/time:1453104341363/id:40
+    // 获取time参数: long time = request.getRequstURIPath("time:", 0L);
+    public long getRequstURIPath(int radix, String prefix, long defvalue);
+
+    // 获取请求URL分段中含prefix段的double值   <br>
+    // 例如请求URL /pipes/record/query/point:40.0   <br>
+    // 获取time参数: double point = request.getRequstURIPath("point:", 0.0);
+    public double getRequstURIPath(String prefix, double defvalue);
+
     //获取所有的header名
     public String[] getHeaderNames();
 
@@ -342,10 +368,10 @@
     public String getHeader(String name, String defaultValue);
 
     //获取指定的header的json值
-    public <T> T getJsonHeader(JsonConvert convert, Type type, String name);
+    public <T> T getJsonHeader(Type type, String name);
 
     //获取指定的header的json值
-    public <T> T getJsonHeader(Type type, String name);
+    public <T> T getJsonHeader(JsonConvert convert, Type type, String name);
 
     //获取指定的header的boolean值, 没有返回默认boolean值
     public boolean getBooleanHeader(String name, boolean defaultValue);
@@ -353,15 +379,30 @@
     // 获取指定的header的short值, 没有返回默认short值
     public short getShortHeader(String name, short defaultValue);
 
+    // 获取指定的header的short值, 没有返回默认short值
+    public short getShortHeader(int radix, String name, short defaultValue);
+
+    // 获取指定的header的short值, 没有返回默认short值
+    public short getShortHeader(String name, int defaultValue);
+
+    // 获取指定的header的short值, 没有返回默认short值
+    public short getShortHeader(int radix, String name, int defaultValue);
+
     //获取指定的header的int值, 没有返回默认int值
     public int getIntHeader(String name, int defaultValue);
 
-    // 获取指定的header的float值, 没有返回默认float值
-    public float getFloatHeader(String name, float defaultValue);
+    //获取指定的header的int值, 没有返回默认int值
+    public int getIntHeader(int radix, String name, int defaultValue);
 
     // 获取指定的header的long值, 没有返回默认long值
     public long getLongHeader(String name, long defaultValue);
 
+    // 获取指定的header的long值, 没有返回默认long值
+    public long getLongHeader(int radix, String name, long defaultValue);
+
+    // 获取指定的header的float值, 没有返回默认float值
+    public float getFloatHeader(String name, float defaultValue);
+
     //获取指定的header的double值, 没有返回默认double值
     public double getDoubleHeader(String name, double defaultValue);
 
@@ -375,10 +416,10 @@
     public String getParameter(String name, String defaultValue);
 
     //获取指定的参数json值
-    public <T> T getJsonParameter(JsonConvert convert, Type type, String name);
+    public <T> T getJsonParameter(Type type, String name);
 
     //获取指定的参数json值
-    public <T> T getJsonParameter(Type type, String name);
+    public <T> T getJsonParameter(JsonConvert convert, Type type, String name);
 
     //获取指定的参数boolean值, 没有返回默认boolean值
     public boolean getBooleanParameter(String name, boolean defaultValue);
@@ -386,18 +427,47 @@
     //获取指定的参数short值, 没有返回默认short值
     public short getShortParameter(String name, short defaultValue);
 
+    //获取指定的参数short值, 没有返回默认short值
+    public short getShortParameter(int radix, String name, short defaultValue);
+
+    //获取指定的参数short值, 没有返回默认short值
+    public short getShortParameter(int radix, String name, int defaultValue);
+
     //获取指定的参数int值, 没有返回默认int值
     public int getIntParameter(String name, int defaultValue);
 
-    //获取指定的参数float值, 没有返回默认float值
-    public float getFloatParameter(String name, float defaultValue);
+    //获取指定的参数int值, 没有返回默认int值
+    public int getIntParameter(int radix, String name, int defaultValue);
 
     //获取指定的参数long值, 没有返回默认long值
     public long getLongParameter(String name, long defaultValue);
 
+    //获取指定的参数long值, 没有返回默认long值
+    public long getLongParameter(int radix, String name, long defaultValue);
+
+    //获取指定的参数float值, 没有返回默认float值
+    public float getFloatParameter(String name, float defaultValue);
+
     //获取指定的参数double值, 没有返回默认double值
     public double getDoubleParameter(String name, double defaultValue);
-
+    
+    //获取翻页对象 同 getFlipper("flipper", false, 0);
+    public org.redkale.source.Flipper getFlipper();
+    
+    //获取翻页对象 同 getFlipper("flipper", needcreate, 0);
+    public org.redkale.source.Flipper getFlipper(boolean needcreate);
+    
+    //获取翻页对象 同 getFlipper("flipper", false, maxLimit);
+    public org.redkale.source.Flipper getFlipper(int maxLimit);
+    
+    //获取翻页对象 同 getFlipper("flipper", needcreate, maxLimit)
+    public org.redkale.source.Flipper getFlipper(boolean needcreate, int maxLimit);
+    
+    //获取翻页对象 http://redkale.org/pipes/records/list/offset:0/limit:20/sort:createtime%20ASC
+    //http://redkale.org/pipes/records/list?flipper={'offset':0,'limit':20, 'sort':'createtime ASC'}
+    //以上两种接口都可以获取到翻页对象
+    public org.redkale.source.Flipper getFlipper(String name, boolean needcreate, int maxLimit);
+    
     //获取HTTP上下文对象
     public HttpContext getContext();
 
@@ -415,12 +485,19 @@
 
     //获取request创建时间
     public long getCreatetime();
-}
+} +

  . HttpResponse 对象

public class HttpResponse {
 
+    //增加Cookie值
+    public HttpResponse addCookie(HttpCookie... cookies);
+
+    //增加Cookie值
+    public HttpResponse addCookie(Collection<HttpCookie> cookies);
+
     //设置状态码
     public void setStatus(int status);
 
@@ -431,26 +508,26 @@
     public String getContentType();
 
     //设置 ContentType
-    public void setContentType(String contentType);
+    public HttpResponse setContentType(String contentType);
 
     //获取内容长度
     public long getContentLength();
 
     //设置内容长度
-    public void setContentLength(long contentLength);
+    public HttpResponse setContentLength(long contentLength);
 
     //设置Header值
-    public void setHeader(String name, Object value);
+    public HttpResponse setHeader(String name, Object value);
 
     //添加Header值
-    public void addHeader(String name, Object value);
+    public HttpResponse addHeader(String name, Object value);
+
+    //添加Header值
+    public HttpResponse addHeader(Map<String, ?> map);
 
     //跳过header的输出
     //通常应用场景是,调用者的输出内容里已经包含了HTTP的响应头信息,因此需要调用此方法避免重复输出HTTP响应头信息。
-    public void skipHeader();
-
-    //增加Cookie值
-    public void addCookie(HttpCookie... cookies);
+    public HttpResponse skipHeader();
 
     //异步输出指定内容
     public <A> void sendBody(ByteBuffer buffer, A attachment, CompletionHandler<Integer, A> handler);
@@ -476,6 +553,18 @@
     //将对象以JSON格式输出
     public void finishJson(final Object... objs);
 
+    //将RetResult对象以JSON格式输出
+    public void finishJson(final org.redkale.service.RetResult ret);
+
+    //将RetResult对象以JSON格式输出
+    public void finishJson(final JsonConvert convert, final org.redkale.service.RetResult ret);
+
+    //将对象以JavaScript格式输出
+    public void finishJsResult(String var, Object result);
+
+    //将对象以JavaScript格式输出
+    public void finishJsResult(JsonConvert jsonConvert, String var, Object result);
+
     //将指定字符串以响应结果输出
     public void finish(String obj);
 
@@ -504,7 +593,14 @@
 
     //将指定文件按响应结果输出
     public void finish(File file) throws IOException;
-}
+ + //将文件按指定文件名输出 + public void finish(final String filename, File file) throws IOException; + + //HttpResponse回收时回调的监听方法 + public void setRecycleListener(BiConsumer<HttpRequest, HttpResponse> recycleListener); +} +

  . WebSocket 对象