- 授权协议: GPL
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: http://git.oschina.net/xmtom/share/tree/master/netty_springmvc
- 软件文档: http://bbs.ranko.cn/forum-5.htm
软件介绍
Netty 整合 SpringFramework 代码示例。
启动类代码:
package cn.ranko.api;
import cn.ranko.framework.core.RankoServer;
/**
* Created by zhujun on 2016/8/11.
*
* 测试地址:http://localhost:8200/api-demo/test.action
* 内容返回:{"demoId":1,"demoStr":"test1"}
*
*/
public class ApiServer {
private static RankoServer server;
public static void main(String[] args) throws Exception {
int serverPort = Integer.parseInt(args.length > 0 && args[0] != null ? args[0] : "8200");
server = new RankoServer(serverPort);
server.start();
}
}整合代码:
package cn.ranko.framework.core;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpRequestDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.stream.ChunkedWriteHandler;
import org.apache.log4j.Logger;
import org.springframework.mock.web.MockServletContext;
import javax.servlet.ServletException;
/**
* Created by zhujun on 2016/6/20.
*/
public class RankoServer {
private Logger logger = Logger.getLogger(getClass().getName());
private int serverPort;
private ServerBootstrap bootstrap;
public RankoServer(int serverPort) {
this.serverPort = serverPort;
}
public void start() throws InterruptedException, ServletException {
if (this.bootstrap != null) {
throw new IllegalStateException("Server is started, please do not repeat");
}
bootstrap = new ServerBootstrap();
ApplicationContextHolder.init();
bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup()).channel(
NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpObjectAggregator(65536)); // 上传限制3M
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
pipeline.addLast("handler",new DispatcherServletHandler(ApplicationContextHolder.getDispatcherServlet()));
}
});
ChannelFuture f = bootstrap.bind(this.serverPort).sync();// 配置完成,开始绑定server,通过调用sync同步方法阻塞直到绑定成功
f.channel().closeFuture().sync();// 应用程序会一直等待,直到channel关闭
logger.info("server listens to port " + this.serverPort);
}
}
Ajax Design Patterns
Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99
Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
HEX HSV 转换工具
HEX HSV 互换工具
