-
Notifications
You must be signed in to change notification settings - Fork 69
HTTP服务类使用说明
###一、类说明 ####1. 架构图
####2.HTTP服务类 #####2.1类路径
org.voovan.http.server.HttpServer
#####2.2 类方法说明
- 构造函数
public HttpServer(WebServerConfig config) throws IOException
-
构造HTTP服务对象
-
config: HTTP服务类的配置对象。
-
配置文件构造实例
public static HttpServer newInstance()
-
该方法会使用系统配置文件进行 HttpServer 的初始化。配置文件路径/Config目录下。
-
HTTP 方法响应函数
public void [Method](String routeRegexPath, HttpBizHandler handler)
-
为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
-
routeRegexPath: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。
-
handler: HttpBizHandler对象的实例用来支持具体的HTTP事件。
-
自定义 HTTP 方法响应函数
public void otherMethod(String method, String routeRegexPath, HttpBizHandler handler)
-
为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
-
method: 自定义的 HTTP 方法,可以不用符合 HTTP 规范,注意已经实现的HTTP方法响应不会再被这个方法响应。
-
routeRegexPath: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。
-
handler: HttpBizHandler对象的实例用来支持具体的HTTP事件。
-
WebSocket响应函数
public void socket(String routeRegexPath, WebSocketBizHandler handler)
- 为WebSocket方法提供服务。
- routeRegexPath: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。
- handler: WebSocketBizHandler对象的实例用来支持具体的WebSocket事件。
####3. HTTP服务配置文件 Http 服务配置文件采用 JSON 的格式进行服务配置。 #####3.1 服务配置文件 配置文件路径: /Config/web.js
{
// 服务 IP 地址,默认0.0.0.0
"Host" : "0.0.0.0",
// 服务端口,默认8080
"Port" : 28080,
// 连接超时时间(s),默认30秒
"Timeout" : 30,
// 上下文路径
"ContextPath" : "/Users/helyho/Downloads",// /home/helyho/HttpServerDemo/WebApp
// 默认字符集,默认 UTF-8
"CharacterSet" : "GB2312",
// Session 容器类,默认java.util.Hashtable
"SessionContainer" : "java.util.Hashtable",
// Session 会话超时时间(m),默认30分钟
"SessionTimeout" : 30,
// KeepAlive 超时时间(s),默认5秒 (该参数同样会被应用到 WebSocket 的连接保持上)
"KeepAliveTimeout" : 5,
// 是否启用Gzip压缩
"Gzip" : "on",
// 过滤器 先执行filter1, 后执行filter2
"Filter":[
{
"Name" : "filter1",
"ClassName" : "org.voovan.test.http.HttpBizFilterTest",
"Encoding" : "UTF-8",
"Action" : "pass" },
{
"Name" : "filter2",
"ClassName" : "org.voovan.test.http.HttpBizFilterTest",
"Encoding" : "UTF-8",
"Action" : "pass" }
]
}
也可以通过自己构造org.voovan.http.server.WebServerConfig对象来通过带参数的构造方法初始化HttpServer,带参数的构造方法如下:
public HttpServer(WebServerConfig config) throws IOException
#####3.2 MIME 类型配置文件 配置文件路径: /Config/mime.js
配置方式: "文件类型":"MIME 类型"
{
"123": "application/vnd.lotus-1-2-3",
"3dml": "text/vnd.in3d.3dml",
"3ds": "image/x-3ds",
"3g2": "video/3gpp2",
"3gp": "video/3gpp",
......
}
#####3.3 异常类型配置文件 配置文件路径: /Config/error.js
{
//静态文件访问未找到目标文件
"org.hocate.http.server.Exception.ResourceNotFound":{ //异常类
"StatusCode" :404, //返回的错误码,默认值500
"Page" :"Error.html", //异常处理页面,默认值Error.html
"Description" :"The request file is not found." //错误描述信息,默认值Java栈的信息
}
......
}
####4.HTTP服务配置类 #####4.1 类路径
org.voovan.http.server.WebServerConfig
#####4.2 属性说明 HTTP服务配置类是一个Java BEAN. 具体的 bean 属性有:
属性 | 说明 | BEAN函数 |
---|---|---|
host | 服务器服务地址 | public String getHost() public void setHost(String host) |
port | 服务器服务端口 | public int getPort() public void setPort(int host) |
timeout | 连接超时时间(ms),默认30000 | public int getTimeout() public void setTimeout(int host) |
contextPath | 上下文路径,默认静态文件加载路径 | public String getContextPath() public void setContextPath(String host) |
characterSet | 默认字符集,默认 UTF-8 | public String getCharacterSet() public void setCharacterSet(String host) |
sessionContainer | Session 容器类,默认java.util.Hashtable | public String getSessionContainer() public void setSessionContainer(String host) |
sessionTimeout | Session 超时时间(m),默认30分钟 | public int getSessionTimeout() public void setSessionTimeout(int host) |
keepAliveTimeout | KeepAlive 超时时间(m),默认5分钟 | public int getKeepAliveTimeout() public void setKeepAliveTimeout(int host) |
####5. HTTP服务业务接口 #####5.1 接口路径
org.voovan.http.server.HttpBizHandler
#####5.2 函数说明
public void Process(HttpRequest request,HttpResponse response) throws Exception
- 业务请求会调用用户实现的这个类
-
request: HTTPServer 请求对象,对应的类
org.voovan.http.server.HttpRequest
。 -
response: HTTPServer 响应对象,对应的类
org.voovan.http.server.HttpResponse
。
####6. HTTP服务过滤器接口 #####6.1 接口路径
org.voovan.http.server.HttpBizFilter
#####6.2 函数说明
public void doFilter(FilterConfig filterConfig, HttpRequest request, HttpResponse response)
- 业务请求会调用用户实现的这个类
-
filterConfig: 过滤器配置类,对应的类
org.voovan.http.server.WebConfig.FilterConfig
。 -
request: HTTPServer 请求对象,对应的类
org.voovan.http.server.HttpRequest
。 -
response: HTTPServer 响应对象,对应的类
org.voovan.http.server.HttpResponse
。
filterConfig对象中可以获取过滤器名称,过滤器类定义,过滤器参数,具体使用请参看类定义。
####7. WebSocket服务实现接口 #####7.1 接口路径
org.voovan.http.server.websocket.WebSocketBizHandler
#####7.2 函数说明
public void onOpen(HttpRequest upgradeRequest);
- WebSocket连接事件响应函数
- params: WebSocket 连接时的 HTTP 请求中的参数.
public ByteBuffer onRecived(HttpRequest upgradeRequest,ByteBuffer message);
- WebSocket接收消息事件响应函数
- params: WebSocket 连接时的 HTTP 请求中的参数.
- message: WebSocket 接收的消息缓冲字节.
public void onClose();
- WebSocket关闭事件响应函数
###二、使用举例
//构造 HttpServer 对象,使用配置文件的配置构造一个 HTTPServer,也可以使用默认构造函数构造.
HttpServer httpServer = HttpServer.newInstance();
//普通 GET 请求样例
httpServer.get("/", (req, resp) -> {
resp.write("我是测试小消息");
});
//带路径参数的 GET 请求样例
httpServer.get("/:name/:age", (req, resp) -> {
//req.getParameter("name") 获取请求路径中的name参数
//req.getParameter("age") 获取请求路径中的age参数
resp.write("我是测试小消息");
});
// 重定向 请求样例
httpServer.get("/redirect", (req, resp) -> {
resp.redirct("http://www.baidu.com");
});
//POST 请求样例
httpServer.post("/", (req, resp) -> {
resp.write("我是测试小消息");
});
//WebSocket请求样例
httpServer.socket("/websocket", new WebSocketBizHandler() {
@Override
public ByteBuffer onRecived(HttpRequest upgradeRequest, ByteBuffer message) {
//收到的消息
String msg = new String(message.array());
//返回消息
return ByteBuffer.wrap(msg.getBytes());
}
@Override
public void onOpen(HttpRequest upgradeRequest) {
Logger.info("WebSocket connect!");
}
@Override
public void onClose() {
Logger.info("WebSocket close!");
}
});
//HttpServer服务启动
httpServer.Serve();