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 对象