Skip to content

HTTP服务类使用说明

hely ho edited this page Jan 7, 2016 · 25 revisions

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();